一次在多个表上启用死锁CD

时间:2019-06-04 16:46:17

标签: sql sql-server

我们有一个CICD流程,它可以并行生成作业,这些作业创建具有相同表集的不同数据库,并使用如下顺序语句在每个表上启用cdc:

EXEC sys.sp_cdc_enable_table  @source_schema = N'dbo', @source_name = N'table1', @role_name = NULL;
EXEC sys.sp_cdc_enable_table  @source_schema = N'dbo', @source_name = N'table2', @role_name = NULL;
EXEC sys.sp_cdc_enable_table  @source_schema = N'dbo', @source_name = N'table3', @role_name = NULL;

.. etc

当一次运行多个作业时,它们通常会抱怨以下错误:

  

无法更新指示表[dbo]的元数据。[table1]为   为更改数据捕获启用。执行时发生故障   命令'[sys]。[sp_cdc_add_job] @job_type = N'capture''。错误   返回的是22836:“无法更新数据库的元数据   DatabaseForJob1指示更改数据捕获作业具有   已添加。执行命令时发生故障   'msdb.dbo.sp_add_job'。返回的错误为1205:“交易   (进程ID 292)被另一个进程锁定在锁定资源上   并被选为僵局受害者。重新运行事务。   使用操作和错误来确定失败的原因并   重新提交请求。”。使用操作和错误来确定   导致失败的原因,然后重新提交请求。

这似乎表明您不能同时在两个不同数据库中的同名表上启用CDC。真的吗?如果不是,那么可能是什么导致此问题,以及如何解决?仅当一次运行多个以上的作业并且我确实在event_file中看到死锁报告时,才会发生这种情况。

0 个答案:

没有答案