共用方式為


sys.sp_cdc_cleanup_change_table (Transact-SQL)

根據指定的 low_water_mark 值,從目前資料庫的變更資料表中移除資料列。 這個預存程序會提供給想要直接管理變更資料表清除程序的使用者。 不過,請謹慎使用,因為此程序會影響變更資料表中資料的所有取用者。

主題連結圖示 Transact-SQL 語法慣例

語法

sys.sp_cdc_cleanup_change_table 
  [ @capture_instance = ] 'capture_instance', 
  [ @low_water_mark = ] low_water_mark ,
  [ @threshold = ]'delete threshold'

引數

  • [ @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 watermark 就會用來定義清除作業的上限。

  • [ @threshold= ] 'delete threshold'
    是可以使用單一清除陳述式來刪除的最大刪除項目數。 delete_threshold 是 bigint,預設值是 5000。

傳回碼值

0 (成功) 或 1 (失敗)

結果集

備註

sys.sp_cdc_cleanup_change_table 會執行下列作業:

  1. 如果 @low\_water\_mark 參數不是 NULL,它就會將 capture instance 的 start_lsn 值設定為新的 low watermark。

    [!附註]

    新下限標準可能不是預存程序呼叫中指定的下限標準。 如果 cdc.lsn_time_mapping 資料表中的其他項目共用相同的認可時間,系統就會選取在項目群組中表示的最小 startstart_lsn 做為已調整的下限標準。 如果 @low_water_mark 參數為 NULL,或者目前的下限標準大於新的下限標準,擷取執行個體的 start_lsn 值就會維持不變。

  2. 然後,系統會刪除 __$start_lsn 值小於下限標準的變更資料表項目。 此 delete threshold 是用來限制在單一交易中刪除的資料列數目。 雖然系統會回報無法成功刪除項目,但是不會影響對擷取執行個體下限標準所做的任何變更,因為這些變更可能已經根據呼叫完成了。

在下列情況下使用 sys.sp_cdc_cleanup_change_table:

  • 清除代理程式作業回報刪除失敗。

    管理員可以明確執行這個預存程序來重試失敗的作業。 若要針對給定的擷取執行個體重試清除作業,請執行 sys.sp_cdc_cleanup_change_table,並且為 @low\_water\_mark 參數指定 NULL。

  • 清除代理程式作業所使用的簡單保留性原則不足。

    因為這個預存程序會針對單一擷取執行個體執行清除作業,所以它可用來建立自訂清除策略,以便為個別擷取執行個體修改清除規則。

權限

需要 db_owner 固定資料庫角色中的成員資格。

請參閱

參考

cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

sys.fn_cdc_get_min_lsn (Transact-SQL)

sys.fn_cdc_increment_lsn (Transact-SQL)