Database

用於恢復 MS SQL Server 2008 的 4 個系統數據庫的命令行腳本

  • October 1, 2015

有人能給我一些關於如何恢復 sql server 2008 的 4 個系統數據庫(master、msdb、model、tempdb)的建議嗎?

結果,我已經使用以下命令行腳本對自己進行了一些測試(關於恢復主數據庫):

::set variables
set dbname=master
set dbdirectory=C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA
title Restoring %dbname% database
net stop mssqlserver
cd C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn
sqlservr -m
sqlcmd -Slocalhost -E -Q "restore database master from disk='c:\master.bak' WITH REPLACE" 
net start mssqlserver
pause

執行sqlservr -m命令後(用於以單使用者模式啟動伺服器實例,僅在恢復 MASTER 數據庫時需要),腳本停止。因此,為了執行最後 2 個命令,我需要將腳本分成 2 個較小的腳本,並一個接一個地執行它們。

有沒有人知道如何將它們合併到一個完全執行而不會中斷的單個腳本中?

我還想使用像這樣的命令行腳本來恢復其他 3 個系統數據庫。有人可以建議我如何繼續嗎?我已經註意到恢復 temdb 並不是那麼容易,但必須有一種方法……

期待您的建議!

如評論中所述 - 您不備份/恢復 TEMPDB。

要讓腳本在命令之後繼續sqlservr -m,您需要“後台”命令。為此,請使用start前面的命令。就像是:

start sqlservr -m

應該管用。但在那之後,您需要等待 SQL Server 實際啟動,然後再發出任何命令。在 Windows 2003 上,您可以sleep.exe 從 Windows 2003 Resource Kit 中獲得執行此操作的方法。在 Windows 2008 上,您可以使用該timeout.exe命令。您需要花一些時間來確定在嘗試恢復之前要等待多長時間(並增加一點時間,以防萬一……)

就恢復 msdb 和模型而言,它應該是 2 個更簡單的 sqlcmd 恢復,就像您為 master 所做的那樣。您還需要確保在重新啟動服務之前停止 SQL Server 實例。

最終腳本看起來像:

::set variables
set dbdirectory=C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA
title Restoring system databases
net stop mssqlserver
cd C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn
start sqlservr -m
timeout /t 60
sqlcmd -Slocalhost -E -Q "restore database master from disk='c:\master.bak' WITH REPLACE" 
sqlcmd -Slocalhost -E -Q "restore database msdb from disk='c:\msdb.bak' WITH REPLACE" 
sqlcmd -Slocalhost -E -Q "restore database model from disk='c:\model.bak' WITH REPLACE" 
taskkill /im sqlservr.exe
net start mssqlserver
pause

請務必查看這篇技術網文章

注意:我沒有對此進行測試,我假設您的sqlcmd陳述在這裡是正確的…

引用自:https://serverfault.com/questions/141254