小编Bra*_*ams的帖子

sp_MScheckIsPubOfSub 存储过程的问题

我们设置了 SQL Server 2008 R2 合并复制。

我们有 20 多个推送订阅。

在同步过程中,我偶尔会收到以下错误消息:

Error messages: The merge process could not set the status of the subscription correctly.
(Source: MSSQL_REPL, Error number: MSSQL_REPL-2147200963)
Could not find stored procedure 'dbo.sp_MScheckIsPubOfSub'.
(Source: MSSQLServer, Error number: 2812)
Run Code Online (Sandbox Code Playgroud)

我找到了上述 SP 的代码并针对订户数据库运行它,一切正常。

我的问题是:为什么这个存储过程会时不时地被删除?我该如何解决这个问题?

replication sql-server-2008-r2 merge-replication

6
推荐指数
1
解决办法
1274
查看次数

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

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

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

我们希望在我们的每台服务器上都有很多数据库,因此,为了模拟这种情况,我在发布者上恢复了 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 开始。

谢谢!

replication sql-server sql-server-2012 transactional-replication

6
推荐指数
1
解决办法
996
查看次数

使用 SQL 事务复制,更改用户对表的权限是否会触发新快照?

我希望在 SQL Server 2012 事务复制场景方面获得一些帮助 - 或者只是我对 SQL Server 中存储权限的理解。如果我在事务复制配置中更改发布者对特定表的用户权限(例如授予 SELECT 或 INSERT),是否会更改架构,以便订阅者需要从新快照中提取?

我担心这种更改可能会造成停机时间,即在创建新快照时订阅者实际上处于离线状态。理想情况下,我可以只授予特定用户对发布者或订阅者上复制文章的新权限,而无需重置。我不关心更新的权限从发布者复制到订阅者(事实上,理想情况下他们不会)。提前致谢!

replication permissions sql-server-2012 transactional-replication

4
推荐指数
1
解决办法
918
查看次数