次の方法で共有


sys.sp_cdc_cleanup_change_table (Transact-SQL)

適用対象: SQL Server

指定した @low_water_mark 値に基づいて、現在のデータベースの変更テーブルから行を削除します。 このストアド プロシージャは、変更テーブルのクリーンアップ プロセスを直接管理するユーザーに提供されます。 ただし、このプロシージャは、変更テーブルに含まれるデータのすべてのコンシューマーに影響を及ぼすため、使用する際は注意が必要です。

Transact-SQL 構文表記規則

構文

sys.sp_cdc_cleanup_change_table [ @capture_instance = ] 'capture_instance'
    , [ @low_water_mark = ] low_water_mark
    , [ @threshold = ] 'delete threshold'
    , [ @fCleanupFailed = ] 'cleanup failed' OUTPUT
[ ; ]

引数

[ @capture_instance = ] 'capture_instance'

変更テーブルに関連付けられているキャプチャ インスタンスの名前。 @capture_instance は既定 sysnameであり、 NULLすることはできません。

capture_instance は、現在のデータベースに存在するキャプチャ インスタンスに名前を付けなければなりません。

[ @low_water_mark = ] low_water_mark

@capture_instanceの新しい低基準値として使用されるログ シーケンス番号 (LSN)。 @low_water_markbinary(10)で、既定値はありません。

値がNULLされていない場合は、cdc.lsn_time_mapping テーブルの現在のエントリのstart_lsn値として表示する必要があります。 cdc.lsn_time_mapping内の他のエントリが、新しい低基準値で識別されたエントリと同じコミット時間を共有する場合、そのエントリのグループに関連付けられている最小の LSN が低基準値として選択されます。

値が明示的に NULL に設定されている場合、クリーンアップ操作の上限を定義するために、@capture_instanceの現在の@low_water_markが使用されます。

Note

@low_water_mark は LSN しきい値です。 指定された値より小さい LSN 値を持つトランザクションはすべて処理され、該当する値は除外されます。

[ @threshold = ] '削除のしきい値'

クリーンアップ時に 1 つのステートメントを使用して削除できる削除エントリの最大数。 @thresholdbigint で、既定値は 5000 です。

[ @fCleanupFailed = ] 'cleanup failed' OUTPUT

クリーンアップ操作が失敗したかどうかを示す OUTPUT パラメーター。 @fCleanupFailedbit で、既定値は 0 です。

結果セット

省略可能な @fCleanupFailed OUTPUT パラメーターを使用しない限り、なし。

リターン コードの値

0 (成功) または 1 (失敗)。

-- Declaring a variable and Setting to zero first
SELECT @cleanup_failed_bit = 0;

-- Execute cleanup and obtain output bit
EXEC @retcode = sys.sp_cdc_cleanup_change_table
    @capture_instance = '<CaptureInstance>',
    @low_water_mark = @LSN, --== LSN to be used for new low watermark for capture instance
    @threshold = 1,
    @fCleanupFailed = @cleanup_failed_bit OUTPUT;

-- Leverage @cleanup_failed_bit output to check the status.
SELECT IIF(@cleanup_failed_bit > 0, 'CLEANUP FAILURE', 'CLEANUP SUCCESS');
CLEANUP SUCCESS

解説

sys.sp_cdc_cleanup_change_table によって次の操作が実行されます。

  1. @low_water_mark パラメーターがNULLの場合、@capture_instancestart_lsn値は変更されません。 ただし、現在の低基準値がプロシージャの @low_water_mark パラメーターを使用して指定された低基準値より大きい場合は、 Error 22957 がスローされます。 エラー 22957 のエラー メッセージは LSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', is not within the Change Data Capture timeline [%s, %s].

    Note

    新しい低レベルのウォーターマークは、ストアド プロシージャ呼び出しで指定されている低レベルのウォーターマークと異なる場合があります。 cdc.lsn_time_mapping テーブル内の他のエントリが同じコミット時間を共有する場合、エントリのグループで表される最小のstart_lsnが調整された低基準値として選択されます。 @low_water_markパラメーターがNULLされている場合、または現在の低基準値が新しい低基準値より大きい場合、キャプチャ インスタンスのstart_lsn値は変更されません。

  2. __$start_lsn値が低基準値より小さいテーブル エントリを変更すると、削除されます。 削除のしきい値は、1 つのトランザクションで削除された行の数を制限するために使用されます。 エントリを正常に削除できなかったことが報告されますが、呼び出しに基づいて行われた可能性のある低基準値のキャプチャ インスタンスへの変更には影響しません。

  3. キャプチャ インスタンスのstart_lsnを更新した後、変更テーブル のデータを削除せずにsys.sp_cdc_cleanup_change_tableストアド プロシージャがタイムアウトした場合、ストアド プロシージャの次回の実行前にsys.sp_cdc_change_jobストアド プロシージャを使用してデータ保持値を増やすsys.sp_cdc_cleanup_change_table、指定された保持期間のデータは保持されません。 cdc.change_tablesstart_lsn値は、新しい低基準値として扱う必要があります。 sys.sp_cdc_cleanup_change_table ストアド プロシージャでは、新しく指定したデータ保有期間に一致するstart_lsn値は設定されません。 プロシージャは常に、低基準値に基づいてクリーンアップを実行します。 cdc.change_tablesstart_lsn値以上の@low_water_mark パラメーターの値を指定すると、エラー 22957 が生成されるのを回避できます。

  4. sys.sp_cdc_cleanup_change_tableを使用してクリーンアップ テーブル プロセスを管理し、sys.sp_cdc_cleanup_change_tableが呼び出されたときに CDC スキャンと CDC クリーンアップの間でデッドロックが発生した場合、Error 22852 は重大度 10 (情報メッセージ) でログに記録されます。 エラー 22852 のメッセージは次のとおりです。

    Could not delete change table entries made obsolete by a change in one or more low water marks for capture instances of database <DatabaseName>. The failure occurred when executing the command <CommandName>. The error returned was <ErrorInfo>. Use the action and error to determine the cause of the failure and resubmit the request.
    

次の状況では、 sys.sp_cdc_cleanup_change_table を使用します。

  • クリーンアップ エージェント ジョブは、削除エラーを報告します。

    管理者は、このストアド プロシージャを明示的に実行して、失敗した操作を再試行できます。 特定のキャプチャ インスタンスのクリーンアップを再試行するには、sys.sp_cdc_cleanup_change_tableを実行し、@low_water_mark パラメーターのNULLを指定します。

  • クリーンアップ エージェント ジョブで使用される単純な保持ベースのポリシーでは不十分です。

    このストアド プロシージャは 1 つのキャプチャ インスタンスのクリーンアップを実行するため、個々のキャプチャ インスタンスに対してクリーンアップの規則を調整するカスタム クリーンアップ戦略を構築するために使用できます。

アクセス許可

db_owner 固定データベース ロール内でメンバーシップが必要です。