SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法

SQL Server データベースが復元しています (Restoring...) 状態

SQL Server データベースが 「復元しています...」 (Restoring...) 状態になると、そのデータベースが使えない状態になります。

今回は SQL Server データベースが復元しています(Restoring...) 状態になってしまう主な原因と、なってしまった時に通常のオンライン状態に戻す方法をご紹介します。

SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法 1

復元しています... (Restoring...) 状態はどんな時になる?

SQL Server のデータベースが復元しています... (Restoring...) 状態になる原因はいろいろあります。

ここでは、原因となりがちな例を3つご紹介します。


NORECOVERY オプションでRESTORE DATABASE を実行した時

データベースのバックアップファイルをリストアする際に NORECOVERY オプションを付けてリストアすると、データベースは 「復元しています...」 状態になります。

SQL Server Management Studio からの場合、以下のように [データベース復元] > [オプション] 画面の [復旧状態] で RESTORE WITH NORECOVERY を選んでリストアを実行した時などに起こります。

SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法 2

デフォルトの RESTORE WITH RECOVERY では、コミットされていないトランザクションはロールバックされてリストアされ、データベースはリストア後、使用可能な状態になります。

RESTORE WITH NORECOVERY では、コミットされていないトランザクションはロールバックされず、データベースはリストア後、「復元しています...」 状態になります。 通常、他のトランザクションログを続けてリストアする時に指定します。

NORECOVERY オプションでBACKUP LOG を実行した時

NORECOVERY オプションをつけてログをバックアップした時にも、対象のデータベースが復元しています (Restoring...) 状態になります。

これが起こりそうなのは、SQL Server Management Studio から[データベース復元] > [全般] 画面のソースでデバイスからではなくデータベースを選択し、データベースのコピーを作ろうとした時です。

SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法 3


[データベース復元] > [オプション] 画面の [ログ末尾のバックアップ] の「復元の前にログ末尾のバックアップを実行する」と「ソースデータベースを復元中の状態にしておく」が下の画面のようにデフォルトでオンになる時があり、そのままリストアを実行し、リストアが何らかの理由で失敗した時に、ソースデータベースが復元しています (Restoring...) 状態になる可能性があります。

SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法 4


また、転送先データベースも復元プランによって、先ほどの RESTORE DATABASE を WITH NORECOVERY オプションで実行した後に失敗すれば、復元しています (Restoring...) 状態になる可能性があります。

ソースデータベースにも影響が出る可能性があるので、本番環境用のデータベースのコピーを作りたいだけの時は、ソースはデータベースではなく、バックアップファイルを使ってデバイスからリストアすることをお勧めします。

再起動時にトランザクションが正常に終了しなかった時

まれに長いトランザクション処理の途中で SQL Server がシャットダウンや再起動してしまい、正常に終了できなかったような時に、再起動後にデータベースが復元しています (Restoring...) 状態になることもあります。


復元しています (Restoring...) 状態から元に戻す方法

まず、トランザクションログなどをリストアしている途中なのであれば、最後のログをリストアする時に WITH RECOVERY オプションで実行すると通常の状態になりますので、リストアを続けてください。

復元しています (Restoring...)状態から、通常のアクセスできる状態に戻るスクリプトは次の通りです。

ログなどをリストアする必要もなく、ただ単純に復元しています (Restoring...)状態を通常の状態に戻したい時にお使いください。WITH RECOVERY オプションで RESTORE DATABASE を実行すると、コミットされていないトランザクションはロールバックされます。
USE master;
GO

RESTORE DATABASE [DatabaseName] WITH RECOVERY;

SQL Server データベースを復元しています (Restoring...) 状態から元に戻す方法 5

完全バックアップファイルをリストアする時に WITH NORECOVERY で実行してしまったのであれば、もう一度リストアを WITH RECOVERY で実行しても通常の状態に戻ります。

© 2010-2024 SQL Server 入門