我在sql server事务复制中面临问题而无法获得它的根本原因。首先,让我告诉你,我不是DBA,所以我可能对少数DBA概念感到愚蠢。 我是.Net开发人员,我负责设置复制。
我在Headoffice有一个数据库,并将几个表复制到零售商店的另一台服务器。 第一次,我使用选定的文章配置了复制。 复制是连续的。它运行正常,但是一个星期天晚上,它失败了,错误“进程无法执行'sp_replcmds'”。 在谷歌上花了一些时间后,我找不到任何解决方案。所以,我重建了复制,但这次复制已安排(每15分钟),我也将其配置为PULL而不是PUSH。它开始了,但是下周日晚上又崩溃了。 因此,我分析了在星期天晚上,我已经在数据库上配置了重新索引作业,并且由于恢复模型已满,它生成了一个非常大的TLOG,并且Repolication代理无法解析它。 现在,第三次,我再次重建复制,这次我每隔15分钟安排一次复制,但从早上8点到晚上11点半,因为在11:30之后,没有商店做任何交易。此外,对于Reindexing Job,我再添加了2个步骤。在重新索引之前,我正在将恢复模型更改为简单,然后重新编制索引,之后我将恢复模型更改为完全。无论重新索引步骤的结果如何,我都将恢复更改为Full。 这个设置工作正常,并且正常工作了大约2个月。
现在,在2个月之后,又一个星期天晚上它失败了,原因相同(“进程无法执行'sp_replcmds'”)。实际上,我已经安排了备份工作,我每天都进行全备份,每15分钟进行一次日志备份,没有差异备份。 之后,发现我没有配置差异备份,我也配置相同(每6小时)。但是,在配置差异备份后,在星期天晚上复制失败了。
现在,任何人,请帮我完成我的方案的推荐设置。 我的设置是 SQL Server - Windows Server 2008 R2上的SQL Server 2008 R2 Enterprise 分销商和发布者在同一台机器上。 Subsriber位于Retail Store服务器上。
答案 0 :(得分:0)
sp_replcmds由日志读取器代理针对已发布的数据库运行,以获取已复制的命令。根据{{3}},需要至少使用db_owner来运行该命令。确保正在运行的任何帐户,日志阅读器代理在已发布的数据库中至少包含db_owner。