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)。
图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
图2.以单用户模式启动SQL Server
或
图3.以单用户模式启动SQL Server
请注意,步骤2是指Bin目录目录的位置。 您的安装可能会有所不同。
您可以通过在SQL Server配置管理器中检查SQL Server服务属性的“服务”选项卡找到所需的目录(请参见图4):
图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;
图5.恢复主站
注意:还原完成后,实例将关闭。
服务账户变更
要在还原完成后启动SQL Server,请执行以下操作:
1. 将“ SQL Server服务帐户”更改为当前登录的帐户。
2. 打开开始>所有程序> Microsoft SQL Server 2005>配置工具> SQL Server配置管理器
3. 右键单击每个服务并选择属性
4. 在登录选项卡中,输入所需的帐户名称和相应的密码。
图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代理帐户授予适当的权限 |
图7.使用ProcMon检查权限问题