将SQLSERVER2005迁移到新的服务器上(在新的服务器上恢复)
SQLSERVER2005迁移到新的服务器上(在新的服务器上恢复)
当原先服务器出现故障,已经无法启动。需要将整个SQLSERVER系统紧急迁移到一台备用服务器上,那么这个迁移步骤怎样做呢?
在说之前复习一下各个系统数据库的主要作用,以便大家更清楚恢复这些系统数据库的好处
master:记录SQLSERVER系统的所有系统级信息
model:在SQLSERVER实例上为所有数据库创建的模版
msdb:SQLSERVER代理用来安排警报和作业以及记录操作员信息的数据库,msdb数据库还包含历史记录表,错误页suspect_page 以及备份和还原历史记录表
resource:包含SQLSERVER附带的所有系统对象副本的只读数据库,resource数据库是不能备份的,而且在SSMS里是看不见的
tempdb:用于保存临时或中间结果集的工作空间。每次启动SQLSERVER实例时SQLSERVER都会根据model数据库为蓝本重新创建此数据库。
服务器实例关闭时,将永久删除tempdb数据库中的所有数据
---------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
好了,现在进入正题:
先说一下具体环境:
操作系统Windows2003企业版SP2;
备用服务器名字叫:SQL2005PC;
SQLSERVER是默认实例;
数据库:SQL2005企业版
备用服务器和原服务器不同名,SQLSERVER安装的路径也不一样。(备用服务器安装路径为c:\Program Files\Microsoft SQL Server\
MSSQL.4\MSSQL)
现在手头有最新的master,msdb,model数据库备份,以及其他所有用户数据库备份
将系统数据库恢复,以还原所有数据库系统信息(用户,密码,任务等) ,然后才能恢复用户数据库
在这种情况下,恢复系统数据库需要修改系统数据库路径,还要修改SQLSERVER记录下自己的服务器名字
友情提示:
注意:命令行下运行的指令是大小写敏感的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
------------------------------------------------------------------华丽的分割线----------------------------------------------------------------
正式开始拉!!不好意思让大家久等了
1、确认备用服务器的SQL版本和原服务器一致
1 SELECT @@VERSION
返回的号码必须跟原先服务器返回的号码完全一样
2、确保你备用服务器的SQLSERVER在启动的时候没有程序连接进来,不然的话等一下连接数据库的时候就会报错
以下是错误消息:
消息 18461,级别 14,状态 1,服务器 XXX,第 1 行
用户 'XXX\Administrator' 登录失败。原因: 服务器处于单用户模式。目前只有一位管理员能够连接
要解决这个问题,你需要在打开SSMS的时候使用下面的sql语句看一下有哪些程序连接进来
1 SELECT * FROM sys.sysprocesses WHERE spid>50
下图是本人之前因为没有停止SSRS导致连接不上SQLSERVER,后来关掉SSRS就行了
3、在备用服务器的命令行窗口,用指令以单用户模式启动SQL服务
--net start MSSQLSERVER /m
4、在命令行窗口,用sqlcmd这个命令行工具连接SQL
sqlcmd /E /S sql2005pc
5、首先恢复master数据库
(1)在sqlcmd下
1 RESTORE DATABASE master FROM DISK='c:\lab\master.bak'
SQL服务自动停止
(2)由于恢复的master数据库里记载其他数据库的路径和现在的路径不一致,这时候重新启动SQLSERVER会失败,必须用跟踪标志3608来启动
1 net start MSSQLSERVER /f /m /T3608
(3)用sqlcmd连接修改其他数据库的文件路径到现有的正确路径
1 sqlcmd /E /S sql2005pc
用下面的语句修改各个系统数据库的文件路径
1 --resource数据库 2 ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=DATA,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.mdf') 3 GO 4 5 ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=LOG,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.ldf') 6 GO
1 --msdb数据库 2 ALTER DATABASE msdb MODIFY FILE(NAME=MSDBData,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf') 3 GO 4 5 ALTER DATABASE msdb MODIFY FILE(NAME=MSDBLog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf') 6 GO
1 --model数据库 2 ALTER DATABASE model MODIFY FILE(NAME=modeldev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf') 3 GO 4 5 ALTER DATABASE model MODIFY FILE(NAME=modellog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf') 6 GO
1 --tempdb数据库 2 ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\tempdb.mdf') 3 GO 4 5 ALTER DATABASE tempdb MODIFY FILE(NAME=templog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\templog.ldf') 6 GO
(4)退出sqlcmd
exit
(5)关闭SQLSERVER
1 net stop MSSQLSERVER
(6)用正常模式启动SQLSERVER
1 net start MSSQLSERVER
6、除了master数据库之外其他系统数据库都是备用服务器的,要用生产服务器上的备份来替换他们
1 --恢复msdb数据库 2 --关闭SQL Agent 用restore命令恢复msdb 3 RESTORE DATABASE msdb FROM DISK='c:\lab\msdb.bak' 4 WITH move 'MSDBData' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf', 5 MOVE 'MSDBLog' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf' ,REPLACE
1 --恢复model数据库 2 RESTORE DATABASE model FROM DISK='c:\lab\model.bak' 3 WITH move 'modeldev' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf', 4 MOVE 'modellog' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf' ,REPLACE
为什麽resource数据库跟tempdb数据库不用还原呢?前面已经说过
resource:包含SQLSERVER附带的所有系统对象副本的只读数据库,resource数据库是不能备份的,而且在SSMS里是看不见的
tempdb:用于保存临时或中间结果集的工作空间。每次启动SQLSERVER实例时SQLSERVER都会根据model数据库为蓝本重新创建此数据库。
服务器实例关闭时,将永久删除tempdb数据库中的所有数据
7、修改服务器名称
(1)运行下面的语句你发现返回的是生产服务器名字,因为master数据库从那台机器来的
1 SELECT @@SERVERNAME
(2)运行下面语句修改服务器名
1 EXEC sys.sp_dropserver @server = '原先服务器名' 2 GO 3 EXEC sys.sp_addserver @server = 'SQL2005PC' 4 GO
(3)重启SQLSERVER服务,再运行下面的语句就可以返回现在的服务器名字
1 SELECT @@SERVERNAME 2 GO
最后依次将用户数据库恢复就可以了
为了确保安全起见,最好将生产服务器上的所有系统数据库的恢复模式设置为:完整恢复!!!!!
大功告成了,可以下班了 o(∩_∩)o 哈哈