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
学习收藏