RESTORE DATABASE ステートメントを実行していますが、このステートメントはしばしば機能しますが、機能しないこともあり、エラーも報告されません。SQL Server 2008R2 に対して実行しています。バッチ ファイルは、ファイルから sql ステートメントを実行するために sqlcmd ステートメントを実行しています。ファイルには次のものが含まれています (名前は構成されていますが、通常は復元が機能するため、正しい名前であることに注意してください)。
USE MASTER;
RESTORE DATABASE TestMLS
FROM DISK = 'c:\TestMLS.bak'
WITH MOVE 'CorrectName1' TO 'c:\TestMLS.MDF',
MOVE 'CorrectName2' TO 'c:\TestMLS.LDF',
REPLACE;
ALTER DATABASE E2SS80Test SET MULTI_USER;
問題を見つけようとしている間、「DBCC TRACEON (3004, 3605, -1)」でトレースを有効にしました。これにより、復元が正常に機能した場合に期待される通常の情報が得られました。以下の出力は、復元が機能しない場合にログに表示されるものです。
08/06/2013 13:42:25,spid59,Unknown,Setting database option MULTI_USER to ON for database TestMLS.
08/06/2013 13:42:25,spid59,Unknown,Resuming any halted fulltext crawls
08/06/2013 13:42:05,spid59,Unknown,X-locking database: TestMLS
08/06/2013 13:42:05,spid59,Unknown,Dismounting FullText catalogs
08/06/2013 13:42:05,spid59,Unknown,Halting FullText crawls on database TestMLS
08/06/2013 13:42:05,spid59,Unknown,Restore: Planning begins
08/06/2013 13:42:05,spid59,Unknown,Restore: Backup set is open
08/06/2013 13:42:05,spid59,Unknown,Restore: Configuration section loaded
08/06/2013 13:42:05,spid59,Unknown,Opening backup set
08/06/2013 13:42:05,spid59,Unknown,RestoreDatabase: Database TestMLS
[復元: 計画の開始] は表示されますが、[復元: 計画の完了] は表示されないことに注意してください。さらに、Restore: BeginRestore は表示されません。
今日、回避策を見つけました。以前は、スクリプトは復元を呼び出す前にデータベースをオフラインにしませんでした。do ステートメントを追加すると、復元が常に機能するように見えます。
なぜこのような動作をしたのかを知りたいのですが、要求されたことを実行しないのではなく、復元プロセスが少なくともエラーで失敗するはずです。
どんな情報やアイデアでも大歓迎です。