殆どの人がリストアを経験するのはトラブった後です。そんな状態でいきなりやれって言われてもなかなかうまくいきませんよ。リストは初回の構築が終わった直後に一度は試しましょう。また、できれば月に一回程度、土日なんかで練習させてもらうのが望ましです。何故って?それはいきなりやると殆ど失敗するからです! – ざったなぶろぐ
より分かりやすく!格安スマホのギアベストクーポン紹介ページリニューアル!!(毎日更新です!!)
XBRL文書の解析に成功しました!!

データ収集に成功しました!これはうれしい!!

ゆうほうを見る!!

トラブル前に一度は試そう!SQLserver リストア(完全バックアップから)

この記事は約 5 分で読めます。

SQLserver リストア(完全バックアップから)

完全バックアップからのリストア

SQL Serverのデータベースについてバックアップからのリストアを行いたいと思います。リストアするバックアップは完全バックアップからであることをを前提として説明します。※差分バックアップではない

早速ですが、SQL文の最小構成は以下のような形となります。

バックアップを取得した際は意図的に指定していませんでしたが、リストアを行う際は

USE [master]

を指定します。これは[test001]をリストアする際に、[test001]を触っているとリストアが失敗するためです。そのため、意図的にmasterに移動します。

実行結果は以下の通りです。

SQLserverのリストア用クエリ

+++++++++++++++++++++++++++++++++

データベース ‘test001’ の 28152 ページ、ファイル 1 のファイル ‘test001’ を処理しました。
データベース ‘test001’ の 2 ページ、ファイル 1 のファイル ‘test001_log’ を処理しました。
RESTORE DATABASE により 28154 ページが 21.003 秒間で正常に処理されました (10.472 MB/秒)。

+++++++++++++++++++++++++++++++++

ここで、上記赤字のファイル1に注目してください。今回リストアしたデータベースファイルを改めて確認してみたいと思います。

SQLserverのリストア用クエリ

最新のバックアップファイルはファイル1では無く、ファイル8であることが確認できました。バックアップメディアの中に複数のバックアップセットが含まれていると適切なオプションを指定しないと、意図しないファイル(最新ではない)をリストアする事になります。

バックアップセットを指定したリストア

バックアップメディアの中より最新のバックアップセットをリストアします。

SQL文は以下の通りです。

オプションで with file=8 を指定する事により、最新のバックアップセットを利用してリストアする事ができました。

SQLserverのリストア用クエリ

+++++++++++++++++++++++++++++++++

データベース ‘test001’ の 28152 ページ、ファイル 8 のファイル ‘test001’ を処理しました。
データベース ‘test001’ の 2 ページ、ファイル 8 のファイル ‘test001_log’ を処理しました。
RESTORE DATABASE により 28154 ページが 21.777 秒間で正常に処理されました (10.099 MB/秒)。

+++++++++++++++++++++++++++++++++

異なるデータベースにリストアする

バックアップしたデータベースは通常は、バックアップしたデータベースにリストアします。

とみさん
ん?回文?

通常ではない場合とは異なる名前のデータベースに復元する場合です。あまり実施されることは無いかもしれませんがサンプルとして test002データベースを作成し、そこにリストアを行います。

以下の通り、test002データベースを作成し、リストアします。

SQLserverのデータベースをマネージメントスタジオで見た図

しかし、残念ながらこれはエラーとなってしまいます。

SQLserverのリストア用クエリ

メッセージ 3154、レベル 16、状態 4、行 2
バックアップ セットは、既存のデータベース ‘test002’ 以外のデータベースのバックアップを保持しています。
メッセージ 3013、レベル 16、状態 1、行 2
RESTORE DATABASE が異常終了しています。

これはデータベース自体の保護機能で、通常は取得したバックアップにそのままリストアする事が当たり前だからです。ただ、何らかの理由により異なるデータベースに対して復元する場合は若干複雑になり以下の通りになります。

データベースが異なる場合は replace オプションを意図的に指定する必要があります。また、 move オプションで、DB本体とログファイルの場所を明示的に指定する必要があります。

SQLserverのリストア用クエリ

異なるデータベースにリストアする事はあまり無いかもしれませんが、この様な方法でリストア可能です。

関係ないデータベースのバックアップファイルをリストアする

直前の内容は異なるデータベースに対するリストアでした。今回はデータベースに対するリストアを行うのではなく、DB本体にそのままバックアップファイルを接続するようなイメージで復元してみたいと思います。現在test001とtest002がありますので、test003にしてみたいと思います。SQL文は以下の通りです。

以下の通りバックアップファイルを利用して新規にデータベースが作成されたような状態を作ります。

SQLserverのリストア用クエリ

既存のデータベースに復元する方法と殆ど一緒です。本番環境のデータベースを試験環境に持ってくるような場合等で実行致します。