Назад | Перейти на главную страницу

Скрипты командной строки для восстановления 4 системных баз данных MS SQL Server 2008

может кто-нибудь дать мне совет о том, как восстановить 4 системные базы данных (master, msdb, model, tempdb) на сервере sql 2008, пожалуйста?

Я уже провел некоторое тестирование (по восстановлению основной базы данных) со следующим сценарием командной строки в результате:

::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 не так просто, но должен быть способ ...

Жду вашего совета!

Вместо "taskkill / im sqlservr.exe" для остановки механизма SQL Server более чистый способ заключается в следующем:

sqlcmd -Slocalhost -E -Q "shutdown"

«Завершение работы» - это команда T-SQL, которую можно отправить механизму SQL через любое соединение, поэтому она работает даже тогда, когда «net stop mssqlserver» не работает, например, в однопользовательском режиме. Это также можно сделать из административного соединения. (Я не пробовал, но это может даже работать в хранимой процедуре. Отличное развлечение 1 апреля!)

Как упоминалось в комментариях, вы не делаете резервное копирование / восстановление TEMPDB.

Чтобы сценарий продолжился после sqlservr -m команда, вам нужно "фон" команды. Для этого используйте start команда перед ним. Что-то вроде:

start sqlservr -m

должно сработать. Однако после этого вам нужно будет дождаться фактического запуска SQL Server, прежде чем вводить какие-либо команды. В Windows 2003 вы можете получить sleep.exe из набора ресурсов Windows 2003 для этого. В 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

Обязательно посмотрите это статья в технике также.

примечание: я не проверял это, я предполагаю, что ваш sqlcmd утверждения здесь правильные ...