【问题标题】:Transaction issue adding column to replicated table向复制表添加列的事务问题
【发布时间】:2011-12-12 11:15:58
【问题描述】:

在我的软件中,我有一个运行数据库更新的进程,我需要应用这些更新来修补我们的最新版本。在我最新的脚本中,我想将一列添加到具有用于复制设置的发布的表中。当我创建更改脚本以添加列时,我收到一条消息,内容如下:

You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels.

您知道解决此问题的最简单方法是什么吗?我是否必须编写脚本删除出版物,然后重新添加它!?

【问题讨论】:

  • 您是如何创建脚本的?它是什么样的?

标签: sql-server sql-server-2008 transactions replication


【解决方案1】:

本周我们在使用 SQL Compare 生成的脚本来同步我们的生产和开发环境时遇到了这个问题。该问题是由来自 SQL Compare(或您正在使用的任何内容)的脚本以高于 READ COMMITTED 或 REPEATABLE READ 的隔离级别启动事务引起的。

当您运行脚本的一部分时,使用 ALTER TABLE 来添加列,这会启动对 SQL 复制代码的调用,该代码将 ALTER TABLE 命令传播给订阅者。该代码无法在具有较高隔离级别的较大事务中执行。

我们使用的解决方案是编写复制脚本。删除该表上的复制。应用同步脚本。然后重新创建复制。

另一种方法是编辑同步脚本以更改事务的隔离级别或完全删除它。这不是我们想做的事情,所以我们采用了前面提到的解决方案。

【讨论】:

    【解决方案2】:

    要向表中添加新列并将其包含在现有发布中,您需要在发布者处使用 ALTER TABLE ADD 语法。默认情况下,架构更改将传播给订阅者,发布属性 @replicate_ddl 必须设置为 true。

    更多信息请参见Making Schema Changes on Publication Databases

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      相关资源
      最近更新 更多