如何进行数据库的事务性 SMO 传输?
How to do a transactional SMO transfer of a database?
我正在使用 SMO 的 Transfer
class 将生产数据库复制到测试环境。在生产数据库变得更大并且更频繁地更改之前,这一直非常有效。现在,复制操作经常在获取约束时失败(我假设就是这样):
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint <...>
这很奇怪,因为我假设复制操作的检索端在事务范围内,并且 SQLAzure 的默认事务级别是读取提交的快照。快照应该没有显示我认为的约束违规。
我已经尝试将传输的连接放在另一个事务中,但是没有效果。
有人知道这件事吗?
这两个环境都在 Azure 中吗?如果是这样,并且如果您想复制整个数据库,您可能需要考虑使用数据库复制操作(CREATE DATABASE ... AS COPY OF)。它的一个好处是保证副本在事务上是一致的。有关详细信息,请参阅 here。
我假设本地副本是指您计算机上的数据库副本?目前我们不建议在该场景中使用 SMO。如果源和目标都是 SQL DB,正确的方法是使用 CREATE DATABASE ... AS COPY OF(您已经这样做了)。如果源或目标是本地的,建议的方法是在 Microsoft.SqlServer.Dac 命名空间中使用 类,如 here 所述。
Re SMO 一般情况下,部分 SMO 仅启用以提供 Management Studio 对 SQL 数据库的访问权限。这些对象提供有限的功能,不适合在应用程序中使用。关于此的文章已存档,我们正在跟进重新发布。
我正在使用 SMO 的 Transfer
class 将生产数据库复制到测试环境。在生产数据库变得更大并且更频繁地更改之前,这一直非常有效。现在,复制操作经常在获取约束时失败(我假设就是这样):
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint <...>
这很奇怪,因为我假设复制操作的检索端在事务范围内,并且 SQLAzure 的默认事务级别是读取提交的快照。快照应该没有显示我认为的约束违规。
我已经尝试将传输的连接放在另一个事务中,但是没有效果。
有人知道这件事吗?
这两个环境都在 Azure 中吗?如果是这样,并且如果您想复制整个数据库,您可能需要考虑使用数据库复制操作(CREATE DATABASE ... AS COPY OF)。它的一个好处是保证副本在事务上是一致的。有关详细信息,请参阅 here。
我假设本地副本是指您计算机上的数据库副本?目前我们不建议在该场景中使用 SMO。如果源和目标都是 SQL DB,正确的方法是使用 CREATE DATABASE ... AS COPY OF(您已经这样做了)。如果源或目标是本地的,建议的方法是在 Microsoft.SqlServer.Dac 命名空间中使用 类,如 here 所述。
Re SMO 一般情况下,部分 SMO 仅启用以提供 Management Studio 对 SQL 数据库的访问权限。这些对象提供有限的功能,不适合在应用程序中使用。关于此的文章已存档,我们正在跟进重新发布。