如何进行数据库的事务SMO传输?

时间:2015-10-08 12:12:06

标签: sql-server azure-sql-database smo

我正在使用SMO的Transfer类将生产数据库复制到测试环境。这一点非常有效,直到生产数据库变得更大并且更频繁地改变。现在,复制操作经常无法获得约束(我假设它就是这样):

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint <...>

这很奇怪,因为我假设复制操作的检索端是在事务中作用域,而SQL Azure的默认事务级别是读取提交的快照。快照应该没有显示我想到的约束违规。

我已经尝试将转移的连接放在另一个事务中,但这没有效果。

有人对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

我认为本地副本是指您机器上的数据库副本?此时,我们不建议在该方案中使用SMO。如果source和target都是SQL DB,那么正确的方法是使用CREATE DATABASE ... AS COPY OF(你已经做过)。如果源或目标是内部部署,则建议的方法是使用Microsoft.SqlServer.Dac命名空间中的类(如文档here所述)。

通常,重新SMO,启用部分SMO,仅为Management Studio提供对SQL数据库的访问。这些对象提供有限的功能,不适用于应用程序。关于此的文章已存档,我们正在跟进以重新发布它。

答案 1 :(得分:0)

Azure中的两个环境都是?如果是这样,并且如果要复制整个数据库,则可能需要考虑使用数据库复制操作(CREATE DATABASE ... AS COPY OF)。它的一个好处是保证副本在事务上是一致的。有关详细信息,请参阅here