sys.sp_cdc_cleanup_change_table (Transact-SQL)

根据指定的 low_water_mark 值从当前数据库的更改表中删除行。 此存储过程是为需要直接管理更改表清除进程的用户提供的。 但是,由于此过程会影响更改表中数据的所有使用者,因而应多加小心。

适用范围:SQL Server(SQL Server 2008 到当前版本)。

主题链接图标 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),无默认值。

    如果该值为非空,则必须显示为 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 表中的其他条目共享相同的提交时间,则在这组条目中表示的最小 start_lsn 将被选为调整后的低水印。如果 @low_water_mark 参数为 NULL 或者当前低水印大于新的低水印,则捕获实例的 start_lsn 值保持不变。

  2. 然后删除其 __$start_lsn 值小于低水印的更改表条目。 删除阈值用于限制在单个事务中删除的行数。 如果未成功删除条目,将进行报告,但不影响可能已基于此调用而对捕获实例低水印进行的任何更改。

在以下情况下使用 sys.sp_cdc_cleanup_change_table:

  • 清理代理作业报告删除失败。

    管理员可以运行此存储过程以显式重试失败的操作。 若要对给定的捕获实例重试清理操作,请执行 sys.sp_cdc_cleanup_change_table,并将 @low\_water\_mark 参数指定为 NULL。

  • 由清理代理作业使用的基于保留期的简单策略不能满足要求。

    因为此存储过程对单个捕获实例执行清理,因此可以用它生成自定义清理策略,以便根据各个具体的捕获实例调整清理规则。

权限

要求具有 db_owner 固定数据库角色的成员身份。

请参阅

参考

cdc.fn_cdc_get_all_changes_<捕获实例> (Transact-SQL)

sys.fn_cdc_get_min_lsn (Transact-SQL)

sys.fn_cdc_increment_lsn (Transact-SQL)