SQL Server 復元ができない

SQL Server に対して、Restore コマンドを使って復元する際、データベースにロックがかかって復元できないことが度々発生する。

SQL Server Management Studio から復元する際には、ロックを解除するチェックがあるのだが、コマンドからだとその機能はない。

そこで、思い切って、SQL Server を一度再起動して復元すると確実にうまくいく。そのためのコマンドは次の通り。

net stop “MSSQLSERVER”
net start “MSSQLSERVER”
sqlcmd -S TestServer -Q “RESTORE DATABASE TestDB FROM DISK=’%~dp0TestDB.bak’ WITH RECOVERY, MOVE ‘TestDB’ TO ‘C:\SQLDB\TestDB.mdf’, MOVE ‘TestDB_log’ TO ‘C:\SQLDB\TestDB_log.ldf'”

~dp0 はカレントディレクトリをさすのだが、復元元の *.bak ファイルを保存しているディレクトリに対して、NT Service.MSSQLSERVER ユーザーの権限を追加しておく必要がある。これらのコマンドをバッチファイルとして作成しておき、管理者として実行すれば、数秒でデータベースの復元ができる。SQL Server Management Studio を使用すると、何度もクリックする必要があるので、テスト環境では効率的である。

Follow me!