1

CDC テーブルの 1 つを見ると、テーブルに __$start_lsn 値が の 4 つの行があります0x000CB13700041C06001B

私の質問はこれです。SQL Server がこの lsn を含む 4 つの行を CDC テーブルに書き込んだとき、この lsn を持つことになる 4 つの行だけを書き込んだのでしょうか? それとも、次のトランザクションに同じ lsn を持つ行がさらに含まれる可能性はありますか?

または、別の言い方をすれば、特定の LSN で CDC テーブルを調べたり、クエリを実行したりするときに、将来、同じ LSN を持つ行がこれ以上表示されないことを確実に知ることができますか?

4

2 に答える 2

0

Damien_The_Unbeliever の優れた回答に加えて、LSN はデータベース内の変更の基本的な識別子であることを付け加えておきます。このBOL記事から:

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

(私のものを強調)

2 番目の文から、他にもいくつかのことが推測できます。LSN には固有の順序付け可能性があるため、クエリで LSN によって並べ替えることができ、それらがログにコミットされた順序を取得できます。LSN2 = LSN1 である場合、これらのレコードが同時にログにコミットされた場合に限り、このステートメントから一意性を推測することもできます。

于 2014-04-30T15:31:08.527 に答える