手动运行 sys.scan_job 后,CDC 捕获作业未运行

问题描述 投票:0回答:1

我有一个启用 CDC 的表用于复制。我的一个存储过程针对特定情况手动运行此

exec sys.sp_cdc_scan
(我的存储过程由我创建的 DDL 触发器调用)。但手动运行存储过程后,我发现 CDC 的自动捕获作业不起作用。每次我都必须手动运行
sys.sp_cdc_scan
才能将 DML 更改捕获到我的捕获实例中。我不知道为什么会发生这种情况。任何线索都会有帮助。 我正在运行 Azure SQL 数据库。

运行

sys.sp_cdc_scan
的原因是为了确保我在执行任何DML操作时立即在捕获实例中获得DML操作,简单来说

begin tran
insert into t1(col1) values(1);
select * from cdc.dbo_t1_CT;
commit tran

在上述情况下,我不会在捕获实例中获得任何记录,但是如果我设法像这样编写我的交易

begin tran
insert into t1(col1) values(1);
exec sys.sp_cdc_scan;
select * from cdc.dbo_t1_CT;
commit tran

我一进行DML操作就得到了capture实例中的记录,这正是我所需要的。

sql-server azure-sql-database cdc
1个回答
0
投票

好吧,问题是每当会话手动运行

sys.sp_cdc_scan
时,它都需要断开与服务器的连接,以便
sys.sp_cdc_scan
的自动调度可以工作。当我重新连接到我的 sqlserver 实例时,问题自行解决了。

SQLServer 小CDC小技巧

当我们遇到与CDC相关的错误时,我们应该首先查询这个表

sys.dm_cdc_errors
。它为我们提供了有助于调试问题的重要信息。借助此表本身,我能够找到问题的根本原因。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.