如何还原SQLServer master数据库

注意:SQLServer的master数据库只能还原到版本号相同的SQLServer实例

执行命令select @@version;查询当前SQLServer实例的版本号:

1
Microsoft SQL Server 2005 - 9.00.5324.00

备份master数据库

执行以下SQL语句,备份master数据库到D:\master.bak目录:

1
BACKUP DATABASE master TO DISK = 'D:\master.bak' WITH REPLACE;

备份Service Master Key

执行以下SQL语句,备份master数据库到D:\smk.bak目录:

1
BACKUP SERVICE MASTER KEY TO FILE=N'D:\smk.bak' ENCRYPTION BY PASSWORD =  'password';

进入单用户模式

在server中找到SQL Server(MSSQLSERVER)的服务,停止后,在参数项中加入“-m”:
SQL Server(MSSQLSERVER)
如果进入单用户模式之后,却一个用户都不可以登录,可以在服务器上运行“netstat -ano | findstr 1433”查看SQLSERVER的端口,查看是否已经有用户在登录;

还原master数据库

打开命令提示符工具输入以下代码还原master数据库

1
2
3
C:\> sqlcmd
1> RESTORE DATABASE master FROM DISK='D:\master.bak' WITH REPLACE;
2> GO

重新启动SQLServer

如果还原master数据库后,SQLSERVER的服务无法开启,请注意是否因为备份的实例的master数据库路径与还原的实例的master数据库路径不一致导致的,可查看windows应用程序日志查看报错原因。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
日志名称:          Application
来源: MSSQLSERVER
日期: 2019/8/13 16:38:22
事件 ID: 17207
任务类别: (2)
级别: 错误
关键字: 经典
用户: 暂缺
计算机: test
描述:
FileMgr::StartLogFiles: Operating system error 2(系统找不到指定的文件。) occurred while creating or opening file 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mssqlsystemresource.ldf'. Diagnose and correct the operating system error, and retry the operation.
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="MSSQLSERVER" />
<EventID Qualifiers="49152">17207</EventID>
<Level>2</Level>
<Task>2</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2019-08-13T08:38:22.403131400Z" />
<EventRecordID>4811</EventRecordID>
<Channel>Application</Channel>
<Computer>test</Computer>
<Security />
</System>
<EventData>
<Data>FileMgr::StartLogFiles</Data>
<Data>2(系统找不到指定的文件。)</Data>
<Data>C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mssqlsystemresource.ldf</Data>
<Binary>37430000100000000A0000005000440045002D004A005</Binary>
</EventData>
</Event>

如果是,可以在命令提示符工具中执行命令

1
NET START MSSQLSERVER /f /T3608

把SQLSERVER实例启动到master-only恢复模式,再执行如下列的SQL语句,修改Master数据库中记录的其他的系统数据库的路径记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
USE master;
GO
ALTER DATABASE mssqlsystemresource MODIFY FILE (NAME=data,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\mssqlsystemresource.mdf' );
ALTER DATABASE mssqlsystemresource MODIFY FILE
(NAME=log,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\mssqlsystemresource.ldf' );
ALTER DATABASE mssqlsystemresource SET READ_ONLY;

USE master;
GO
ALTER DATABASE model MODIFY FILE (NAME=modeldev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\model.mdf' );
ALTER DATABASE model MODIFY FILE (NAME=modellog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\modellog.ldf' );
GO
USE master;
GO
ALTER DATABASE msdb MODIFY FILE (NAME=MSDBData,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\msdbdata.mdf' );
ALTER DATABASE msdb MODIFY FILE (NAME=MSDBLog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\msdblog.ldf' );
GO
USE master;
GO
ALTER DATABASE tempdb MODIFY FILE (NAME=tempdev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\tempdb.mdf' );
ALTER DATABASE tempdb MODIFY FILE (NAME=templog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\templog.ldf' );
GO

注意“C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\”路径为还原的实例的路径。

执行以上SQL语句后重启服务。

还原Service Master Key

1
RESTORE SERVICE MASTER KEY FROM FILE=N'D:\smk.bak' DECRYPTION BY PASSWORD = 'password' FORCE;
作者

Junle

发布于

2019-08-14

更新于

2024-03-22

许可协议

评论