2014/06/29

SQL Server 複数バックアップ ファイルからDBを復元する~エラー3231

知人から質問を受けた「SQL Server の複数バックアップ ファイルからデータベースを復元する方法」をメモ。
基本的な内容ですが、知らずに復旧作業を行うと焦るんじゃないかと思います。
なお、ほかのデータベースに復元する時にも使えると思います。


今回の環境

  1. Windows Server 2008 R2 Standard SP1
  2. SQL Server 2008 R2 Express SP2
  3. バックアップ ファイルは、完全・差分・ログの3種類
    • 完全バックアップ ファイル - full.bak
    • 差分バックアップ ファイル - diff.bak
    • トランザクションログ ファイル - log.trn

複数のバックアップ ファイルからDBを復元する

SSMS(SQL Server Management Studio)からデータベースを復元する際、
複数のバックアップ ファイルを一度に指定する事は出来ない
事を知人は知らなかったようです。
SSMSにおいてテストしてみると下記エラー メッセージが出ました。
image
xxx.bakに読み込まれたメディアは1メディア ファミリをサポートするようにフォーマットされていますが、バックアップ デバイスの仕様では、3メディアファミリが必要です。
RESTORE HEADERONLY が異常終了しています。
(Microsoft SQL Server、エラー:3231)
2014-06-26_152608

復元手順

復元手順は至って簡単です。
一度に複数のバックアップ ファイルを登録するのではなく、一つ一つファイルを指定し復元します。
  1. 完全バックアップ ファイル(full.bak)を復元
  2. 差分バックアップ ファイル(diff.bak)を復元
  3. トランザクションログ ファイル(log.trn)を復元
運用ポリシー上、差分バックアップを行っていない場合は下記になります。
  1. 完全バックアップ ファイル(full.bak)を復元
  2. トランザクションログ ファイル(log.trn)を復元
復旧状態の指定に注意!
復元オプションに[復旧状態]を指定しますが、指定を間違えると対処法を知らないと焦ります。
以前、私も理解せずにテストして痛い目にあいました。
2014-06-26_174059
  • [RESTORE WITH RECOVERY]を選択する場合
    データベースを使用可能な状態にする時に選択します。
    上記手順でいうと、トランザクションログを復元する時です。
    image
  • [RESTORE WITH NORECOVERY]を選択する場合復元操作完了後にも、復元操作を行う場合に選択します。
    上記手順でいうと、完全バックアップと差分バックアップを復元する時です。
    この場合、データベースのアイコン横に「xxxx(復元しています...)」が表示されます。
    image_thumb[1]_thumb
復元作業時、誤って[RECOVERY]を指定してしまった場合は、
RESTORE DATABASE [DBName] WITH NORECOVERY
を実行し復旧状態にします。
また、[NORECOVERY]を指定してしまった場合は、
RESTORE DATABASE [DBName] WITH RECOVERY
を実行しデータベースの復元を完了させます。
参考になるサイト
[紹介] 論理破壊のシナリオ
ブログ「はつねの日記」の初音さんが書かれた記事
AED検索のMicrosoft Azure SQL Databaseの論理破壊からの復旧試験が完了しました - はつねの日記
は非常に高い確率で起こるシナリオで、非常に共感を受けたのでリンクを載させていただきました。
是非読んでみてください!
スポンサーリンク

スポンサーリンク