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



我正在尝试将存储过程项目(复制执行)添加到现有发布中,添加它们后立即日志读取器代理失败,并显示消息"无法在{分发服务器}执行sp_MSAdd_ReplCmds",然后是另一条错误消息,显示"将 nvarchar 值转换为 int 时出错"。 在故障排除时,我得出以下发现:

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

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

    重新

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

我们解决了这个问题。 我把它贴在这里,以防其他人也遇到这种情况。 吸取的教训是不要信任从现有复制对象创建的脚本。 为了在不同的分发数据库中创建新的存储 proc 执行文章,我从现有文章编写脚本,更改相关参数并执行它。 我们的 DBA 删除了生成的脚本中包含的四个参数,用于添加文章 - @destination_table、@pre_creation_cmd、@creation_script 和 @description。 它们似乎是那里的默认值,但将它们完全排除在外可以防止 OP 中讨论的日志读取器错误。 不确定哪一个实际上是解决方案 - 我们删除了所有 4 个,然后它起作用了。 过去,在从无法准确反映对象本身的现有复制对象生成脚本时,我遇到了问题,因此这是警惕从现有复制对象编写脚本的另一个原因。

最新更新