我在新服务器上还原老服务器的MASTER数据库:
RESTORE DATABASE MASTER FROM DISK='C:\TMP\SQLSYS20050516.BAK' WITH FILE=1
出现以下错误:
服务器: 消息 3168,级别 16,状态 1,行 1
无法还原设备 C:\TMP\SQLSYS20050516.BAK 上的系统数据库备份,因为创建该数据库的服务器版本(134218488)与此服务器的版本(134217922)不同。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。
---------------------------------------------------------------
这个问题的原因找到了!是因为在新服务器上未打SQL SERVER 2000的SP3,打上补丁后,MASTER数据库还原成功。
(master数据库的还原必须保证版本相同,包括补丁的版本都一样)
---------------------------------------------------------------
---------------------------------------------------------------
---------------------------------------------------------------
MASTER数据库还原成功后,可是SQL SERVER却不能启动了,这该怎么办呢?
---------------------------------------------------------------
用单用户模式启动sql,看看启动到那里时停止
sqlservr -c -m
以下是错误日志片段:
2005-05-26 14:51:47.11 spid5 启动数据库“model”。
2005-05-26 14:51:47.11 spid5 udopen: 创建/打开物理设备 C:\Program Files\Microsoft SQL Server\MSSQL$ERP\data\model.mdf 时发生操作系统错误 3(系统找不到指定的路径。)。
2005-05-26 14:51:47.16 spid5 FCB::Open failed: 未能为虚拟设备号 (VDN) 1 打开设备 C:\Program Files\Microsoft SQL Server\MSSQL$ERP\data\model.mdf。
可以看出启动时是按老服务器的数据库安装路径来打开数据库,而我新服务器的数据库安装路径与老服务器是不同的,这也许就是master还原后不能启动sql server的原因吧?
---------------------------------------------------------------
这表明,master数据库中记录的目录与当前服务器的配置不一样,通过下面的步骤来修正目录:
1. 找一台启动正确的电脑,将master数据库还原为普通数据库
2. 将还原后的数据库中的sysdatabases,sysdevices表中的model目录修改为现在sql服务器的目录.
3. 备份这个数据库
4. 将备份文件拿到需要还原master数据库的电脑上,有单用户模式启动sql server服务还原master数据库.
--下面的具体的示例步骤
--1.还原master数据库的备份为普通数据库
restore database mm from disk='c:\a.bak'
with move 'master' to 'c:\master.mdf',
move 'mastlog' to 'c:\master.ldf'
go
--2.修改sysdatabases和sysdevices表各系统数据库的目录为新服务器的目录
-- 我的电脑中,sql数据库目录(d:\Program Files\Microsoft SQL Server\MSSQL\data\
-- 如果有需要的话,其他系统数据库也做类似的修改(修改前,可以查询这两个表中的值,以决定如何修改)
exec sp_configure 'allow updates',1
reconfigure with override
go
update mm.dbo.sysdatabases set
filename='d:\Program Files\Microsoft SQL Server\MSSQL\data\model.mdf'
where name='model'
update mm.dbo.sysdevices set
phyname='d:\Program Files\Microsoft SQL Server\MSSQL\data\modellog.ldf'
where name='modellog'
go
exec sp_configure 'allow updates',0
reconfigure with override
go
--备份修改后的数据库
backup database mm to disk='c:\b.bak' with format
go
--在新服务器上,以单用户模式启动sql,然后执行类似下面的恢复语句以恢复master数据库
restore database master from disk='c:\b.bak'
with replace,
move 'master' to 'd:\Program Files\Microsoft SQL Server\MSSQL\data\master.mdf',
move 'mastlog' to 'd:\Program Files\Microsoft SQL Server\MSSQL\data\mastlog.ldf'
go