トップ回答者
SQLServer2008 バックアップ/復元の方法

質問
-
SQLServer2000から2008に移行をし、現在バックアップ/復元のテスト中です。
しかし、復元をすると以下エラーが出力され復元ができません。
========================================
サーバ'XX'の復元に失敗しました。
追加情報:
System.Data.SqlClient.SqlError:データベース"XXX"のログの末尾がバックアップされませんでした。
この部分の作業を保存しておく場合はBACKUP LOG WITH NORECOVERを使用してログをバックアップして下さい。
ログのコンテンツを上書きするだけの場合は、RESTOREステートメントでWITH REPLACE句または
WITH STOPAT句を使用して下さい。
========================================
そこで、トランザクションログのバックアップ取得時にWITH NORECOVERを指定をしてみましたが、
今度は、復元中となったままとなってしまいます。
ログのバックアップの取得方法をどう変更すれば指定した時間に復元ができるのか教えて頂けないでしょうか?
【補足】
現在のバックアップ方法:フルのバックアップを毎朝1回取得+ログのバックアップを1時間ごとに取得
現在のログバックアップの取得文:LOG [DBName] TO DISK = [PathName] WITH NOINIT , NAME = [Dir], NOSKIP , NOFORMAT
回答
-
障害発生を想定したデータベースの現在使っているトランザクションログのバックアップおよび復旧をするか、
メッセージの後半で出ているWITH REPLACEまたはWITH STOPATを使ってリストアをしてみてはいかがでしょうか。
エラーの詳細は
http://msdn.microsoft.com/ja-jp/library/bb283410.aspx
こちらをご覧ください。なぜそのような状態になっているかの解説があります。
障害発生時にどこまで戻せば良いのか検討してみてください。- 回答としてマーク 山本春海 2010年10月19日 8:53
-
【補足】
現在のバックアップ方法:フルのバックアップを毎朝1回取得+ログのバックアップを1時間ごとに取得と
System.Data.SqlClient.SqlError: このバックアップ セットのログは LSN 5881000000007100001 から始まります。これはデータベースに適用するには新しすぎます。LSN 5879000000049700001 を含むバックアップよりも前のログ バックアップを復元できます。 (Microsoft.SqlServer.Smo)
の情報から、フルバックアップのリストア後、1時間おきに取得しているトランザクションログを順番に戻していないとか、特定のトランザクションログを戻し忘れているということはないでしょうか?
- 回答としてマーク 山本春海 2010年10月19日 8:53
-
すべての返信
-
障害発生を想定したデータベースの現在使っているトランザクションログのバックアップおよび復旧をするか、
メッセージの後半で出ているWITH REPLACEまたはWITH STOPATを使ってリストアをしてみてはいかがでしょうか。
エラーの詳細は
http://msdn.microsoft.com/ja-jp/library/bb283410.aspx
こちらをご覧ください。なぜそのような状態になっているかの解説があります。
障害発生時にどこまで戻せば良いのか検討してみてください。- 回答としてマーク 山本春海 2010年10月19日 8:53
-
ご回答ありがとうございます。
教えて頂いたリンクから、なぜこのエラーとなったのか分かりました。
そこで、
・最後に取得したトランザクションログのバックアップ以降に戻したい場合は、ログの末尾をバックアップしてから、復元をする。
・最後に取得したトランザクションログのバックアップ以前に戻したい場合は、ログの末尾をバックアップせずに、復元をする。
という手順にしたいと思います。
しかし、どちらの方法で復元しても今度は以下の違うエラーが出て復元ができません。(WITH REPLACEを指定の有無に関わらずエラーです。)
解決策が分かりましたら教えて頂けますでしょうか?
====エラー内容==========================
サーバ'XX'の復元に失敗しました。
追加情報:
System.Data.SqlClient.SqlError: このバックアップ セットのログは LSN 5881000000007100001 から始まります。これはデータベースに適用するには新しすぎます。LSN 5879000000049700001 を含むバックアップよりも前のログ バックアップを復元できます。 (Microsoft.SqlServer.Smo)
========================================
-
【補足】
現在のバックアップ方法:フルのバックアップを毎朝1回取得+ログのバックアップを1時間ごとに取得と
System.Data.SqlClient.SqlError: このバックアップ セットのログは LSN 5881000000007100001 から始まります。これはデータベースに適用するには新しすぎます。LSN 5879000000049700001 を含むバックアップよりも前のログ バックアップを復元できます。 (Microsoft.SqlServer.Smo)
の情報から、フルバックアップのリストア後、1時間おきに取得しているトランザクションログを順番に戻していないとか、特定のトランザクションログを戻し忘れているということはないでしょうか?
- 回答としてマーク 山本春海 2010年10月19日 8:53
-
ご回答ありがとうございます。
リストア時はMicrosoft SQL Server Management Studioからデータベースの復元機能をしていますので、順番や漏れはないのかなと思います。
ただ、1点気になる事があります。
Microsoft SQL Server Management Studioから復元→データベース にて、データベースの復元画面を開きます。
バックアップセット一覧が表示されるのですが、
「最初のLSN」の項目が
フルのバックアップとその後に取得したトランザクションログでは、トランザクションログの方が小さな値となっています。
最初のトランザクションログ取得時に、その前に取得したフルのバックアップとの紐付けが上手く出来ていないのかと考えられるのですが、
フルのバックアップの後の最初のトランザクションログのバックアップ取得方法に問題があるのでしょうか?
【ログバックアップの取得方法】
LOG [DBName] TO DISK = [PathName] WITH NOINIT , NAME = [Dir], NOSKIP , NOFORMAT
-
ふと思ったのですけど、先にmsdbをリストアしていませんか?
自分も、「Management Studioから戻しているから問題なさそうだな」と思っていたのですが、よくよく考えたらバックアップの履歴はmsdbに格納されますので、msdbをリストアしてしまうとバックアップの履歴も、msdbをバックアップした時点に戻ってしまいます。
ログのバックアップは、バックアップファイルに追加しているようなので、"RESTORE FILELISTONLY"や"RESTORE HEADERONLY"で格納されているバックアップの内容がManagement Studioでの復元画面で表示される内容と一致しているか確認してみてください。
※なお、復元ダイアログで「復元元デバイス」にてバックアップファイルを指定している場合は、バックアップファイルの内容に格納されている内容を表示しますので、これには当てはまりません。
データベースのバックアップ履歴からリストアする場合のみ、該当します。 -
-