может кто-нибудь дать мне совет о том, как восстановить 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
утверждения здесь правильные ...