1.确认备用服务器的SQL
Server和原版本一致(select
@@version返回的号码必须一模一样)--因为要恢复系统数据库,要保证恢复的master和msdb和原库一致,否则SQL Server不能正常工作。
2.停止SQL
Server服务,并以单用户模式启动
3.Sqlcmd工具连接SQL
Server实例
4.还原master数据库
RESTOREDATABASEmaster
FROMDISK='C:\backup\master.bak'
withreplace,
MOVE'master'TO'C:\Program
Files\Microsoft SQL
Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf',
MOVE'mastlog'TO'C:\Program
Files\Microsoft SQL
Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf'
5.由于恢复的master数据库里记载的其他数据库路径和现在的不一致,这时候重新启动SQL
Server会失败,必须要用跟踪标志3608来启动
6.Sqlcmd连接SQL
Server
7.在原实例上查找各系统数据库文件路径
selectdb_name(database_id),name,physical_name
fromsys.master_files
8.修改其他系统数据库的正确路径
--resource数据库
ALTERDATABASEmssqlsystemresource
MODIFYFILE(NAME=DATA,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.mdf')
GO
ALTERDATABASEmssqlsystemresource
MODIFYFILE(NAME=LOG,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.ldf')
GO
--msdb数据库
ALTERDATABASEmsdb
MODIFYFILE(NAME=MSDBData,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\msdbdata.mdf')
GO
ALTERDATABASEmsdb
MODIFYFILE(NAME=MSDBLog,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\msdblog.ldf')
GO
--model数据库
ALTERDATABASEmodel
MODIFYFILE(NAME=modeldev,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\model.mdf')
GO
ALTERDATABASEmodel
MODIFYFILE(NAME=modellog,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\modellog.ldf')
GO
--tempdb数据库
ALTERDATABASEtempdb
MODIFYFILE(NAME=tempdev,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\tempdb.mdf')
GO
ALTERDATABASEtempdb
MODIFYFILE(NAME=templog,FILENAME='C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\templog.ldf')
GO
9.停止SQL
Server服务,再以正常模式启动
--恢复model数据库
RESTOREDATABASEmodel
FROMDISK='c:\lab\model.bak'3WITH
move
'modeldev'TO'C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\model.mdf',
move'modellog'TO'C:\Program
Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\modellog.ldf',REPLACE
--恢复msdb数据库
RESTORE DATABASEmsdb
FROM DISK='c:\lab\msdb.bak'3
WITH
move
'MSDBData' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\MSDBData.mdf',
move
'MSDBLog' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL.4\MSSQL\Data\MSDBLog.ldf' ,REPLACE
Ps:为什麽resource数据库跟tempdb数据库不用还原呢?resource:包含SQLSERVER附带的所有系统对象副本的只读数据库,resource数据库是不能备份的,而且在SSMS里是看不见的
tempdb:用于保存临时或中间结果集的工作空间。每次启动SQLSERVER实例时SQLSERVER都会根据model数据库为蓝本重新创建此数据库。
服务器实例关闭时,将永久删除tempdb数据库中的所有数据
10.修改服务器名称
迁移到新服务上后需修改master里记录的原服务器名
usemaster
go
select@@servername
selectserverproperty('servername')
IFserverproperty('servername')<>@@servername
BEGIN
DECLARE@server
SYSNAME
SET@server=@@servername
EXECsp_dropserver@server=@server
SET@server=cast(serverproperty('servername')ASSYSNAME)
EXECsp_addserver@server=@server,@local='LOCAL'
END
ELSE
PRINT'实例名与主机名一致,无需修改!'
运行完上面语句,重启SQL Server服务,再运行SSELECT@@servername
12.恢复所有用户数据库
第11步完成后,所有用户数据库都处于置疑状态,因为本地没有数据文件,后续就是恢复所有用户数据库即可
USE[master]
RESTOREDATABASE[test_shrink]
FROMDISK=N'C:\backup\test.bak'WITHFILE=1,
MOVEN'test_shrink'TON'C:\Program
Files\Microsoft SQL
Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test_shrink.mdf',
MOVEN'test_shrink_log'TON'C:\Program
Files\Microsoft SQL
Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\test_shrink_log.ldf',NOUNLOAD,STATS=5
GO
--直接对应数据库上右击还原,重定位路径即可。
13.迁移完毕检查
检查原来所有login是否能成功登陆,linked
server、数据库触发器、端点及job等对象是否迁移成功。