更改数据库路径后还原基于旧路径的master数据库备份问题总结

时间:2022-08-25 16:23:46
/**
sqlserver 2005
author:jyf
create:2010/2/1
remark:还原系统及用户数据库
*/

/*
---
--- 问题描述:要重装系统,并将数据库移动到新的位置,要将原路径的备份还原到新路径.
1. 
重装操作系统前,数据库的路径:D:\学习工具\SqlServer2005\ 
系统数据库路径: 
'D:\学习工具\SqlServer2005\MSSQL.2\MSSQL\DATA\master.mdf' 
'D:\学习工具\SqlServer2005\MSSQL.2\MSSQL\DATA\mastlog.log' 
'D:\学习工具\SqlServer2005\MSSQL.2\MSSQL\DATA\mssqlsystemresource.mdf' 
'D:\学习工具\SqlServer2005\MSSQL.2\MSSQL\DATA\mssqlsystemresource.ldf' 
'D:\学习工具\SqlServer 2005\MSSQL.2\MSSQL\DATA\msdbdata.mdf' 
'D:\学习工具\SqlServer 2005\MSSQL.2\MSSQL\DATA\msdblog.log' 
...等等 
2. 
然后执行以下语句备份master数据库(备份其他系统数据库和用户数据库这里省略了): 
BACKUP DATABASE master 
TO DISK=N'E:\books\Experience\SQLServer\安全管理\backup_restore_sysDB\master.bak' 
WITH FORMAT, 
STATS 
GO 
3. 
之后重新安装了操作系统,接着重装了SQL2005数据库,此时安装路径更改为: 
D:\Study\SQLSERVER2005\ 
系统数据库文件路径: 
D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\Data\ 
4. 
为还原之前的master备份,这时在cmd中进入数据库服务启动程序的'D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\Binn\'目录 
然后运行sqlservr.exe -m以单用户模式启动服务 
5. 
接着在打开新的cmd窗口,在里面用sqlcmd或登录Management Studio来执行以下还原master数据库的脚本,
系统提示还原成功,然后自动停止了服务:
RESTORE DATABASE master
FROM DISK=N'E:\books\experience\SQLServer\safeManager\backup_restore_sysDB\master.bak'
WITH
MOVE 'master' TO N'D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\Data\master.mdf',
MOVE 'mastlog' TO N'D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\Data\mastlog.ldf',
REPLACE,
STATS
GO 
6. 
按联机丛书上面的说法,还原master数据库后最好再一次以单用户模式启动一次服务,
以进一步修复系统数据库.本以为已经大功告成.
然后再一次以单用户模式启动时,结果却报了如下错误(简略消息):

操作系统错误 找不到指定文件. 无法打开物理文件'D:\学习工具\SqlServer 
2005\MSSQL.2\MSSQL\DATA\mssqlsystemresource.mdf'... 
由于文件不可访问,所以无法打开数据库'mssqlsystemresource'. 
服务无法启动.

经人帮助后,得知是由于基于旧路径的备份还原后的master数据库中
记载的其他数据库信息也是旧路径的数据库.

解决办法:

(1)重新建立旧路径,并将新路径中的mssqlsystemresource,model,msdb数据库对应的所有 
文件复制到旧路径中,此时MSSQLSERVER服务能够再次启动,只不过用的数据库
都是旧路径的.
(2)执行脚本将系统数据的路径全部更新为新路径,脚本内容如下:
/*
USE master;
GO
ALTER DATABASE mssqlsystemresource MODIFY FILE 
(NAME=data,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\mssqlsystemresource.mdf' ); 
ALTER DATABASE mssqlsystemresource MODIFY FILE 
(NAME=log,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\mssqlsystemresource.ldf' ); 
ALTER DATABASE mssqlsystemresource SET READ_ONLY; 

USE master;
GO
ALTER DATABASE model MODIFY FILE 
(NAME=modeldev,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\model.mdf' ); 
ALTER DATABASE model MODIFY FILE 
(NAME=modellog,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\modellog.ldf' );
GO

USE master;
GO
ALTER DATABASE msdb MODIFY FILE 
(NAME=MSDBData,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\msdbdata.mdf' ); 
ALTER DATABASE msdb MODIFY FILE 
(NAME=MSDBLog,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\msdblog.ldf' );
GO

USE master;
GO
ALTER DATABASE tempdb MODIFY FILE 
(NAME=tempdev,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\tempdb.mdf' ); 
ALTER DATABASE tempdb MODIFY FILE 
(NAME=templog,FILENAME='D:\Study\SQLSERVER2005\MSSQL.1\MSSQL\DATA\templog.ldf' );
GO
*/

7.
至此,系统数据库路径已经恢复正常.
在其后可依次还原model,msdb数据库,
之后可再还原其他用户数据库.
至此所有数据库恢复正常.

感谢: 
xman_78tom 
(Tom)
提供全程帮助.
---
*/

1 个解决方案

#1


学习收藏

#1


学习收藏