none
SQL Server データベースの復元について RRS feed

  • 質問

  • SQL Server 2008 Express で作成した完全バックアップを使用して、SQL Server 2005 Std のデータベースを復元することは可能でしょうか?

    SQL Server 2005 Std はホスティングサービス会社のサーバーで、SQL Server 2008 Express は自分の開発環境にインストールしたものです。ホスティングサービス会社が提供する myLittleAdmin というツールを利用して SQL Server 2005 Std からの .bak の取得と復元を行っています。

    実際にやってみると、"デバイス 'xxx.bak' のメディア ファミリが正しい形式ではありません。SQL Server はこのメディア ファミリを処理できません。RESTORE DATABASE が異常終了しています。" というエラーメッセージが出て失敗に終わります。

    クエリは以下の通りです。

    USE [master]
    GO
    
    ALTER DATABASE [UserDatabase]
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE
    GO
    
    RESTORE DATABASE [UserDatabase]
    FROM DISK=N'xxx.bak'
    WITH RECOVERY
    , REPLACE
    , NOUNLOAD
    , STATS = 10
    GO
    
    ALTER DATABASE [UserDatabase]
    SET MULTI_USER
    GO
    

    エラーメッセージで検索すると、以下のようなバージョンが違うとできないという記事が多々見つかります。

    メディア ファミリが正しい形式ではありません。SQL Server はこの
    メディア ファミリを処理できません・・・
    http://nusoft.jp/blog/archives/118

    ところが、ホスティングサービス会社に問い合わせると、彼ら自身で実際に作業して復元は可能なことは確認しているそうです。

    何かの条件でできないことがあるのか、そのあたりの情報をお持ちでしたら教えていただけると幸いです。


    ちなみに、何故このようなことを行っているかというと、何らかの問題でログファイルが数 10 GB に肥大化してしまったため、修復のためです。行った具体的な作業内容は以下の通りです。

    (1) myLittleAdmin を使って SQL Server 2005 Std から .bak ファイルをダウンロードし、自分の PC の SQL Server 2008 Express が使っている Backup フォルダに保存。
     
    (2) SQL Server Management Studio を SQL Server 2008 Express に接続。
     
    (3) SQL Server Management Studio を利用して、SQL Server 2008 Express にある既存のバックアップ用データベースを、ダウンロードした .bak ファイルを使って復元。
     
    (4) SQL Server Management Studio を利用してログファイルのバックアップを実施しログの切捨てを行う。
     
    (5) ログファイルに対して DBCC SHRINKFILE コマンドを実行。期待通りログファイルの領域を開放して指定したファイルサイズにできた。
     
    (6) DBCC CHECKDB を実行してエラーのないことを確認。
     
    (7) SQL Server Management Studio を利用して、上記 (6) までの作業が完了した SQL Server 2008 Express のデータベースの完全バックアップを作成。
     
    (8) myLittleAdmin の復元ウィザードで、上記 (7) で作成した .bak ファイルを用いて SQL Server 2005 Std のデータベースの復元を試みた。 ⇒ 結果は上記の通り失敗。

    2015年6月15日 4:35

回答

  • 結局、SqlServer2008で作成したバックアップを、SqlServer2005で復元できない、という話ですよね
    できないので、自PCにSqlServer2005をインストールする手でしょう。

    https://technet.microsoft.com/ja-jp/library/ms191253.aspx
    <q>データベースの復旧モデルにかかわらず、SQL Server バックアップは、バックアップを作成したバージョンより古いバージョンの SQL Server では復元できません。</q>


    jzkey

    • 回答としてマーク SurferOnWww 2015年6月16日 5:41
    2015年6月15日 5:10

すべての返信

  • 結局、SqlServer2008で作成したバックアップを、SqlServer2005で復元できない、という話ですよね
    できないので、自PCにSqlServer2005をインストールする手でしょう。

    https://technet.microsoft.com/ja-jp/library/ms191253.aspx
    <q>データベースの復旧モデルにかかわらず、SQL Server バックアップは、バックアップを作成したバージョンより古いバージョンの SQL Server では復元できません。</q>


    jzkey

    • 回答としてマーク SurferOnWww 2015年6月16日 5:41
    2015年6月15日 5:10
  • レスをありがとうございました。

    やはり「SQL Server 2008 Express で作成した完全バックアップを使用して、SQL Server 2005 Std のデータベースを復元」というのはダメですね。

    教えていただいた URL からたどって SQL Server 2008 の記事(URL 下記)も見てみましたが、"SQL Server 2008 のバックアップを以前のバージョンの SQL Server で復元することもできません" と書いてありました。

    復元と復旧の概要 (SQL Server)
    https://technet.microsoft.com/ja-jp/library/ms191253(v=sql.100).aspx

    ホスティングサービス会社のサポート担当の人は、以下の通り言っていたんですが、これは一体どういうことか聞いてみます。分かったら連絡します。

    > ご利用いただいておりますサーバーにある弊社のテストアカウントの
    > MyLittleAdminからデータベースのバックアップを取得し、
    > ローカルのSQLServer2008 R2 Express へ復元した後、
    > ローカルで取得しました.bakファイルを、再度MyLittleAdminへ復元するテストを行っております。
    > この処理では、復元は可能でございました事をご案内申し上げます。(DBの互換レベルは90です。)


    #今思い出したんですが、この会社は私が利用しているのとは別に SQL Server 2008 を使っているサービスも提供しており、「弊社のテストアカウント」というのはそれのことではないかと疑ってます。

    2015年6月15日 5:59
  • なんとなくホスティングサービス会社の検証はバージョン違い(2008=>2005)の復元検証ではなく、エディション違い(Standard等=>Express)の復元検証に見えますけど気のせいですかね?

    もしくはバージョン違いでも、2005=>2008R2の検証をしている様に見受けられます。

    2015年6月15日 7:06
  • > なんとなくホスティングサービス会社の検証はバージョン違い(2008=>2005)の
    > 復元検証ではなく、エディション違い(Standard等=>Express)の復元検証に見え
    > ますけど気のせいですかね?

    ホスティングサービス会社に「弊社のテストアカウント」というのは何なのか確認のメールを出しました。ちょっと待ってくれとの返事があったものの、まだ確認が取れていません。分かったらここに書きますのでしばしお待ちください。

    2015年6月15日 9:19
  • ホスティングサービス会社から回答が来ましたので、その概要を連絡します。

    上で言う「弊社のテストアカウント」というのは、自分が利用しているの同じ SQL Server 2005 を使っているサービスに間違いないそうです、

    ホスティングサービス会社で検証のためローカルで使ったのは先の情報どおり SQL Server 2008 R2 で、MyLittleAdmin 経由で SQL Server 2005 と .bak ファイルをやりとりして作業したことにも間違いないそうです。

    ただし、SQL Server 2008 R2 では復元したデータベースには何も手を加えず、そのまま .bak ファイルを作成し、SQL Server 2005 のデータベースを復元したそうで、その場合は復元可能だったそうです。

    SQL Server 2008 R2 で復元したデータベースを更新すると、最初の私の質問で書いたのと同じエラーになったそうです。


    ちなみに、自分の PC に SQL Server 2005 をインストールして、最初の私の質問で書いた (1) ~ (8) と同様な手順で復元をしてみましたが、当然のことながら問題なかったです。

    お騒がせしました。

    2015年6月16日 5:44