次の方法で共有


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)