none
トランザクションログの復元について RRS feed

  • 質問

  • 私の携わるシステムでデータ移行を行うことになりましたが、
    サービスの停止を短くするため、以下のことを試しました。

    1、test1(サービス稼動用DBサーバ)で、フルバックアップをとり、それをtest2(移行用DBサーバ)へ復元する。

    2、test2サーバで、test1サーバではまったく使用しないデータの移行(削除)を行う。

    3、test1サーバは、通常のサービス稼動中(挿入、更新あり)。

    4、test1で、NO_TRANCATEオプションでトランザクションログのバックアップを取得後、それをtest2サーバへ復元する。

    (test2サーバで移行を終了させ、それに対しtest1サーバのトランザクションをかぶせるので、
    かぶせる時間のみのサービス停止を狙ったオペレーションです。)

    これを行ったところ、以下のメッセージがでました。
    「このバックアップセットのログはLSN6000002227200001に終了します。これはデータベースに適用するには早すぎます。
    LSN6000002228600001を含む最新のログバックアップが復元できます。RESTORE LOGが異常終了しました。」

    以前「別サーバーでトランザクションログを復旧したい」という以下の記事がありましたので試してみましたが、
    うまく復元できませんでした。
    (http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=272452&SiteID=7)

    そもそもこういう方法がSQL Serverでは許されないのか、それともオペレーションが間違っているのか、
    ご教授のほど、よろしくお願いします。

     

    2006年10月16日 3:19

すべての返信

  • トランザクションログを適用する大原則があります。
    それは、フルバックアップを適用し、復旧状態にしないで、そのままトランザクションログを適用するということです。
    RESTORE DATABASE XXXX FROM DISK='C:\XXXX.bak' WITH NORECOVERY[,REPLACE]
    GO
    RESTORE LOG XXXX FROM DISK='C:\XXXX.trn' WITH RECOVERY, STOPAT='2006/10/16 12:00:00'
    GO
    という風な感じです。
    詳しくは SQL Server の Books Online を参照してください。
    2006年10月16日 11:35
  • 早速のご回答ありがとうございます!

    こちらで行ったオペレーション中の「4」のところが、説明不足でした。

    おがわさんご指摘の通り、こちらの「4」オペレーションでは、

    (1)test2サーバで変更したDBをフルバックアップ
    (2)(1)のDBを「WITH NORECOVERY」オプションをつけて、復元
    (3)test1サーバのトランザクションログを「NO_TRANCATE」オプションでバックアップ後、(2)に「WITH RECOVERY」オプションをつけて、適用

    という流れで、作業しております。

    度々で大変申し訳ございませんが、ご教授のほど、
    どうぞよろしくお願いします。

     

    2006年10月17日 3:53
  • REPLACE を指定されていますか?
    たぶんこれだと思うのですが。。。
    それでもだめなら LSN の番号を強制的に書き換えるか。。。
    2006年10月17日 10:21
  • 度々ご回答ありがとうございます。

    おがわさんご指摘の「REPLACE」オプションですが、こちらのオペレーションでは、

    前記「(1)test2サーバで変更したDBをフルバックアップ」の後、復元する前に、DBの削除を行っています。
    これは、削除してから復元するのと、置き換えるのと、内容的には変わらないと考えたためです。
    またまた説明不足で申し訳ございません。

    念のため、「REPLACE」オプションのところだけ変更して一から前のオペレーションを実行しましたが
    やはり同じエラーが出てしまいました。

    LSNの件ですが、バックアップファイルのLSNは、msdbのbackupsetというテーブルで管理しているらしい、
    というところまで調べまして、こちらで変更したりして、実際復元を試みたところ、うまくいきませんでした。
    これは、LSNを変更するには、どのテーブルをどう変更すればいいのか、よく分かっていないためだと思います。

    そこで、LSNの変更方法について、ご教授いただければ、と思います。

    何度も申し訳ございませんが、どうぞよろしくお願いします。

    2006年10月18日 2:51