事务复制日志​​读取器错误无法执行sp_MSAdd_ReplCmds

时间:2016-03-21 01:07:05

标签: sql-server

我正在尝试将存储过程文章(复制执行)添加到现有发布中,并在添加后立即读取日志读取器代理失败,并显示消息“无法在{分发服务器上执行sp_MSAdd_ReplCmds}”然后另一条错误消息“错误转换nvarchar值'。' to int。在进行故障排除时,我做了以下发现:

  1. 在具有相同文章和类似订阅的其他分发服务器上创建新发布是成功的。
  2. 在具有类似订阅的另一个分发数据库中的同一分发服务器上创建新发布是成功的。
  3. 在我添加单个订阅之前,在同一个分发服务器和SAME分发数据库上创建新发布是正常的,然后日志阅读器失败并出现相同的错误
  4. 如果删除有问题的文章,日志阅读器错误就会消失,但在一种情况下,错误仍然存​​在,提示重建出版物
  5. 我已经看到网络上讨论的其他错误涉及sp_MSAdd_ReplCmds,但后续的错误消息通常会导致权限错误,可以通过使代理所有者和其他帐户参与复制sysadmin来解决。就我而言,所有涉及的帐户都是系统管理员。我无法找到任何涉及这种奇怪转换错误的内容。

    分发服务器是MS SQL Server 2012,虽然我们认为在升级到SQL Server 2012之后新创建了分发数据库,​​但可能是从SQL 2008迁移数据库。

    重新配置或重新初始化此服务器上涉及的所有出版物以添加这些文章将是一项漫长的任务,我试图避免。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们解决了这个问题。我在这里发布它,以防其他人也遇到这种情况。学到的教训不是信任从现有复制对象创建的脚本。为了在不同的分发db中创建新的存储过程执行文章,我从现有文章编写脚本,更改了相关参数并执行了它。我们的DBA删除了生成的脚本中包含的四个参数,用于添加文章 - @destination_table,@ pre_creation_cmd,@ create_script和@description。它们看起来像是默认值,但完全阻止它们会阻止OP中讨论的日志读取器错误。不确定哪一个实际上是解决方案 - 我们删除了所有4然后它工作。我在过去从现有的复制对象生成脚本时遇到了问题,这些脚本没有准确地反映对象本身,因此这是另一个警惕从现有复制对象编写脚本的原因。