sys.sp_cdc_add_job (Transact-SQL)

适用范围:SQL Server

在当前数据库中创建变更数据捕获清理或捕获作业。

Transact-SQL 语法约定

语法

sys.sp_cdc_add_job [ @job_type = ] N'job_type'
    [ , [ @start_job = ] start_job ]
    [ , [ @maxtrans = ] max_trans ]
    [ , [ @maxscans = ] max_scans ]
    [ , [ @continuous = ] continuous ]
    [ , [ @pollinginterval = ] polling_interval ]
    [ , [ @retention ] = retention ]
    [ , [ @threshold ] = 'delete_threshold' ]
[ ; ]

参数

[ @job_type = ] N'job_type'

要添加的作业类型。 @job_typenvarchar(20), 不能 NULL。 有效输入为 capturecleanup

[ @start_job = ] start_job

指示在添加作业后是否应立即启动的标志。 @start_job是,默认值为 1.

[ @maxtrans ] = max_trans

每个扫描循环中要处理的最大事务数。 @maxtrans默认值500为 int。 如果指定值,则该值必须是一个正整数。

@maxtrans仅适用于捕获作业。

[ @maxscans ] = max_scans

为了从日志中提取所有行而要执行的最大扫描循环次数。 @maxscans默认为 int10

@max_scan仅适用于捕获作业。

[ @continuous ] = 连续

指示捕获作业是连续运行(1还是只运行一次)。0 @continuous是,默认值为 1.

  • 当@continuous1sys.sp_cdc_scan作业将扫描日志并处理多达 (@maxtrans * @maxscans) 个事务。 然后,它会等待@pollinginterval中指定的秒数,然后再开始下一次日志扫描。

  • @continuous0,作业 sp_cdc_scan 最多 执行@maxscans 日志扫描,在每次扫描期间最多处理 @maxtrans 事务,然后退出。

@continuous仅适用于捕获作业。

[ @pollinginterval ] = polling_interval

日志扫描周期之间的秒数。 @pollinginterval为 bigint,默认值为 5.

@pollinginterval仅在@continuous设置为1时对捕获作业有效。 如果指定,该值必须大于或等于 0 且小于 24 小时(最长为 86399 秒)。 如果指定了值 0 ,则日志扫描之间没有等待。

[ @retention ] = 保留期

更改数据行要在更改表中保留的分钟数。 @retention默认4320 (72 小时)。 最大值为 52494800 (100 年)。 如果指定值,则该值必须是一个正整数。

@retention仅适用于清理作业。

[ @threshold = ] 'delete_threshold'

清理时可以使用单个语句删除的最大删除条目数。 @threshold为 bigint,默认值为 5000.

返回代码值

0(成功)或 1(失败)。

结果集

无。

注解

当对数据库中的第一个表启用了变更数据捕获时,会使用默认值创建一个清理作业。 当对数据库中的第一个表启用了变更数据捕获并且该数据库不存在事务发布时,会使用默认值创建一个捕获作业。 如果存在事务发布,则使用事务日志读取器来驱动捕获机制,并且不需要或允许单独的捕获作业。

因为清理和捕获作业是默认创建的,所以仅当显式删除某个作业并且必须重新创建它时才需要使用此存储过程。

作业 cdc.<database_name>_cleanup 的名称或 cdc.<database_name>_capture当前 <database_name> 数据库的名称。 如果已存在具有相同名称的作业,则名称将追加一个句点(.)后跟唯一标识符,例如: cdc.AdventureWorks_capture.A1ACBDED-13FC-428C-8302-10100EF74F52

若要查看清理或捕获作业的当前配置,请使用 sys.sp_cdc_help_jobs。 若要更改作业的配置,请使用 sys.sp_cdc_change_job

权限

要求具有 db_owner 固定数据库角色中的成员资格。

示例

A. 创建捕获作业

下例创建一个捕获作业。 本例假定已显式删除了现有清理作业并且必须重新创建它。 创建该作业时使用了默认值。

USE AdventureWorks2022;
GO
EXEC sys.sp_cdc_add_job @job_type = N'capture';
GO

B. 创建清理作业

以下示例在 AdventureWorks2022 数据库中创建清理作业。 参数@start_job设置为0,@retention设置为 5760 分钟(96 小时)。 本例假定已显式删除了现有清理作业并且必须重新创建它。

USE AdventureWorks2022;
GO

EXEC sys.sp_cdc_add_job
    @job_type = N'cleanup',
    @start_job = 0,
    @retention = 5760;