sys.sp_cdc_クリーンup_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 インスタンスの新しい低基準値として使用されるログ シーケンス番号 (LSN)。 @low_water_markは binary(10) で、既定値はありません。

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

値が明示的に NULL に設定されている場合、@capture インスタンスの現在の@lowウォーターマークを使用して、クリーンup 操作の上限が定義されます。

[ @threshold = ] 'delete threshold'

クリーンup で 1 つのステートメントを使用して削除できる削除エントリの最大数。 @thresholdは bigint で、既定値は 5000 です。

[ @fCleanupFailed = ] 'クリーンup failed' OUTPUT

クリーンup 操作が失敗したかどうかを示す OUTPUT パラメーター。 @fCleanupFailedはビットで、既定値は 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 インスタンスstart_lsn値は変更されません。 ただし、現在の低基準値がプロシージャの@low_water_markパラメーターを使用して指定された低基準値より大きい場合は、エラー 22957 がスローされます。 エラー 22957 のエラー メッセージは LSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', isn't 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. キャプチャ インスタンスのsys.sp_cdc_cleanup_change_tablestart_lsnを更新した後、変更テーブル データを削除せずにストアド プロシージャがタイムアウトした場合、ストアド プロシージャの次回の実行sys.sp_cdc_cleanup_change_table前にsys.sp_cdc_change_jobストアド プロシージャを使用してデータ保持値を増やすと、指定した保持期間のデータは保持されません。 cdc.change_tablesstart_lsn値は、新しい低基準値として扱う必要があります。 ストアド プロシージャでは sys.sp_cdc_cleanup_change_table 、新しく指定したデータ保有期間に一致するstart_lsn値は設定されません。 プロシージャは常に、低基準値に基づいてクリーンアップを実行します。 cdc.change_tablesの値以上の@low_water_mark パラメーターの値をstart_lsn指定すると、エラー 22957 が生成されるのを回避できます。

  4. クリーンup テーブル プロセスの管理に使用sys.sp_cdc_cleanup_change_tableし、CDC スキャンと CDC クリーンup の間でデッドロックが発生したsys.sp_cdc_cleanup_change_table場合、エラー 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 を指定します。

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

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

アクセス許可

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