SQL Server でのリストア時の復旧状態オプション

SQL Server でバックアップからのリストアを行う際に、複数のバックアップ ファイルがある場合には、「復旧状態」オプションに注意する必要があります。このオプションは、次のようにリストア時の[データベースの復元]ダイアログから設定できます。

このオプションを間違ってリストアを行うと、次のように「ロール フォワードできる状態のファイルがないので、ログまたは差分バックアップは復元できません」エラーが発生してしまいます。


復旧状態オプションのそれぞれの意味は、次の通りです。


■ RECOVERY(デフォルトの復旧状態)
RECOVERY では、リストア後にデータベースを完全復旧した状態にします。これは、リストアが完了したことの合図になり、残りのバックアップ(差分バックアップトランザクション ログバックアップ)をリストアすることはできません。したがって、最後のバックアップを復元する場合にのみ、このオプションを選択するようにします。

■ NORECOVERY(復旧中)
NORECOVERY は、まだリストアすべきバックアップ(差分バックアップやログ バックアップ)がある場合に使用するオプションです。このオプションを指定してリストアを行った場合は、データベースが「復旧中」(リストア中)となり、ユーザーからの接続を一切できないようにブロックします。リストア中にデータベースが更新されては、データの不整合が発生してしまうからです。

■ STANDBY(スタンバイ)
STANDBY は、NORECOVERY と同様、まだリストアすべきバックアップがある場合に使用するオプションです。NORECOVERY との違いは、NORECOVERY がユーザーからの接続をすべて拒否するのに対して、STANDBY では、ユーザーからの接続を拒否せずに、読み取り操作(SELECT)のみを実行可能にしている点です。データが更新されずに、読み取られるだけなら、データの不整合が発生しないからです。


したがって、次のようにバックアップを取得している場合は、復旧状態は、最後のバックアップを復元するときのみ、RECOVERY を指定するようにします。

なお、RESTORE ステートメントを利用して「復旧状態」オプションを指定する場合には、次のように WITH オプションを利用します。

RESTORE DATABASE データベース名
 FROM { DISK | TAPE } = 'ファイルパス'
 [ WITH RECOVERY | NORECOVERY | STANDBY ]


万一、最後のバックアップを戻すときに RECOVERY オプションを付け忘れて、NORECOVERY オプションでリストアしてしまった場合は、次のように RESTORE LOG ステートメントを実行することで、「復旧状態」オプションのみを RECOVERY へ変更することも可能です。

RESTORE LOG sampleDB
 WITH RECOVERY


RESTORE LOG ステートメントの詳細(ヘルプ)はこちらから
http://msdn.microsoft.com/ja-jp/library/ms186858.aspx