将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 哈哈

posted @ 2012-11-09 15:15  桦仔  阅读(12686)  评论(6编辑  收藏  举报