sys.fn_cdc_get_min_lsn (Transact-SQL)

適用対象:SQL Server

cdc.change_tables システム テーブルから、指定したキャプチャ インスタンスのstart_lsn列の値 返します。 この値は、キャプチャ インスタンスの有効期間の下端を表します。

Transact-SQL 構文表記規則

構文

  
sys.fn_cdc_get_min_lsn ( 'capture_instance_name' )  

引数

'capture_instance_name'
キャプチャ インスタンスの名前を指定します。 capture_instance_namesysname です

戻り値の型

binary(10)

解説

キャプチャ インスタンスが存在しない場合、または、キャプチャ インスタンスに関連付けられた変更データにアクセスするための権限が呼び出し元にない場合は、0x00000000000000000000 が返されます。

この関数は、通常、キャプチャ インスタンスに関連付けられている変更データ キャプチャ タイムラインの低エンドポイントを識別するために使用されます。 また、この関数を使用して、変更データを要求する前に、クエリ範囲のエンドポイントがキャプチャ インスタンス タイムライン内にあることを検証することもできます。 変更テーブルでクリーンアップが実行されると、キャプチャ インスタンスの下端が変わるため、こうしたチェックを実行することは重要です。 変更データの要求の間隔が重要な場合は、以前の変更データ要求の高エンドポイントに設定されている低エンドポイントであっても、現在のタイムラインの外部にある可能性があります。

アクセス許可

sysadmin 固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーシップが必要です。 他のすべてのユーザーには、ソース テーブル内のすべてのキャプチャされた列に対する SELECT アクセス許可が必要です。キャプチャ インスタンスのゲーティング ロールが定義されている場合は、そのデータベース ロールのメンバーシップが必要です。

A. 指定したキャプチャ インスタンスの最小 LSN 値を取得する

次の例では、AdventureWorks2022 データベース内のキャプチャ インスタンス HumanResources_Employee の最小 LSN 値を返します。

USE AdventureWorks2-12;  
GO  
SELECT sys.fn_cdc_get_min_lsn ('HumanResources_Employee')AS min_lsn;  
  

B. クエリ範囲の下端を検証する

次の例では、変更データ クエリの下端候補が、キャプチャ インスタンス sys.fn_cdc_get_min_lsn の現在のタイムラインに対して有効かどうかを、HumanResources_Employee によって返された最小 LSN 値を使って検証します。 この例では、キャプチャ インスタンスの以前の高エンドポイント LSN が保存され、変数を設定 @save_to_lsn できるものとします。 この例 @save_to_lsn では、 を 0x000000000000000000 に設定して、エラー処理セクションを強制的に実行します。

USE AdventureWorks2022;  
GO  
DECLARE @min_lsn binary(10), @from_lsn binary(10),@save_to_lsn binary(10), @to_lsn binary(10);  
-- Sets @save_to_lsn to the previous high endpoint saved from the last change data request.  
SET @save_to_lsn = 0x000000000000000000;  
-- Sets the upper endpoint for the query range to the current maximum LSN.  
SET @to_lsn = sys.fn_cdc_get_max_lsn();  
-- Sets the @min_lsn parameter to the current minimum LSN for the capture instance.  
SET @min_lsn = sys.fn_cdc_get_min_lsn ('HumanResources_Employee');  
-- Sets the low endpoint for the query range to the LSN that follows the previous high endpoint.  
SET @from_lsn = sys.fn_cdc_increment_lsn(@save_to_lsn);  
-- Tests to verify the low endpoint is valid for the current capture instance.  
IF (@from_lsn < @min_lsn)  
    BEGIN  
        RAISERROR('Low endpoint of the request interval is invalid.', 16, -1);  
    END  
ELSE  
-- Return the changes occurring within the query range.  
    SELECT * FROM cdc.fn_cdc_get_all_changes_HumanResources_Employee(@from_lsn, @to_lsn, 'all');  
GO  

参照

sys.fn_cdc_get_max_lsn (Transact-SQL)
トランザクション ログ (SQL Server)