SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法
SQL Server データベースが復元しています (Restoring...) 状態
SQL Server データベースが 「復元しています...」 (Restoring...) 状態になると、そのデータベースが使えない状態になります。
今回は SQL Server データベースが復元しています(Restoring...) 状態になってしまう主な原因と、なってしまった時に通常のオンライン状態に戻す方法をご紹介します。
復元しています... (Restoring...) 状態はどんな時になる?
SQL Server のデータベースが復元しています... (Restoring...) 状態になる原因はいろいろあります。
ここでは、原因となりがちな例を3つご紹介します。
NORECOVERY オプションでRESTORE DATABASE を実行した時
データベースのバックアップファイルをリストアする際に NORECOVERY オプションを付けてリストアすると、データベースは 「復元しています...」 状態になります。
SQL Server Management Studio からの場合、以下のように [データベース復元] > [オプション] 画面の [復旧状態] で RESTORE WITH NORECOVERY を選んでリストアを実行した時などに起こります。
デフォルトの RESTORE WITH RECOVERY では、コミットされていないトランザクションはロールバックされてリストアされ、データベースはリストア後、使用可能な状態になります。
RESTORE WITH NORECOVERY では、コミットされていないトランザクションはロールバックされず、データベースはリストア後、「復元しています...」 状態になります。 通常、他のトランザクションログを続けてリストアする時に指定します。
NORECOVERY オプションでBACKUP LOG を実行した時
NORECOVERY オプションをつけてログをバックアップした時にも、対象のデータベースが復元しています (Restoring...) 状態になります。
これが起こりそうなのは、SQL Server Management Studio から[データベース復元] > [全般] 画面のソースでデバイスからではなくデータベースを選択し、データベースのコピーを作ろうとした時です。
[データベース復元] > [オプション] 画面の [ログ末尾のバックアップ] の「復元の前にログ末尾のバックアップを実行する」と「ソースデータベースを復元中の状態にしておく」が下の画面のようにデフォルトでオンになる時があり、そのままリストアを実行し、リストアが何らかの理由で失敗した時に、ソースデータベースが復元しています (Restoring...) 状態になる可能性があります。
また、転送先データベースも復元プランによって、先ほどの RESTORE DATABASE を WITH NORECOVERY オプションで実行した後に失敗すれば、復元しています (Restoring...) 状態になる可能性があります。
再起動時にトランザクションが正常に終了しなかった時
まれに長いトランザクション処理の途中で SQL Server がシャットダウンや再起動してしまい、正常に終了できなかったような時に、再起動後にデータベースが復元しています (Restoring...) 状態になることもあります。
復元しています (Restoring...) 状態から元に戻す方法
まず、トランザクションログなどをリストアしている途中なのであれば、最後のログをリストアする時に WITH RECOVERY オプションで実行すると通常の状態になりますので、リストアを続けてください。
復元しています (Restoring...)状態から、通常のアクセスできる状態に戻るスクリプトは次の通りです。
USE master; GO RESTORE DATABASE [DatabaseName] WITH RECOVERY;
完全バックアップファイルをリストアする時に WITH NORECOVERY で実行してしまったのであれば、もう一度リストアを WITH RECOVERY で実行しても通常の状態に戻ります。