有人可以给我一些关于如何恢复SQL Server 2008的4系统数据库(master,msdb,model,tempdb)的build议吗?
我已经使用以下commad脚本脚本自己(在恢复master数据库时)自己做了一些testing:
::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
应该pipe用。 但是,之后,您将需要等待SQL Server实际启动,然后再发出任何命令。 在Windows 2003上,您可以从Windows 2003 Resource Kit中获取sleep.exe
来执行此操作。 在Windows 2008上,您可以使用timeout.exe
命令。 在尝试恢复之前,您需要让一些初创公司了解需要等待多长时间的想法(并增加一点时间,以防万一)
至于恢复msdb和模型虽然,它应该是2更简单的sqlcmd恢复,就像你有一个主人。 在重新启动服务之前,还需要确保停止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
一定要看看这个technet文章以及。
注意:我没有testing这个,我假设你的sqlcmd
语句在这里是正确的…
而不是“taskkill / im sqlservr.exe”来停止SQL Server引擎,更简洁的方法如下:
sqlcmd -Slocalhost -E -Q "shutdown"
“shutdown”是一个T-SQL命令,可以通过任何types的连接发送到SQL引擎,所以即使在“net stop mssqlserver”不会,例如在单用户模式下也可以工作。 它也可以通过pipe理员连接完成。 (我还没有尝试,但它甚至可能在存储过程中工作,4月1日非常有趣!)