使用Azure Data Factory捕获SQL Server CDC表净变更时遇对象不存在错误
问题解决:CDC净变更函数对象不存在错误(错误208)
可能原因及修复步骤
检查CDC捕获实例命名
先确认dbo.CUST表对应的CDC捕获实例名称是否为dbo_CUST,执行以下查询验证:SELECT capture_instance FROM cdc.change_tables WHERE source_object_id = OBJECT_ID('dbo.CUST');如果捕获实例是自定义名称,需将函数名中的
dbo_CUST替换为实际捕获实例名(函数格式为cdc.fn_cdc_get_net_changes_<捕获实例名>)。确认净变更捕获是否启用
只有启用CDC时指定@supports_net_changes = 1,才会生成fn_cdc_get_net_changes_*函数。执行查询检查:SELECT supports_net_changes FROM cdc.change_tables WHERE source_object_id = OBJECT_ID('dbo.CUST');若返回值为0,需重新启用表的CDC并开启净变更支持:
-- 先禁用现有CDC配置 EXEC sys.sp_cdc_disable_table @source_schema = 'dbo', @source_name = 'CUST', @capture_instance = 'dbo_CUST'; -- 重新启用并指定净变更支持 EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'CUST', @capture_instance = 'dbo_CUST', @supports_net_changes = 1, @role_name = NULL; -- 根据实际权限角色调整验证函数是否存在
直接查询系统视图确认函数是否生成:SELECT name FROM sys.objects WHERE name LIKE 'fn_cdc_get_net_changes_dbo_CUST' AND type = 'FN';若无查询结果,说明函数未生成,按上述步骤重新配置CDC。
检查执行权限
确保执行查询的账号拥有cdc角色权限,或对cdc架构下对象有查询权限:EXEC sp_addrolemember 'cdc', '你的用户名';
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

