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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM