如何解决事务复制中订阅端缺失引用对象导致的视图复制失败问题
SQL Server事务复制创建视图错误
错误提示
无法复制视图或函数,因为订阅端不存在引用的对象或列。
执行的命令
CREATE VIEW [dbo].[VIEW_INVOICE_CODE_LIST_4368_001_20210630_125653] AS SELECT DISTINCT INVO_CODE FROM TEMP_VIEW_SALES_REPORT_4368_001_20210630_125651
事务信息
(事务序列号:0x001F4D4700001538004500000000,命令ID:10161)
详细错误消息
无法复制视图或函数,因为订阅端不存在引用的对象或列。(来源:MSSQL_REPL,错误编号:MSSQL_REPL20164)
无效的对象名称'TEMP_VIEW_SALES_REPORT_4368_001_20210630_125651'。(来源:MSSQLServer,错误编号:208)
无法复制视图或函数,因为订阅端不存在引用的对象或列。(来源:MSSQL_REPL,错误编号:MSSQL_REPL2759)
解决步骤
1. 确认订阅端的依赖对象状态
在订阅端数据库执行查询,验证缺失对象是否存在:
SELECT * FROM sys.objects WHERE name = 'TEMP_VIEW_SALES_REPORT_4368_001_20210630_125651' AND type IN ('V', 'U')
无结果则说明该对象未同步到订阅端。
2. 同步缺失的依赖对象
- 若该对象是表:检查它是否在发布列表中。未发布的话,添加到发布内容后,重新初始化订阅或执行快照同步,确保表先同步到订阅端。
- 若该对象是视图:确认是否在发布范围内。未发布的话,先发布该视图并同步到订阅端,再重新运行失败的视图创建命令。
3. 手动修复订阅端(应急方案)
无法立即重新初始化时,可手动在订阅端创建与发布端结构完全一致的TEMP_VIEW_SALES_REPORT_4368_001_20210630_125651对象,之后重启复制代理,让失败的命令继续执行。
4. 检查事务执行顺序
事务复制按日志顺序执行命令,若依赖对象的创建命令晚于当前视图创建命令,会导致依赖缺失。需检查发布端事务日志,确认依赖对象的创建操作是否在视图创建之前,顺序颠倒的话要调整发布逻辑,确保依赖对象先同步。
5. 验证复制配置
检查发布的「项目属性」:
- 确认「复制对象级权限」已启用(若有需要)。
- 对于视图,核对「绑定到架构」选项是否符合业务需求,避免架构变更引发依赖失效。
内容的提问来源于stack exchange,提问作者max immanuel
相关产品推荐
相关产品推荐

