我们有一个合并出版物,它在很长一段时间(几年)内大部分时间都可以正常工作。最近添加了一篇文章,我们被告知快照已过期,因此我们重新生成了它。然后我们在初始化期间收到错误消息,并在详细的错误日志中发现了这个问题:
消息 1934,级别 16,状态 1,过程 DDLTrigger_Index,第 19 行插入失败,因为以下 SET 选项的设置不正确:“ANSI_PADDING”。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或查询通知和/或 xml 数据类型方法。
...快进到现在。在实验中,我们发现是的,可以在发布者上创建合并发布并在我们的订阅者服务器上订阅,但前提是使用不同的数据库。通过这个只是为了排除权限/等,并确定问题确实是订阅者数据库。
因此,从受影响的数据库中删除复制以清除任何隐藏的元数据混乱似乎是合乎逻辑的:
sp_removedbreplication @dbname = 'sickDB' @type = 'all'
到目前为止,一切都很好。但是现在,我得到了完全相同的错误,但在此过程中要早得多。具体来说,执行时:
/****** Begin: Script to be run at Subscriber ******/
use [sickDB]
exec sp_addmergepullsubscription
@publisher = N'publisher',
@publication = N'publication',
@publisher_db = N'goodDB',
@subscriber_type = N'Local',
@subscription_priority = 0,
@description = N'hope this works', @sync_type = N'Automatic'
(上面略有编辑)。
元数据中是否还有一些剩余的问题?关于 ANSI_PADDING 东西的原始理论实际上是订户数据库中有一些带有计算列的表,因此这似乎是相关的。然而,ANSI_PADDING 设置(和谷歌搜索)的一些翻转并没有真正得出结论性的答案。
非常感谢您的阅读,并让我知道我可以提供的任何其他可能有帮助的信息。
哦,是的,发布者和订阅者都是 SQL Server 2005。
我认为您应该检查您的数据库中是否有一些可以关闭“ANSI_PADDING”的ddl触发器。如果在触发器主体中,您会发现类似 SETANSI_NULLS OFF 的内容,这可能是您的错误。
如果是 ie 触发器,它正在监视用户正在删除或添加 ie 索引。当您创建请求订阅并且复制内部试图在您的订阅者数据库上添加复制触发器时,它可能会起作用。
在这种情况下,您需要禁用触发器,创建拉订阅并启用触发器。
您可以在此链接上找到更多信息。这是 ms sql server 2005 中的一个错误
http://connect.microsoft.com/SQLServer/feedback/details/334194/ansi-padding-options-in-replication-snapshot
Ĵ