ログ シーケンス番号への復旧 (SQL Server)
このトピックは、完全復旧モデルまたは一括ログ復旧モデルを使用するデータベースのみに関連しています。
ログ シーケンス番号 (LSN) を使用して、復元操作の復旧ポイントを定義できます。 ただし、この機能はツール ベンダーを対象としたものであり、一般的には、あまり有益ではない場合があります。
ログ シーケンス番号の概要
LSN は、RESTORE シーケンス中に、データを復元する時点を追跡するために内部で使用されます。 バックアップを復元するときに、データはバックアップが実行された時点に対応する LSN まで復元されます。 差分バックアップとログ バックアップの場合、復元されるデータベースは LSN が大きい方、つまり、より後の時点に向かって進められます。
トランザクション ログのすべてのレコードは、ログ シーケンス番号 (LSN) によって一意に識別されます。 LSN の順序は、LSN2 が LSN1 より大きい場合、LSN2 によって参照されるログ レコードで示される変更が、ログ レコード LSN1 で示される変更の後に行われたようになっています。
重要なイベントが発生した時点のログ レコードの LSN を、正しい復元シーケンスの構築に役立てることができます。 LSN は順序付けられているので、等号または不等号 (<、>、=、<=、>=) を使用して比較できます。 このような比較は、復元シーケンスを構築するときに役立ちます。
注 |
---|
LSN は、データ型 numeric(25,0) の値です。 算術演算 (加算や減算など) は、意味が無いので LSN では行わないでください。 |
[先頭に戻る]
バックアップと復元で使用される LSN の表示
特定のバックアップと復元イベントが発生したログ レコードの LSN は、次の 1 つ以上の方法を使用して表示できます。
注 |
---|
LSN は、一部のメッセージ テキストにも表示されます。 |
LSN に復元するための Transact-SQL 構文
RESTORE ステートメントを使用して、次のように LSN または LSN の直前まで復元できます。
WITH STOPATMARK = 'lsn:<lsn_number>' 句を使用します。ここで、lsn: <lsnNumber> は、指定された LSN が含まれるログ レコードが復旧ポイントであることを指定する文字列です。
STOPATMARK によって LSN までロールフォワードされ、そのログ レコードがロールフォワードに含められます。
WITH STOPBEFOREMARK = 'lsn:<lsn_number>' 句を使用します。ここで、lsn:<lsnNumber> は、指定した LSN 番号が含まれるログ レコードの直前のログ レコードが、復旧ポイントであることを指定する文字列です。
STOPBEFOREMARK では、LSN までロールフォワードされますが、指定されたログ レコードはロールフォワードから除外されます。
通常は、包含または除外する特定のトランザクションを選択します。 実際には必要ありませんが、指定するログ レコードはトランザクション コミット レコードです。
使用例
次の例では、完全復旧モデルを使用するように AdventureWorks データベースが変更されていることを想定しています。
RESTORE LOG AdventureWorks FROM DISK = 'c:\adventureworks_log.bak'
WITH STOPATMARK = 'lsn:15000000040000037'
GO