本来,我们内网的一个数据库群集和外网的一个数据库群集是通过网闸联通的,并分别在两个数据库群集上做了复制用来同步数据,虽然有时会出现一些小问题,但总体上工作还算正常。这两天,分别给内外网数据库群集打了SP3补丁后,奇怪的问题发生了,无论在哪个数据库群集上新建发布,在另外一个数据库群集上订阅都会有问题,用复制监视器查看详细情况,报如下的错误消息:合并进程无法将快照传递给订阅服务器。如果使用 Web 同步,则合并进程可能还无法创建或写入消息文件。进行故障排除时,请使用详细的历史日志记录来重新启动同步,并指定要写入的输出文件。(源: MSSQL_REPL,错误号: MSSQL_REPL-2147201001) 获取帮助: http://help/MSSQL_REPL-2147201001
CREATE UNIQUE INDEX 语句终止,因为发现对象名称 'dbo.MSmerge_genhistory_27e6bd8f0dd44e0b900be709cb548dfd' 和索引名称 'c2MSmerge_genhistory_27e6bd8f0dd44e0b900be709cb548dfd' 有重复的键。重复的键值为 (1)。(源: MSSQLServer,错误号: 1505) 获取帮助:http://help/1505
在网上搜索了半天,解决这方面问题的方法太少了,连MSDN和Technet上介绍的也不多,最后没有办法只好求助微软专家。专家让我们使用SQL Server Profiler工具建一个跟踪,将同步时报的错误记录下来,发给他们进行分析,最后专家指出原因可能是打了SP3补丁后,在一些系统表中记录的一些复制信息可能被修改了,新建订阅时又做了一次重复插入,导致冲突所致,专家提供了一些SQL语句,删除了一些冗余信息后就好了,这些系统表有MSmerge_genhistory和sysmergepublications,有兴趣的朋友可以研究一下。