sys.fn_cdc_map_time_to_lsn (Transact-SQL)sys.fn_cdc_map_time_to_lsn (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) 適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions)

指定された時間について、 lsn_time_mappingシステムテーブルのstart_lsn列のログシーケンス番号 (LSN) 値を返します。Returns the log sequence number (LSN) value from the start_lsn column in the cdc.lsn_time_mapping system table for the specified time. この関数を使用すると、変更データキャプチャの列挙関数 cdc. fn_cdc_get_all_changes_<capture_instance> および cdc. fn_cdc_get_net_changes_ によって必要とされる LSN 範囲を体系的にマップし、その範囲内のデータ変更を返すことができます。You can use this function to systematically map datetime ranges into the LSN-based range needed by the change data capture enumeration functions cdc.fn_cdc_get_all_changes_<capture_instance> and cdc.fn_cdc_get_net_changes_<capture_instance> to return data changes within that range.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

  
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  
}  

引数Arguments

'<relational_operator>' {最大値より大きい | か、 | または等しい最小値より大きいか | 等しい}'<relational_operator>' { largest less than | largest less than or equal | smallest greater than | smallest greater than or equal }
は、 tracking_time値と比較したときに、関連するtran_end_timeが関連付けられている、 lsn_time_mappingテーブル内の個別の LSN 値を識別するために使用されます。Is used to identify a distinct LSN value in within the cdc.lsn_time_mapping table with an associated tran_end_time that satisfies the relation when compared to the tracking_time value.

relational_operatornvarchar (30) です。relational_operator is nvarchar(30).

tracking_timetracking_time
照合する datetime 値を指定します。Is the datetime value to match against. tracking_timedatetimeです。tracking_time is datetime.

戻り値の型Return Type

binary(10)binary(10)

解説Remarks

Fn_cdc_map_time_lsnを使用して datetime 範囲を lsn 範囲にマップする方法を理解するには、次のシナリオを検討してください。To understand how the sys.fn_cdc_map_time_lsn can be used to map datetime ranges to LSN ranges, consider the following scenario. 変更データを毎日抽出するとします。Assume that a consumer wants to extract change data on a daily basis. つまり、特定の日の午前 0 時までに発生した変更を取得する必要があります。That is, the consumer wants only changes for a given day up to and including midnight. 時間範囲の下限は、前の日の深夜を含めずに最大になります。The lower bound of the time range would be up to but not including midnight of the previous day. 上限は、指定された日の深夜を含む最大までの範囲です。The upper bound would be up to and including midnight of the given day. 次の例では、 fn_cdc_map_time_to_lsn 関数を使用して、この時間ベースの範囲を変更データキャプチャの列挙関数で必要な lsn ベースの範囲に体系的にマップし、その範囲内のすべての変更を返す方法を示しています。The following example shows how the function sys.fn_cdc_map_time_to_lsn can be used to systematically map this time-based range into the LSN-based range needed by the change data capture enumeration functions to return all changes within that range.

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 ');SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all ');

関係演算子 ' smallest greater than ' は、前日の午前0時より後に発生した変更を制限するために使用されます。The relational operator 'smallest greater than' is used to restrict changes to those that occurred after midnight on the previous day. LSN 値が異なる複数のエントリが、 lsn_time_mappingテーブル内の下限として識別されたtran_end_time値を共有する場合、関数は、すべてのエントリが含まれていることを確認する最小の lsn を返します。If multiple entries with different LSN values share the tran_end_time value identified as the lower bound in the cdc.lsn_time_mapping table, the function will return the smallest LSN ensuring that all entries are included. 上限を設定するために、関係演算子 ' ' を使用して、 largest less than or equal to 午前0時を含むすべてのエントリを tran_end_time 値として範囲に含めます。For the upper bound, the relational operator 'largest less than or equal to' is used to ensure that the range includes all entries for the day including those than have midnight as their tran_end_time value. LSN 値が異なる複数のエントリが上限として識別された tran_end_time 値を共有している場合、関数は、すべてのエントリが含まれていることを保証する最大の lsn を返します。If multiple entries with different LSN values share the tran_end_time value identified as the upper bound, the function will return the largest LSN ensuring that all entries are included.

アクセス許可Permissions

ロール public のメンバーシップが必要です。Requires membership in the public role.

Examples

次の例では、関数を使用して、 sys.fn_cdc_map_time_lsn lsn_time_mapping テーブルに、 tran_end_time 値が午前0時以上の行があるかどうかを確認します。The following example uses the sys.fn_cdc_map_time_lsn function to determine whether there are any rows in the cdc.lsn_time_mapping table with a tran_end_time value that is greater than or equal to midnight. このクエリを使用すると、たとえば、その日の午前0時にコミットされた変更がキャプチャプロセスによって既に処理されているかどうかを判断し、その日の変更データの抽出を続行できます。This query can be used to determine, for example, whether the capture process has already processed the changes committed through midnight of the previous day, so that the extraction of change data for that day can proceed.

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  

参照See Also

cdc. lsn_time_mapping (Transact-sql) cdc.lsn_time_mapping (Transact-SQL)
fn_cdc_map_lsn_to_time (Transact-sql) sys.fn_cdc_map_lsn_to_time (Transact-SQL)
cdc. fn_cdc_get_net_changes_<capture_instance> (Transact-sql) cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL)
cdc. fn_cdc_get_all_changes_<capture_instance> (Transact-sql)cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)