代码之家  ›  专栏  ›  技术社区  ›  Samantha Branham

为什么合并复制在设置表的锁升级时失败?

  •  3
  • Samantha Branham  · 技术社区  · 15 年前

    合并复制出现问题。我们的发布服务器运行SQL Server 2008,而我们的两个订阅服务器运行2005。我们的出版商正试图发送 ALTER TABLE Foo SET (LOCK_ESCALATION) 向我们的订户发出命令。我记得我读到过,这个命令是SQL Server 2008中的一个新命令,如果是的话,那么这个命令在我们的2005服务器上失败是有意义的。但是,我们的合并复制是为2005年的兼容性而设置的。

    架构脚本'if object_id(n'[dbo].[users]'不是空exec('alter table[dbo].[users]set(lock_escalation=table) “)”无法传播到订阅服务器。

    关于我们的出版商为什么要这样做有什么想法吗?

    编辑: 2008服务器的兼容级别设置为“SQL Server 2005(90)”。

    2 回复  |  直到 14 年前
        1
  •  5
  •   u07ch    15 年前

    它是SQL 2008中的一个新功能,因此在2005年不受支持。根据安装程序的复杂程度,您可能需要考虑让数据库在兼容性90(SQL 2005)中运行,以确保不向数据库添加SQL 2008功能。自从模式数据出现以来,它的复制一直存在很大的问题,所以总是有点沉默寡言。我总是试图让它表现得很蠢,只管理数据——必须支持一个合并系统,其中有32个订阅服务器具有合并复制功能,并且在我们推送模式更改时,经常出现大的模式问题。

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

    一个SQL开发人员 blogged 在新的锁定类型上

        2
  •  4
  •   Jorge Grajales    14 年前

    发生这种情况是因为此指令与SQL Server 2005不兼容,并且在复制的表中进行架构更改时,会将此指令置于架构更改中。

    有两种方法:删除并重新创建suscription,在生产服务器中不适用。第二条路是去 系统合并架构更改 数据库中的表,并删除具有以下内容的行:

    架构脚本'if 对象_id(n'[dbo]。[users])不是 空exec('alter table[dbo]。[users] 设置(锁定“升级=表)”) 无法传播到 用户。

    我希望这有帮助。