当前您所在的位置:首页>新闻中心>新品发布
新品发布
行业动态
营销活动

SQL Server 小技巧:如何还原SQL Server主数据库?

发布时间:2021/01/20 浏览量:2180

2020年9月1日,肯尼思·伊吉里(Kenneth Igiri)编程,SQL Server

 

简介

主数据库包含当前实例和所有其他数据库的结构/配置记录。 运行sp_configure时,您正在将数据写入master数据库。 它还包含监视实例所需的大多数动态管理视图。

主数据库的重要性至关重要。 首先,它具有打开所有其他数据库所需的信息,并且必须首先打开。 然后,它涉及当前实例的所有实例级别主体。

每天备份master数据库至关重要。 同样重要的是要知道如何将master数据库还原到实例。 最常见的情况是数据库崩溃或在不再使用源实例时需要将master数据库还原到另一个实例。 在本文中,我们将研究将master数据库移至另一个实例的特定情况。 

 

检查应用程序服务的状态

将主数据库恢复到另一个实例中,需要以单用户模式启动实例。因此,必须确保活动会话是控制实例的唯一会话。

为此,要停止所有应用程序服务对实例的访问,特别是当这些应用程序具有特权访问时。如果在应用程序已经建立了会话的情况下以单用户模式启动实例,就会出现问题。在这种情况下,您将无法从SQL Server Management Studio继续进行交互式会话。

 

停止SQL SERVER服务

使用SQL Server配置管理器停止所有SQL Server服务:右键单击每个服务,然后从上下文菜单中选择``停止''(参见图2)。

 

image001.gif

图1.停止SQL服务

 

在单用户模式下启动SQL Server

要还原主站数据库,您需要在单用户模式下使用SQL Server实例。 请执行以下步骤:

1.     打开CMD提示

2.     导航到C:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Binn

3.     发出sqlservr –m或NET启动MSSQLServer / c / m / T3604

 

image002.gif

图2.以单用户模式启动SQL Server

 

image003.gif

图3.以单用户模式启动SQL Server

 

请注意,步骤2是指Bin目录目录的位置。 您的安装可能会有所不同。

您可以通过在SQL Server配置管理器中检查SQL Server服务属性的“服务”选项卡找到所需的目录(请参见图4):

 

image004.gif

图4.检查SQL Server安装路径

 

恢复主站

当您将主站从一个实例还原到另一个实例时,您会在系统目录中获得新的主体和新值,其中包含诸如实例名称甚至tempdb位置之类的值。

在还原主服务器之前,请确保目标服务器的路径可用于源服务器中定义的TempDB文件。 否则,还原完成后,新实例将无法成功启动。

1.打开SQL Server Management Studio

2.在SQL Server Management Studio中运行清单1中的代码

-- Listing 1: Restore Master Database
restore database master from disk ='' with replace;

image005.gif

图5.恢复主站

注意:还原完成后,实例将关闭。

 

服务账户变更

要在还原完成后启动SQL Server,请执行以下操作:

1.     将“ SQL Server服务帐户”更改为当前登录的帐户。

2.     打开开始>所有程序> Microsoft SQL Server 2005>配置工具> SQL Server配置管理器

3.     右键单击每个服务并选择属性

4.     在登录选项卡中,输入所需的帐户名称和相应的密码。

image006.gif

图6.更改服务帐户

 

服务器名称

主数据库包含其所在实例的名称。 由于在这种情况下还原的备份来自其他实例,因此您需要使用存储过程来更新服务器名称,如清单2所示。

-- Listing 2: Change the Instance Name for a SQL Server Instance
-- Check the current server name
 
select @@SERVERNAME
 
-- Change the server name as seen by the database
 
sp_dropserver 'EUK-POSTSVR-01'--Present Server name goes here
go 
sp_addserver 'EUK-POSTBKP-01','local'--New Server name goes here 
go

 

从SQL Server配置管理器重新启动SQL Server,以使名称更改生效。

 

服务登录

主数据库还记录与源实例关联的所有登录名。 在新实例中,您需要清除不必要的登录名。 之后,您可以将本地默认SQL Server组添加到当前实例。

-- Listing 3: Remove Unnecessary Logins
drop login [EUK-POSTSVR-01\SQLServer2005MSSQLUser$EUK-POSTSVR-01$MSSQLSERVER]
drop login [EUK-POSTSVR-01\SQLServer2005MSFTEUser$EUK-POSTSVR-01$MSSQLSERVER]
drop login [EUK-POSTSVR-01\SQLServer2005SQLAgentUser$EUK-POSTSVR-01$MSSQLSERVER]
 
-- Listing 4: Add local default SQL Server Groups
create login [EUK-POSTBKP-01\SQLServer2005MSSQLUser$EUK-POSTBKP-02$MSSQLSERVER] from windows;
create login [EUK-POSTBKP-01\SQLServer2005SQLAgentUser$EUK-POSTBKP-02$MSSQLSERVER] from windows;
create login [EUK-POSTBKP-01\SQLServer2005MSFTEUser$EUK-POSTBKP-02$MSSQLSERVER] from windows;

 

注意:确保服务器和代理服务帐户在操作系统级别上属于它们各自的组,并且这些操作系统组具有必需的权限。 表1显示了SQL Server服务帐户的权限。

S /序号

特权

要求者

1

  作为服务登录

SQL Server服务帐户SQL Agent服务帐户集成服务帐户

2

  充当操作系统的一部分

SQL Server服务帐户SQL Agent服务帐户

3

  作为批处理作业登录

SQL Server服务帐户SQL Agent服务帐户

4

  替换流程级令牌

SQL Server服务帐户SQL Agent服务帐户

5

  绕过遍历检查

SQL Server服务帐户SQL Agent服务帐户集成服务帐户

6

  调整进程的内存配额

SQL Server服务帐户SQL Agent服务帐户

7

创建全局对象  

集成服务帐户

8

锁定内存中的页面(AWE)

SQL Server服务帐户  

 


表1. SQL Server服务帐户所需的操作系统特权

在数据库级别完成整理之后,请还原为常规服务帐户。 从SQL Server配置管理器重新启动实例一次。

此时,您可以启动应用程序服务。

 

结论

在执行上述方案期间,可能会发生错误。 在下面,您将看到有关这些错误的信息。

如果您解决问题,则可以使用SysInternal的ProcMon之类的工具。 它们隔离了启动SQL Server时的文件权限问题(请参见图7)。

 

序列号

错误

原因/解决方法

1

无法启动SQLServerAgent(原因:无法连接到服务器“(本地)”; SQLServerAgent无法启动)。  

为所有本地服务帐户创建登录名

2

服务器本地连接提供程序无法在[\\。\ pipe \ SQLLocal \ MSSQLSERVER]上侦听。错误:0x5 TDSSNIClient初始化失败,错误0x5,状态码0x40。TDSSNIClient初始化失败,错误0x5,状态码0x1。SQL   Server无法产生FRunCM线程。检查SQL   Server错误日志和Windows事件日志,以获取有关可能的相关问题的信息。由于网络库中的内部错误,无法启动网络库。要确定原因,请在错误日志中查看紧接此错误之前的错误。

SQL Server以前是使用其他服务帐户启动的,并被强制终止。它在还原master数据库的过程中发生。若要更正此问题,请使用第3步中使用的服务帐户启动实例,然后正常停止该服务。之后,您可以从常规服务帐户开始。

3

无法启动SQLServerAgent(原因:创建新会话时出错)。

向SQL代理帐户授予适当的权限

 

image007.gif

图7.使用ProcMon检查权限问题

北京哲想软件有限公司