2009-07-17 14 views
3

ログシーケンス番号の意味は?私はそれがバイナリ型で、長さが10バイトで、トランザクションがDBで起こる時間に対応していることを知っています。しかし、これは、効率のよいバイナリ形式で保存された、または日付 - 時間と他の何らかの関数(たとえば、ミリ秒で発生するトランザクションのシリアル番号)の高精度の日時値です。私は多くの検索をしましたが、これに対して良い答えを見つけることができませんでした。SQL ServerでLSNとは何を意味しますか?

日時などからLSNを派生させるために使用される数式や関数で説明することができます。

答えて

14

SQL Serverの トランザクションログ内のすべてのレコードを一意ログシーケンス番号(LSN)によって を識別されます。 LSNは、LSN2がLSN1より大きい である場合、ログレコードLSNによって記述される変更 の後にLSN2によって がLSN2に参照されるログレコードによって記述される変更 が発生するように順序付けられます。

here

これらの生成方法には心配する必要はありません。

+0

Mitch、ここに投稿する前にMSDNをチェックしました。私が探しているのは、その作り方です。それが私の特定のアプリケーションにとって重要であるように。御時間ありがとうございます。 – Faiz

+1

アプリケーションにとって重要なのは、何らかの低レベルのリストアユーティリティを作成していると仮定できますか?そうでない場合は、これらの生成方法を知る必要はありません。変更される可能性はありますが、公開されたインターフェイスではないため、MSを停止するものはありません。 –

+0

私はこれをETLのデルタ抽出ウィンドウに使用しようとしています。復元ユーティリティ用ではありません。 LSNをウィンドウ処理に使用することが安全であることを確認したい。私の他の質問を参照してください[http://stackoverflow.com/questions/1137283/in-sql-server-cdc-with-ssis-which-data-should-be-stored-for-windowing-lsn-or-da/1137329 #1137329] – Faiz

5

日時の値ではなく、増加するシーケンス(1,2,3,4、...)です。 Microsoft documentationから:

ログ・シーケンス番号(LSN)の値が一意に 値をインクリメントし、三部 あります。これは、トランザクションログ のレコードをデータベースに保存するために使用されます。これにより、 SQL ServerはACID のプロパティを維持し、適切な修復処理を実行することができます( )。

+0

よろしいですか。次に、これは日時にどのようにマッピングされていますか?それはDMLが発生したときにLSNがインクリメントされ、そのLSNと共に日時の値がマッピングテーブルに格納されるようなものでしょうか? – Faiz

+0

LSNと任意の日付との間にはマッピングがありません。 LSNは、すべてのトランザクションにグローバル順序付けを行うために使用されます。 以下のAuassnoiが指摘するように、バックアップを実行するとLNSが生成されます。しかし、それは唯一のものです。 –

+0

私は上記のMitch Wheatへのあなたのコメントを読んだ。私はトランザクションを生成する(アプリケーションのテーブルに日付を挿入する)ことをお勧めしますし、その前/後/デルタ目的のLSNとして使用してください。 –

1

あり、それを導出する一切保証方法はありませんが、あなたは上でバックアップを行ったマシン上msdb.dbo.backupsetからそれを推測することができますが:

SELECT last_lsn 
FROM msdb.dbo.backupset 
WHERE backup_start_date = @backup_date 

これは正確ではありませんし、信頼できないのは勿論です。

+1

lsnから日付を取得するsys.fn_cdc_map_lsn_to_time() 日付からlsnを取得するsys.fn_cdc_map_time_to_lsn()と "relationaloperator" – max

-1

LSNは、トランザクションがコミットされ、バックアップが実行されたときに自動的に生成されるインクリメンタル番号です。そのシーケンスをアプリケーションテーブルに使用する場合は、whileループを使用してシーケンスをフェッチし、日付/時刻値を使用します。

関連する問題