master 数据库还原新问题
--1.版本问题
问题描述:
在新服务器上还原老服务器的master数据库:
RESTOREDATABASEMASTER
FROMDISK='C:/TMP/SQLSYS20050516.BAK'
WITHFILE=1
出现以下错误:
服务器:消息3168,级别16,状态1,行1
无法还原设备C:/TMP/SQLSYS20050516.BAK上的系统数据库备份,因为创建该数据库的服务器版本(134218488)与此服务器的版本(134217922)不同。
服务器:消息3013,级别16,状态1,行1
RESTOREDATABASE操作异常终止。
问题原因:
必须保证新服务器的版本和要还原的master数据库的版本完全一致,包括补丁的版本
--2.系统数据库目录问题
问题描述:
还原过程是正常结束的,系统提示:
已成功地还原了master数据库。正在关闭SQLServer。
SQLServer正在终止此进程。
然后启动MSSQLSERVER服务,系统提示:在本地计算机无法启动MSSQLSERVER服务。服务并未返回错误。这可能是一个WINDOWS内部错误或服务内部错误。
问题分析:
不能启动有很多种可能,由于还原的提示是成功的,所以估计数据库备份没有什么问题,应该从启动过程着手去分析问题。下面逐步验证猜想和查找问题原因
--a.验证master备份文件的正确性
将master备份文件还原为普通数据为,结果一切正常:
RESTOREDATABASEa
FROMDISK='C:/TMP/SQLSYS20050516.BAK'
WITHFILE=1,
MOVE'master'TO'c:/a.mdf',
MOVE'mastlog'TO'c:/a.ldf',
REPLACE
GO
USEa
GO
EXECsp_msforeachtable'select*from?'
GO
DROPDATABASEa
--b.检查SQLServer服务的启动信息
在命令提示符下执行:
sqlservr-c-m
收到的启动信息中,与不能启动SQLServer服务相关的错误信息如下:
2005-05-2614:51:47.11spid5启动数据库“model”。
2005-05-2614:51:47.11spid5udopen:创建/打开物理设备C:/ProgramFiles/MicrosoftSQLServer/MSSQL$ERP/data/model.mdf时发生操作系统错误3(系统找不到指定的路径。)。
2005-05-2614:51:47.16spid5FCB::Openfailed:未能为虚拟设备号(VDN)1打开设备C:/ProgramFiles/MicrosoftSQLServer/MSSQL$ERP/data/model.mdf。
可以看出启动时是按老服务器的数据库安装路径来打开数据库,而新服务器的数据库安装路径与老服务器是不同的,这就是master还原后不能启动sqlserver的原因
--c.解决方法分析
model数据库的数据文件信息保存在master数据库的系统表sysdatabases和sysdevices中,只需要想办法修改这两个表中的目录信息,使其符合新的服务器目录要求即可。
--d.解决示例
--===========================================================
--1.还原master数据库的备份为普通数据库
--===========================================================
RESTOREDATABASEa
FROMDISK='C:/TMP/SQLSYS20050516.BAK'
WITHFILE=1,
MOVE'master'TO'c:/a.mdf',
MOVE'mastlog'TO'c:/a.ldf',
REPLACE
GO
--===========================================================
--2.修改sysdatabases和sysdevices表各系统数据库的目录为新服务器的目录
--我的电脑中,sql数据库目录(d:/ProgramFiles/MicrosoftSQLServer/MSSQL/data--如果有需要的话,其他系统数据库也做类似的修改(修改前,可以查询这两个表中的值,以决定如何修改)
--===========================================================
EXECsp_configure'allowupdates',1
RECONFIGUREWITHOVERRIDE
GO
UPDATEa.dbo.sysdatabasesSET
filename='d:/ProgramFiles/MicrosoftSQLServer/MSSQL/data/model.mdf'
WHERENAME='model'
UPDATEa.dbo.sysdevicesSET
phyname='d:/ProgramFiles/MicrosoftSQLServer/MSSQL/data/modellog.ldf'
WHERENAME='modellog'
GO
EXECsp_configure'allowupdates',0
RECONFIGUREWITHOVERRIDE
GO
--===========================================================
--3.份修改后的数据库
--===========================================================
BACKUPDATABASEa
TODISK='C:/TMP/SQLSYS20050516.BAK'
WITHINIT
GO
--===========================================================
--4.在新服务器上,以单用户模式启动sql,然后执行类似下面的恢复语句以恢复master数据库
--===========================================================
RESTOREDATABASEMASTER
FROMDISK='C:/TMP/SQLSYS20050516.BAK'
WITHFILE=1