none
standbyモードでのデータベース復元 RRS feed

  • 質問

  • SQL Server 2005(9.0.4207)からSQL Server 2008 R2(10.50.2817)へデータベースを移行しようとしています。

    standbyモードで実施すると、以下のエラーにより復元できません。

    -------------------

    サーバー'XXXXXX¥INSTANCE01'の復元に失敗しました。(Microsoft.SqlServer.SmoExtended)

    追加情報:System.Data.SqlClient.SqlError:このバックアップはWITH STANDBYでは復元できません。データベースのアップグレードが必要です。WITH STANDBYを指定しないでRESTOREを再実行してください。(Microsoft.SqlServer.Smo)

    -------------------

    ちなみにnorecoveryモードでは正常に復元できます。

    本現象が製品仕様によるものか何らかの不具合によるものかについて情報提供をお願いいたします。

    2013年4月1日 6:16

回答

  • 改めて手順にしてみました。
    まずオンライン復元について私も誤解していたところもあったので、以下のURLに従いました。
    http://msdn.microsoft.com/ja-jp/library/ms188671.aspx

    この中の部分復元を想定し、DBの中にプライマリ以外のファイルグループ(FG2)をオフラインにし、
    バックアップから戻すことを考えました。

    --環境準備
    create database test
    alter database test add filegroup FG2;
    alter database test add file (NAME='test2',FILENAME='C:\temp\test_2.ndf') to FILEGROUP FG2;
    
    --この前にバックアップファイルは消す remove C:\temp\test.bak
    backup database test to disk=N'C:\temp\test.bak'
    
    --FG2のファイルをオフラインに
    alter database test MODIFY FILE (name='test2',offline);
    
    --通常のオンライン復元は
    --restore database test FILE='test2' from disk=N'C:\temp\test.bak'
    
    --standbyでリストア
    restore database test FILE='test2' from disk=N'C:\temp\test.bak' with standby='C:\temp\test.standby'
    

    この結果以下のエラーが出ています。

    メッセージ 4302、レベル 16、状態 1、行 1
    オプション "STANDBY" はオンライン復元と競合しています。競合するオプションを削除してから、コマンドを再実行してください。
    メッセージ 3013、レベル 16、状態 1、行 1
    RESTORE DATABASE が異常終了しています。

    ご参考までに。

    • 回答としてマーク 29da4ma 2013年4月11日 8:07
    2013年4月9日 9:24
    モデレータ
  • 正確に仕様か否かはマイクロソフト社に問い合わせをしてみないとわかりませんが、
    製品マニュアルに「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」と
    書いてあるので、製品としてはその通りの動きとなる、と判断しても良いのではないでしょうか。

    なので個人的には「バックアップ元と復元先のバージョンが異なる場合の製品仕様という理解」は
    正しいのではないかと思います。

    なお、私が検証してみた結果はログのバックアップではなく、バックアップのリストアで
    完全バックアップから戻した時の動作でした。

    • 回答の候補に設定 星 睦美 2013年4月9日 0:36
    • 回答としてマーク 29da4ma 2013年4月11日 8:08
    2013年4月4日 9:46
    モデレータ

すべての返信

  • 以下に記載がありました。
    http://msdn.microsoft.com/ja-jp/library/ms178615%28v=sql.105%29.aspx

    「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」

    ですので製品としては正常な動作であると思います。

    2013年4月1日 7:22
    モデレータ
  • 回答ありがとうございます。

    上記URLからstandbyモード使用時の制限事項を確認いたしました。

    ①オンライン復元操作に STANDBY オプションを指定すると、復元操作は失敗する

    ②データベースのアップグレードが必要な場合も、STANDBY は使用できない

    今回の現象は②に該当し、バージョンが異なる場合の製品仕様と理解しました。

    ただし、①に関して、同じバージョン間ではstandbyモードで復元できているので、説明にある動きとは異なるように思われます。

    よろしくお願いいたします。

    2013年4月1日 9:14
  • 少し実機で試してみたところ、SQL Server Management Studioからデータベースの復元を
    RESTORE WITH STANDBYに変えただけではおっしゃるとおり、実行が完了しました。
    これは規定値だと「ログ末尾のバックアップ」で「ソースデータベースを復元中の状態にしておく」が選ばれており、
    ログバックアップの時にNORECOVERYを指定していることによるもののようです。
    トレースを採取して違いがわかりました。
    ログバックアップ時にNORECOVERYが指定されているため、瞬間的におそらく復元中のステータスになり、
    後続のRESTORE STANDBYが正常に終了していました。
    一方で「ソースデータベースを復元中の状態にしておく」を外すと復元に失敗してしまいました。
    このことからSTANDBYオプション指定でのオンライン復元は単体では失敗する、というのはマニュアル通りの動きかと思います。

    2013年4月1日 10:33
    モデレータ
  • Management Studioのデータベースのバックアップ画面は以下の状態のため、「データベースを復元中にしておく」のチェックを外すことはできないようです。

    ・全般: バックアップの種類 → 「完全」

    ・オプション: トランザクションログ → ※グレーアウトのため選択不可、「トランザクションログを切り捨てる」、「ログの末尾をバックアップし、データベースを復元中の状態にしておく」ともチェックオフ 

    今回、実機にて確認いただいたのは、バックアップの種類で「トランザクションログ」を選択されているようで、「完全」の場合と動きが異なるように思われます。

    2013年4月2日 8:33
  • フォーラム オペレーターの星 睦美です。
    tsukudajima さん、こんにちは

    質問のエラーをトラブルシューティングするために、イベントログでエラーの情報を確認してみてはいかがでしょうか。
    質問に書かれているメッセージ以外にもイベントID など手がかりになる情報がありそうです。
    (もしかしたら、直前の処理をきっかけに復元に失敗しているかも知れません。)

    イベントログのコピー&ペーストでかまいませんので、よろしければ詳しい内容を追記いただければと思います。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年4月3日 6:35
  • フォーラム オペレーター 星様

    standbyモードでの復元前後のイベントログに、エラーなど手がかりになるようなログは出力されていませんでした。

    気になる箇所として、standbyモード選択時、スタンバイファイル(以下)が自動的に入力されますが、特に変更はしていません。

    C:\Program Files\Microsoft SQL Server\MSSQL10_50.INSTANCE01\MSSQL\Backup\ROLLBACK_UNDO_Example1.BAK

    MSのサイトに記載されている「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」の意味しているところが

    バックアップ元と復元先のバージョンが異なる場合の製品仕様という理解は間違っていますでしょうか。

    http://msdn.microsoft.com/ja-jp/library/ms178615%28v=sql.105%29.aspx

    よろしくお願いいたします。

    2013年4月4日 3:00
  • 正確に仕様か否かはマイクロソフト社に問い合わせをしてみないとわかりませんが、
    製品マニュアルに「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」と
    書いてあるので、製品としてはその通りの動きとなる、と判断しても良いのではないでしょうか。

    なので個人的には「バックアップ元と復元先のバージョンが異なる場合の製品仕様という理解」は
    正しいのではないかと思います。

    なお、私が検証してみた結果はログのバックアップではなく、バックアップのリストアで
    完全バックアップから戻した時の動作でした。

    • 回答の候補に設定 星 睦美 2013年4月9日 0:36
    • 回答としてマーク 29da4ma 2013年4月11日 8:08
    2013年4月4日 9:46
    モデレータ
  • ElanLilac様

    ------------

    ①オンライン復元操作に STANDBY オプションを指定すると、復元操作は失敗する

    ------------

    について検証手順が文面から読み取れず、こちらで再現確認ができていないためマニュアルに記載されている上記製品仕様が理解できておりません。

    大変お手数ですがもう少し具体的に検証した手順を記載していただけないでしょうか。こちらでも検証により動きを確認したいと考えております。

    よろしくお願いいたします。

    2013年4月9日 1:00
  • 改めて手順にしてみました。
    まずオンライン復元について私も誤解していたところもあったので、以下のURLに従いました。
    http://msdn.microsoft.com/ja-jp/library/ms188671.aspx

    この中の部分復元を想定し、DBの中にプライマリ以外のファイルグループ(FG2)をオフラインにし、
    バックアップから戻すことを考えました。

    --環境準備
    create database test
    alter database test add filegroup FG2;
    alter database test add file (NAME='test2',FILENAME='C:\temp\test_2.ndf') to FILEGROUP FG2;
    
    --この前にバックアップファイルは消す remove C:\temp\test.bak
    backup database test to disk=N'C:\temp\test.bak'
    
    --FG2のファイルをオフラインに
    alter database test MODIFY FILE (name='test2',offline);
    
    --通常のオンライン復元は
    --restore database test FILE='test2' from disk=N'C:\temp\test.bak'
    
    --standbyでリストア
    restore database test FILE='test2' from disk=N'C:\temp\test.bak' with standby='C:\temp\test.standby'
    

    この結果以下のエラーが出ています。

    メッセージ 4302、レベル 16、状態 1、行 1
    オプション "STANDBY" はオンライン復元と競合しています。競合するオプションを削除してから、コマンドを再実行してください。
    メッセージ 3013、レベル 16、状態 1、行 1
    RESTORE DATABASE が異常終了しています。

    ご参考までに。

    • 回答としてマーク 29da4ma 2013年4月11日 8:07
    2013年4月9日 9:24
    モデレータ
  • ElanLilac様

    ---------------

    ①オンライン復元操作に STANDBY オプションを指定すると、復元操作は失敗する

    ---------------

    上記についての動きを検証環境で確認することができました。

    情報提供ありがとうございました。

    2013年4月11日 8:07