トップ回答者
standbyモードでのデータベース復元

質問
-
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モードでは正常に復元できます。
本現象が製品仕様によるものか何らかの不具合によるものかについて情報提供をお願いいたします。
回答
-
改めて手順にしてみました。
まずオンライン復元について私も誤解していたところもあったので、以下の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
-
正確に仕様か否かはマイクロソフト社に問い合わせをしてみないとわかりませんが、
製品マニュアルに「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」と
書いてあるので、製品としてはその通りの動きとなる、と判断しても良いのではないでしょうか。
なので個人的には「バックアップ元と復元先のバージョンが異なる場合の製品仕様という理解」は
正しいのではないかと思います。
なお、私が検証してみた結果はログのバックアップではなく、バックアップのリストアで
完全バックアップから戻した時の動作でした。
すべての返信
-
以下に記載がありました。
http://msdn.microsoft.com/ja-jp/library/ms178615%28v=sql.105%29.aspx
「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」
ですので製品としては正常な動作であると思います。 -
少し実機で試してみたところ、SQL Server Management Studioからデータベースの復元を
RESTORE WITH STANDBYに変えただけではおっしゃるとおり、実行が完了しました。
これは規定値だと「ログ末尾のバックアップ」で「ソースデータベースを復元中の状態にしておく」が選ばれており、
ログバックアップの時にNORECOVERYを指定していることによるもののようです。
トレースを採取して違いがわかりました。
ログバックアップ時にNORECOVERYが指定されているため、瞬間的におそらく復元中のステータスになり、
後続のRESTORE STANDBYが正常に終了していました。
一方で「ソースデータベースを復元中の状態にしておく」を外すと復元に失敗してしまいました。
このことからSTANDBYオプション指定でのオンライン復元は単体では失敗する、というのはマニュアル通りの動きかと思います。 -
-
フォーラム オペレーター 星様
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
よろしくお願いいたします。 -
正確に仕様か否かはマイクロソフト社に問い合わせをしてみないとわかりませんが、
製品マニュアルに「データベースのアップグレードが必要な場合も、STANDBY は使用できません。」と
書いてあるので、製品としてはその通りの動きとなる、と判断しても良いのではないでしょうか。
なので個人的には「バックアップ元と復元先のバージョンが異なる場合の製品仕様という理解」は
正しいのではないかと思います。
なお、私が検証してみた結果はログのバックアップではなく、バックアップのリストアで
完全バックアップから戻した時の動作でした。
-
改めて手順にしてみました。
まずオンライン復元について私も誤解していたところもあったので、以下の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