Import Data-Tier Application vs sqlpackage.exe



在尝试使用sqlpackage实用程序恢复.BACPAC文件时,我们遇到了一个自动过程错误,但在使用"导入数据层应用程序"导入相同文件时却成功了。

我们得到的错误如下:

错误SQL72014: .Net SqlClient Data Provider:

Msg 547, Level 16, State 0, Line 3
ALTER TABLE语句与FOREIGN KEY约束&;fk_xx_xx &;冲突。冲突发生在数据库temp_xxx_5182022 &;表dbo.xxx&;列'xxx'.

自动进程从运行在Azure SQL Managed Instance上的数据库副本导出.BACPAC文件。.BACPAC文件然后通过sqlpackage.exe /a:Import导入SQL Server 2017。

做一些进一步的研究,听起来这个过程不会100%成功,因为导出的文件不能保证事务一致性。正确的方法是生成数据库的COPY ONLY并导出,这将要求我们在该服务器上进行一些TDE加密。

当使用SSMS通过导入数据层向导导入.BACPAC时,我们没有遇到该错误。

向导是否使用sqlpackage.exe实用程序或其他东西?

是否有任何缺失的参数,我们可以传递给/Import或/Export,可以允许成功导入?(即/p:DisableIndexesForDataPhase)

除了使用COPY ONLY方法之外,我们还有其他选择吗?

这里的问题是要恢复的DB的大小。

当使用SQLPackage.exe时,您必须有2个选项来指定目标DB

  1. 不预先创建目标DB。在这个场景中,目标数据库将在运行时为您创建,但是它的上限为32 GB。如果创建BACPAC的源数据库(不是BACPAC文件大小)为>
  2. 另一种更好的方法是预先创建一个空DB,并将其指定为目标DB。这将绕过限制问题。

相关内容

  • 没有找到相关文章

最新更新