日志读取器复制代理不断重新启动

swa*_*eck 5 replication sql-server-2008 sql-server-2000

我正在重新创建(推送)从 SQL 2000 实例到 SQL 2008 实例的事务复制,为了进行数据库迁移,我必须中断该实例。2008 实例既是分发者又是订阅者。

我大约 1/2 的订阅失败了

找不到存储过程“sp_MSins_dboTABLE”。

(更多信息):

命令尝试:如果@@trancount > 0 rollback tran(事务序列号:0x0002A2B400008D19000100000000,命令ID:20)

错误消息:找不到存储过程“sp_MSins_dboTABLE”。(来源:MSSQLServer,错误号:2812) 获取帮助:找不到存储过程“sp_MSins_dboTABLE”。(来源:MSSQLServer,错误号:2812) 获取帮助:我已经找到了几乎所有我能找到的路径,从运行sp_scriptpublicationcustomprocs(我在distribution数据库中执行结果)到删除订阅,然后是发布,然后重新创建他们。

工作订阅是使用相同的方法创建的。

这是我的创建脚本:

https://gist.github.com/3152160

编辑:

更新 --- 我失败的订阅也引发了以下错误(通过 Profiler):

表已经定义了一个主键。

mrd*_*nny 3

听起来您只需要重新初始化订阅,这将重新创建订阅者上的所有对象。

编辑(由提问者添加):

重新初始化后,如果出现无法找到 CRUD 存储过程的错误,请启动 SQL Profiler 并查找与该过程相关的错误。确保根据复制监视器中的过程名称过滤文本(事实证明,正在执行的命令是;2后面带有 的存储过程)。

然后EXEC sp_scriptpublicationcustomprocs 'PublicationName'在发布者上运行以获取创建过程的脚本。在订阅者数据库上创建该过程,包括在组名称之后尝试运行的组编号(例如[sp_MSins_dboTABLE];2)。这感觉很糟糕,但它会让复制再次健康地运行。