基本的な内容ですが、知らずに復旧作業を行うと焦るんじゃないかと思います。
なお、ほかのデータベースに復元する時にも使えると思います。
今回の環境
- Windows Server 2008 R2 Standard SP1
- SQL Server 2008 R2 Express SP2
- バックアップ ファイルは、完全・差分・ログの3種類
- 完全バックアップ ファイル - full.bak
- 差分バックアップ ファイル - diff.bak
- トランザクションログ ファイル - log.trn
複数のバックアップ ファイルからDBを復元する
SSMS(SQL Server Management Studio)からデータベースを復元する際、複数のバックアップ ファイルを一度に指定する事は出来ない事を知人は知らなかったようです。
SSMSにおいてテストしてみると下記エラー メッセージが出ました。
xxx.bakに読み込まれたメディアは1メディア ファミリをサポートするようにフォーマットされていますが、バックアップ デバイスの仕様では、3メディアファミリが必要です。
RESTORE HEADERONLY が異常終了しています。
(Microsoft SQL Server、エラー:3231)
復元手順
復元手順は至って簡単です。一度に複数のバックアップ ファイルを登録するのではなく、一つ一つファイルを指定し復元します。
- 完全バックアップ ファイル(full.bak)を復元
- 差分バックアップ ファイル(diff.bak)を復元
- トランザクションログ ファイル(log.trn)を復元
- 完全バックアップ ファイル(full.bak)を復元
- トランザクションログ ファイル(log.trn)を復元
復旧状態の指定に注意!
復元オプションに[復旧状態]を指定しますが、指定を間違えると対処法を知らないと焦ります。以前、私も理解せずにテストして痛い目にあいました。
- [RESTORE WITH RECOVERY]を選択する場合
データベースを使用可能な状態にする時に選択します。
上記手順でいうと、トランザクションログを復元する時です。
- [RESTORE WITH NORECOVERY]を選択する場合復元操作完了後にも、復元操作を行う場合に選択します。
上記手順でいうと、完全バックアップと差分バックアップを復元する時です。
この場合、データベースのアイコン横に「xxxx(復元しています...)」が表示されます。
復元作業時、誤って[RECOVERY]を指定してしまった場合は、
RESTORE DATABASE [DBName] WITH NORECOVERYを実行し復旧状態にします。
また、[NORECOVERY]を指定してしまった場合は、
RESTORE DATABASE [DBName] WITH RECOVERY
を実行しデータベースの復元を完了させます。
参考になるサイト
[紹介] 論理破壊のシナリオ
ブログ「はつねの日記」の初音さんが書かれた記事AED検索のMicrosoft Azure SQL Databaseの論理破壊からの復旧試験が完了しました - はつねの日記は非常に高い確率で起こるシナリオで、非常に共感を受けたのでリンクを載させていただきました。
是非読んでみてください!