sys.fn_cdc_map_time_to_lsn (Transact-SQL)
適用対象:SQL Server
指定した時刻のcdc.lsn_time_mapping システム テーブルのstart_lsn
列からログ シーケンス番号 (LSN) の値を返します。 この関数を使用すると、datetime 範囲を、変更データ キャプチャ列挙関数cdc.fn_cdc_get_all_changes_capture_instanceおよびcdc.fn_cdc_get_net_changes_<capture_instance>で必要な LSN ベースの範囲に体系的にマップして、その範囲内の>データ変更を返すことができます。<
構文
sys.fn_cdc_map_time_to_lsn ( '<relational_operator>', tracking_time )
<relational_operator> ::=
{ largest less than
| largest less than or equal
| smallest greater than
| smallest greater than or equal
}
引数
'<relational_operator>' { 最も大きい値より小さい | 最も小さいか等しい | 最小以上 | 最小以上 }
テーブル内cdc.lsn_time_mapping
で、tracking_time値と比較した場合にリレーションシップを満たす が関連付けられているtran_end_time
個別の LSN 値を識別するために使用されます。
relational_operator は nvarchar(30)です。
tracking_time
照合する datetime 値です。 tracking_time は datetime です。
の戻り値の型 :
binary(10)
注釈
関数を使用して datetime 範囲を sys.fn_cdc_map_time_to_lsn
LSN 範囲にマップする方法を理解するには、次のシナリオを検討してください。
変更データを毎日抽出するとします。 つまり、特定の日の午前 0 時までに発生した変更を取得する必要があります。 時間範囲の下限は、前日の午前 0 時までですが、含まれません。 上限は、指定された日の午前 0 時までであり、含まれます。 次の例は、 関数 sys.fn_cdc_map_time_to_lsn
を使用して、この時間ベースの範囲を、その範囲内のすべての変更を返すために変更データ キャプチャ列挙関数で必要な LSN ベースの範囲に体系的にマップする方法を示しています。
DECLARE @begin_time DATETIME,
@end_time DATETIME,
@begin_lsn BINARY (10),
@end_lsn BINARY (10);
SET @begin_time = '2007-01-01 12:00:00.000';
SET @end_time = '2007-01-02 12:00:00.000';
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT *
FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all` `');
関係演算子 smallest greater than
は、前日の午前 0 時以降に発生した変更を制限するために使用されます。 LSN 値が異なる複数のエントリが、cdc.lsn_time_mapping テーブルの下限として識別される値を共有tran_end_time
する場合、関数は最小の LSN を返し、すべてのエントリが含まれていることを確認します。 上限の場合、関係演算子 largest less than or equal to
を使用して、値として tran_end_time
午前 0 時を持つエントリを含む、その日のすべてのエントリが範囲に含まれるようにします。 異なる LSN 値を持つ複数のエントリが上限として識別された値を tran_end_time
共有する場合、関数は最大の LSN を返し、すべてのエントリが含まれていることを確認します。
アクセス許可
ロール public のメンバーシップが必要です。
例
次の例では、 関数を sys.fn_cdc_map_time_to_lsn
使用して、 cdc.lsn_time_mapping テーブルに、午前 0 時以上の値を tran_end_time
持つ行があるかどうかを判断します。 このクエリを使用すると、キャプチャ プロセスが前日の午前 0 時までコミットされた変更を既に処理しているかどうかを判断して、その日の変更データの抽出を続行できます。
DECLARE @extraction_time DATETIME,
@lsn BINARY (10);
SET @extraction_time = '2007-01-01 12:00:00.000';
SELECT @lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @extraction_time);
IF @lsn IS NOT NULL
BEGIN
<some action>
END
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示