将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版本和原服务器⼀致
1SELECT@@VERSION
返回的号码必须跟原先服务器返回的号码完全⼀样
2、确保你备⽤服务器的SQLSERVER在启动的时候没有程序连接进来,不然的话等⼀下连接数据库的时候就会报错
以下是错误消息:
消息 18461,级别 14,状态 1,服务器 XXX,第 1 ⾏
⽤户 'XXX\Administrator' 登录失败。原因: 服务器处于单⽤户模式。⽬前只有⼀位管理员能够连接
要解决这个问题,你需要在打开SSMS的时候使⽤下⾯的sql语句看⼀下有哪些程序连接进来
1SELECT*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下
1RESTORE 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数据库
2ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=DATA,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.mdf') 3GO
4
5ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=LOG,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.ldf') 6GO
1--msdb数据库
2ALTER DATABASE msdb MODIFY FILE(NAME=MSDBData,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf')
3GO
4
5ALTER DATABASE msdb MODIFY FILE(NAME=MSDBLog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf')
6GO
1--model数据库
2ALTER DATABASE model MODIFY FILE(NAME=modeldev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf')
3GO
4
5ALTER DATABASE model MODIFY FILE(NAME=modellog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf')
6GO
1--tempdb数据库
2ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\tempdb.mdf')
3GO
4
5ALTER DATABASE tempdb MODIFY FILE(NAME=templog,FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\templog.ldf')
6GO
(4)退出sqlcmd
exit
(5)关闭SQLSERVER
1 net stop MSSQLSERVER
(6)⽤正常模式启动SQLSERVER
1 net start MSSQLSERVER
6、除了master数据库之外其他系统数据库都是备⽤服务器的,要⽤⽣产服务器上的备份来替换他们
1--恢复msdb数据库
2--关闭SQL Agent ⽤restore命令恢复msdb
3RESTORE DATABASE msdb FROM DISK='c:\lab\msdb.bak'
4WITH 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数据库
2RESTORE DATABASE model FROM DISK='c:\lab\model.bak'
3WITH 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数据库从那台机器来的
1SELECT@@SERVERNAME
(2)运⾏下⾯语句修改服务器名
1EXEC sys.sp_dropserver @server='原先服务器名'
2GO
3EXEC sys.sp_addserver @server='SQL2005PC'
4GO
(3)重启SQLSERVER服务,再运⾏下⾯的语句就可以返回现在的服务器名字
1SELECT@@SERVERNAME
2GO
最后依次将⽤户数据库恢复就可以了
为了确保安全起见,最好将⽣产服务器上的所有系统数据库的恢复模式设置为:完整恢复!!!!!
⼤功告成了,可以下班了 o(∩_∩)o 哈哈sqlserver备份表语句

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。