Como mencionado nos comentários, você não faz backup / restauração de TEMPDB.
Para fazer com que o script continue após o comando sqlservr -m
, você precisa "colocar em segundo plano" o comando. Para fazer isso, use o comando start
na frente dele. Algo como:
start sqlservr -m
deve funcionar. Depois disso, você precisará aguardar que o SQL Server realmente inicie antes de emitir qualquer comando. No Windows 2003, você pode obter sleep.exe
do Windows 2003 Resource Kit para fazer isso. No Windows 2008, você pode usar o comando timeout.exe
. Você precisará programar algumas startups para ter uma ideia de exatamente quanto tempo esperar antes de tentar as restaurações (e adicionar um pouco de tempo para isso, apenas no caso ...)
No que diz respeito à restauração do msdb e do modelo, deve haver mais 2 restaurações simples do sqlcmd, exatamente como a que você tem para o mestre. Você também precisa certificar-se de parar a instância do SQL Server antes de reiniciar o serviço.
O script final seria parecido com:
::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
Não deixe de conferir este artigo de technet também.
nota: Eu não testei isso, suponho que suas declarações sqlcmd
estejam corretas aqui ...