Sql server 为什么合并复制在设置表时失败';什么是锁升级?

Sql server 为什么合并复制在设置表时失败';什么是锁升级?,sql-server,sql-server-2008,replication,Sql Server,Sql Server 2008,Replication,合并复制出现问题。我们的发布服务器运行SQL Server 2008,而我们的两个订阅服务器运行2005。我们的发布者正试图向订阅者发送一个ALTER TABLE Foo SET(锁升级)命令。我想我记得读到过,这个命令在SQLServer2008中是新的,如果是这样,那么这个命令在2005年的服务器上失败是有道理的。然而,我们的合并复制是为2005年兼容性而设置的 架构脚本“if object_id(N'[dbo].[Users]')不是null exec('ALTER TABLE[dbo].

合并复制出现问题。我们的发布服务器运行SQL Server 2008,而我们的两个订阅服务器运行2005。我们的发布者正试图向订阅者发送一个
ALTER TABLE Foo SET(锁升级)
命令。我想我记得读到过,这个命令在SQLServer2008中是新的,如果是这样,那么这个命令在2005年的服务器上失败是有道理的。然而,我们的合并复制是为2005年兼容性而设置的

架构脚本“if object_id(N'[dbo].[Users]')不是null exec('ALTER TABLE[dbo].[Users]SET(LOCK_ESCALATION=TABLE) 无法将“)”传播到订阅服务器

你知道为什么我们的出版商会这么做吗


编辑:我们的2008服务器的兼容性级别设置为“Sql server 2005(90)”

这是Sql 2008中的一项新功能,因此在2005年不受支持。根据您的安装有多复杂,您可能需要考虑在兼容90(SQL 2005)中运行数据库,以确保不将SQL 2008特性添加到数据库中。自从模式数据复制出现以来,它就一直有很大的问题,所以总是有点沉默。我总是试图让它装聋作哑,只是管理数据——必须支持一个有32个订阅服务器的合并系统,并使用合并复制,而且在我们推动模式更改时,经常会遇到重大的模式问题

也就是说,如果它按照文档记录的方式工作,就不应该试图推动锁的更改。检查订阅是否标记为sql 2005兼容。他们很可能没有像对数据类型所做的那样,在2008年到2005年期间创建设置的自动映射(例如)


一段时间前,新锁定类型上的一位SQL开发人员出现了这种情况,因为此指令与SQL server 2005不兼容,而且当我在正在复制的表中进行架构更改时,会将此指令放入架构更改中

有两种方法:删除并再次创建订阅,当它在生产服务器中时不适用。第二种方法是转到数据库中的sysmergeschemachange表,删除具有以下内容的行:

架构脚本“if” 对象_id(N'[dbo].[Users]')不可用 null exec('ALTER TABLE[dbo].[Users] 设置(锁定升级=表)' 无法传播到 订户


我希望这能有所帮助。

感谢您确认我的怀疑,并提醒我兼容性选项。不幸的是,我们的兼容性级别被设置为90.0。更新以供评论;这很可能是2008年复制中的一个bug。虽然从表中删除行有点吓人,但msdn文章中并没有对其进行记录,我尝试了它-它对我有效。确认了SQL Server 2008中的错误。可能要到SQL Server 2011才能修复。()