事务问题将列添加到复制表

时间:2011-12-12 11:15:59

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

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

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

任何想法解决这个问题的最简单方法是什么?我是否必须编写删除出版物的脚本,然后重新添加它??

2 个答案:

答案 0 :(得分:2)

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

当你运行脚本的一部分时,帽子有ALTER TABLE来添加列,它启动对SQL复制代码的调用,该代码向订阅者传播ALTER TABLE命令。该代码无法在具有较高隔离级别的较大事务内执行。

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

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

答案 1 :(得分:1)

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

有关详细信息,请参阅Making Schema Changes on Publication Databases