事务复制:可以创建 52 个发布,但创建第 53 个会导致问题

SQL*_*Guy 6 replication sql-server sql-server-2012 transactional-replication

我提前为一篇长篇文章道歉,但我真的想确保在向社区寻求帮助之前我做了尽职调查,所以就这样了。

我正在研究概念证明,目的是使用事务复制来维护我们数据库的“报告”副本。该设置将包括一个“发布者”服务器和一个单独的“订阅者”服务器。复制将是一个“拉”事务复制,分发服务器运行在订阅服务器上。再次:发布者 => 拉取 =>(分发者 + 订阅者)

我们希望在我们的每台服务器上都有很多数据库,因此,为了模拟这种情况,我在发布者上恢复了 100 个数据库(每个大约 1 GB)。所有数据库都是相同的。

我编写了一个脚本,它使我能够以自动方式设置复制(因为显然我不想手动进行数十次)。该脚本执行以下步骤:

  1. 为数据库启用复制(如果尚未启用):

  2. 为数据库创建日志读取器代理

  3. 为数据库创建发布(如果不存在)

  4. 为数据库创建快照代理(先不要运行它)

  5. 将文章添加到出版物

  6. 运行快照代理作业(并等待它完成)

  7. 创建订阅数据库(如果不存在)

  8. 在订阅数据库中添加订阅(如果不存在)

  9. 创建分销代理

我能够成功地为大约 52 个数据库设置复制,并且一切运行良好. 当我到达数据库#53 时,事情开始出错。快照创建成功,但日志读取器和分发代理失败。转到数据库#54 现在一切都完全坏了。不会创建快照并且没有任何代理正在运行。我仔细查看了复制监视器和 SQL 代理作业以查找错误消息,但没有发现任何有用的信息。复制监视器只是说:“代理关闭。有关更多信息,请参阅作业'……'的 SQL Server 代理作业历史记录”。在详细信息部分,它说:“复制代理遇到故障。有关详细信息,请参阅上一个作业步骤历史消息或复制监视器”。接下来,我转到 SQL 代理作业并查看输出。在作业历史记录中,失败的步骤显示:“消息:复制代理遇到故障。有关更多信息,请参阅上一个作业步骤历史消息或复制监视器”。反过来,上一步根本没有任何信息。只有“消息”这个词,后面什么也没有。我还查看了 Windows 应用程序日志,以查找任何错误, 但它只是重复我在复制监视器和代理作业历史记录中看到的相同消息。我在代理命令中添加了“–output”参数(在 SQL 代理作业步骤属性中),希望输出文件能为我提供更多信息,但没有创建输出文件,这让我相信代理甚至没有启动。只是“消息”这个词,之后什么都没有。我还查看了 Windows 应用程序日志以查找任何错误,但它只是重复了我在复制监视器和代理作业历史记录中看到的相同消息。我在代理命令中添加了“–output”参数(在 SQL 代理作业步骤属性中),希望输出文件能为我提供更多信息,但没有创建输出文件,这让我相信代理没有甚至开始。只是“消息”这个词,之后什么都没有。我还查看了 windows 应用程序日志以查找任何错误,但它只是重复了我在复制监视器和代理作业历史记录中看到的相同消息。我在代理命令中添加了“–output”参数(在 SQL 代理作业步骤属性中),希望输出文件能为我提供更多信息,但没有创建输出文件,这让我相信代理没有甚至开始。

我在想我可能已经达到了一些硬件限制,所以我检查了磁盘空间并且有很多可用空间。我还检查了 RAM,它甚至没有使用 50%。

最后,真正让我受益的是我能够从命令行手动运行所有代理。例如,我可以从 SQL 代理快照作业复制粘贴参数,并使用这些参数从命令行运行 snapshot.exe - 快照已成功创建。logreader 和分发代理也是如此。

我在这里完全感到困惑,并感谢任何指向正确方向的指示。

最后一点(也许是唯一的一线希望):这个问题是完全可以重现的。我可以成功设置我的 50 多个订阅,然后问题将始终围绕订阅号 52-53 开始。

谢谢!

Bra*_*ams 5

我相信您遇到了此处 ( support.microsoft.com/kb/949296 ) 和此处 ( support.microsoft.com/kb/824422 )描述的桌面堆问题。