sys.sp_cdc_cleanup_change_table (Transact-SQL)
適用対象: SQL Server
指定した @low_water_mark 値に基づいて、現在のデータベースの変更テーブルから行を削除します。 このストアド プロシージャは、変更テーブルのクリーンアップ プロセスを直接管理するユーザーに提供されます。 ただし、このプロシージャは、変更テーブルに含まれるデータのすべてのコンシューマーに影響を及ぼすため、使用する際は注意が必要です。
構文
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_mark は binary(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 つのステートメントを使用して削除できる削除エントリの最大数。 @threshold は bigint で、既定値は 5000 です。
[ @fCleanupFailed = ] 'cleanup failed' OUTPUT
クリーンアップ操作が失敗したかどうかを示す OUTPUT パラメーター。 @fCleanupFailed は bit で、既定値は 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
によって次の操作が実行されます。
@low_water_mark パラメーターが
NULL
の場合、@capture_instanceのstart_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
値は変更されません。__$start_lsn
値が低基準値より小さいテーブル エントリを変更すると、削除されます。 削除のしきい値は、1 つのトランザクションで削除された行の数を制限するために使用されます。 エントリを正常に削除できなかったことが報告されますが、呼び出しに基づいて行われた可能性のある低基準値のキャプチャ インスタンスへの変更には影響しません。キャプチャ インスタンスの
start_lsn
を更新した後、変更テーブル のデータを削除せずにsys.sp_cdc_cleanup_change_table
ストアド プロシージャがタイムアウトした場合、ストアド プロシージャの次回の実行前にsys.sp_cdc_change_jobストアド プロシージャを使用してデータ保持値を増やすsys.sp_cdc_cleanup_change_table
、指定された保持期間のデータは保持されません。 cdc.change_tablesのstart_lsn
値は、新しい低基準値として扱う必要があります。sys.sp_cdc_cleanup_change_table
ストアド プロシージャでは、新しく指定したデータ保有期間に一致するstart_lsn
値は設定されません。 プロシージャは常に、低基準値に基づいてクリーンアップを実行します。 cdc.change_tablesのstart_lsn
値以上の@low_water_mark パラメーターの値を指定すると、エラー 22957 が生成されるのを回避できます。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 固定データベース ロール内でメンバーシップが必要です。