次の方法で共有


sys.fn_cdc_get_min_lsn (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sys.fn_cdc_get_min_lsn ( 'capture_instance_name' )

引数

  • 'capture_instance_name'
    キャプチャ インスタンスの名前を指定します。capture_instance_name のデータ型は sysname です。

戻り値の型

binary(10)

説明

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

この関数の主な用途は、キャプチャ インスタンスに関連付けられた変更データ キャプチャ タイムラインの下端を識別することです。変更データを要求する前に、クエリ範囲の両端がキャプチャ インスタンスのタイムライン内にあるかどうかを検証する場合にも、この関数を使用できます。変更テーブルでクリーンアップが実行されると、キャプチャ インスタンスの下端が変わるため、こうしたチェックを実行することは重要です。変更データを要求する間隔が開きすぎると、下端を前回の変更データ要求の上端に設定していたとしても、下端が現在のタイムラインから外れている可能性があります。変更データ キャプチャ タイムラインの詳細については、「変更データ キャプチャの構成」を参照してください。

権限

固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバシップである必要があります。それ以外のすべてのユーザーについては、ソース テーブルのすべてのキャプチャ対象列に対する SELECT 権限が必要です。さらに、キャプチャ インスタンスのゲーティング ロールが定義されている場合は、そのデータベース ロールのメンバシップが必要です。

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

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

USE AdventureWorks;
GO
SELECT sys.fn_cdc_get_min_lsn ('HumanResources_Employee')AS min_lsn;

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

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

USE AdventureWorks;
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