将数据库系统在一台新服务器上恢复

假设现在管理员遇到了下面的这些挑战:

     1. 原先的服务器出现了硬件故障,已经无法启动。需要将整个SQL Server系统紧急迁移到一台备用的服务器上。(备用服务器名称叫sql2005pc,SQL Server是默认实例。)

     2. 备用服务器和原服务器不同名,SQL Server安装的路径也不一样。(备用服务器安装的路径为C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL)。

     3. 因为良好的备份策略,现在手头有最新的maste,msdb,model数据库备份文件,以及其他所有用户数据库备份文件。

     4. 现在需要及昂系统数据库恢复,以及还原所有数据库系统信息(用户,密码,任务等)。然后才能恢复用户数据库。

     在这种情况下,回复系统数据库需要修改系统数据库路径,还要修改SQL Server记录下的自己的服务器名称。步骤有些复杂,某些步骤需要用特定的参数启动SQL Server。请注意,在命令行运行的指令,是大小写敏感的。

 

参考解决方案:

     1. 确定备份服务器的SQL Server版本和原服务器一致。

     因为我们要恢复系统数据库,要保证我们恢复的master和msdb数据库和备用机的Resource数据库一致。否则SQL Server将不能正常工作。所谓版本一致,指的是”select @@version“返回的号码必须完全一样。

 

     2. 在备份服务器的命令行窗口,用指令以单用户模式启动SQL Server服务。

net start mssqlserver /m

     命令如果成功执行,应该返回如下信息:

The SQL Server (DR) service is starting..

The SQL Server (DR) service was started successfully.

    

     3. 在命令行窗口,用sqlcmd这个命令行工具连接SQL Server。

sqlcmd -E -S sql2005pc

     如果连接成功建立,应该返回下面的信息。

1>

 

     4. 首先恢复master数据库。

          (1)在sqlcmd的那个连接里,运行下面的恢复语句(假设备份文件为c:\lab\master.bak)。

restore database master from disk = 'c:\lab\master.bak'

go

     它应该返回类似下面的信息:

Processed 360 pages for databse 'master' ,file 'master' on file 1.

Processed 4 pages for database 'master' file 'mastlog' on file 1.

The master database has been successfully restored. Shutting down SQL Server.

SQL Server is Terminating this process.

     SQL Server服务自动停止。

 

          (2)由于恢复的master数据库里记载的其他数据库的路径和现在的路径不一致,这个时候重新启动SQL Server会失败。必须要用跟踪标志3608来启动。

net start mssqlserver /f /m /T3068

     如果正常,应该返回下面的信息。

The SQL Server (DR) service is starting..

The SQL Server (DR) service was started successfully.

         

          (3)用sqlcmd连接修改其他数据库的文件路径到现有的正确路径(C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\)。

     在命令行窗口,用sqlcmd 再次做连接。

sqlcmd -E -S sql2005pc

     用下面的语句修改各个系统数据库的文件路径。

alter databse mssqlsystemresource modify file (name=data, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.mdf');

go

     如果正常,应该返回下面的信息。

The file "data" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse mssqlsystemresource modify file (name=log, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\mssqlsystemresource.ldf');

go

     如果正常,应该返回下面的信息。

The file "log" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse msdb modify file (name=MSDBData, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf');

go

     如果正常,应该返回下面的信息。

The file "MSDBData" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse msdb modify file (name=MSDBLog, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf');

go

     如果正常,应该返回下面的信息。

The file "MSDBLog" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse model modify file (name=modeldev, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf');

go

     如果正常,应该返回下面的信息。

The file "modeldev" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse model modify file (name=modellog, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf');

go

     如果正常,应该返回下面的信息。

The file "modellog" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse tempdb modify file (name=tempdev, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\tempdb.mdf');

go

     如果正常,应该返回下面的信息。

The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started.

 

alter databse tempdb modify file (name=templog, filename='C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf');

go

     如果正常,应该返回下面的信息。

The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.

     全部修改完毕后,运行”Exit“命令退出sqlcmd连接。

 

          (4)关闭SQL Server。

net stop mssqlserver

     如果正常,应该返回下面的信息:

The SQL Server (DR) service is stopping..

The SQL Server (DR) service was stopped successfully.

 

          (5)用正常模式启动SQL Server。(如果启动不了可直接打开SQL Server Management Studio用sa登录进去执行下面的步骤)

net start mssqlserver

     这时,SQL Server可以正常启动。但是它使用的系统数据库除了master以外,都是原先备用服务器上的自己的。我们要用生产服务器上的备份来替换它们。

 

     5.恢复msdb数据库。

     在运行下面的命令之前,要先关闭SQL Server Agent服务。然后用Restore命令恢复msdb数据库,将其指向新的文件路径。

restore databse msdb from disk ='c:\lab\msdb.bak'

with move 'MSDBData' to 'C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf',

move 'MSDBLog' to 'C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf ',replace

     如果正常,应该返回类似下面的信息。

Processed 600 pages for databse 'msdb' ,file 'MSDBData' on file 1.

Processed 7 pages for database 'msdb' file 'MSDBLog' on file 1.

RESTORE DATABASE successfully processed 607 pages in 0.841 seconds (5.907MB/sec).

 

     6.恢复model数据库。

     在运行下面的命令之前,要先关闭SQL Server Agent服务。然后用Restore命令恢复msdb数据库,将其指向新的文件路径。

restore databse model from disk ='c:\lab\model.bak'

with move 'modeldev' to 'C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf',

move 'modellog' to 'C:\Program File\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf ',replace

     如果正常,应该返回类似下面的信息。

Processed 152 pages for databse 'msdb' ,file 'MSDBData' on file 1.

Processed 3 pages for database 'msdb' file 'MSDBLog' on file 1.

RESTORE DATABASE successfully processed 155 pages in 0.174 seconds (7.273MB/sec).

 

     7.修改服务器名称。

          (1)运行下面的语句你会发现,返回的还是原先的服务器名字。这是因为master数据库是从那台机器来的。

select @@servername

          (2)运行下面的语句修改服务器名。

sp_dropserver '<原先服务器名>'

go

sp_addserver '<现服务器名>','local'

go

        注意:如果运行sp_dropserver '<原先服务器名>' 报错:

消息 15190,级别 16,状态 1,过程 sp_dropserver,第 56 行

仍有对服务器 '<原先服务器名>' 的远程登录或链接登录。

          则执行下面的语句:

select * from msdb.dbo.MSdistpublishers
DELETE FROM msdb.dbo.MSdistpublishers
select * from msdb.dbo.MSdistpublishers

exec sp_droplinkedsrvlogin '<原先服务器名> ',null

exec sp_dropserver '<原先服务器名>','droplogins'

exec sp_addserver '<现服务器名>' , 'LOCAL'

exec sp_setnetname 'repl_distributor','<现服务器名>'

          (3)重启SQL Server服务,再运行下面的语句,就可以看到返回的是现在的服务器名字了。

select @@servername

     做完这些操作后,原先的SQL Server的所有配置都能够恢复到新的服务器上。只是用户数据库都是可疑状态,因为新服务器上没有它们的文件。接下来就可以使用Restore将用户数据库依次恢复。

     

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值