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),无默认值。

    如果该值为非空,则必须显示为 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 固定数据库角色的成员身份。