【发布时间】:2022-06-14 15:42:14
【问题描述】:
我们现在在尝试使用sqlpackage 实用程序恢复.BACPAC 文件时遇到自动化过程错误,但在使用“导入数据层应用程序”向导通过 SSMS 导入同一文件时成功。
我们得到的错误如下:
错误 SQL72014:.Net SqlClient 数据提供者:
消息 547,第 16 级,状态 0,第 3 行
ALTER TABLE 语句与 FOREIGN KEY 约束“FK_xx_xx”冲突。冲突发生在数据库“TEMP_xxx_5182022”、表“dbo.xxx”、列“xxx”中。
自动化过程从 Azure SQL 托管实例上运行的数据库副本导出 .BACPAC 文件。然后使用sqlpackage.exe /a:Import 将.BACPAC 文件导入SQL Server 2017。
做一些进一步的研究,听起来这个过程不会 100% 成功,因为导出的文件不能保证事务一致性。正确的方法是生成数据库的 COPY ONLY 并导出,这需要我们在该服务器上进行一些 TDE 加密。
当使用 SSMS 通过导入数据层向导导入 .BACPAC 时,我们没有遇到该错误。
向导是否使用sqlpackage.exe 实用程序或其他工具?
是否有任何缺失的参数可以传递给 /Import 或 /Export 以允许成功导入? (即/p:DisableIndexesForDataPhase)
除了使用 COPY ONLY 方法,我们还有其他选择吗?
【问题讨论】:
-
您导出为 bacpac 的数据库大小是多少?通过自动化流程导入时,您是否事先创建了目标数据库?
-
数据库大小约为 85GB (mdf)。导出的 .bacpac 大约为 1.5GB。数据库不是事先创建的
-
。我认为这就是问题所在。你可以试一试吗?事先创建一个数据库,然后使用 sqlpackage exe 导入 bacpac。如果没有预先创建目标数据库,SQLPACKAGE.exe 会在运行时为您创建一个数据库,但它最多可以容纳 32 GB 的数据。
-
感谢您的建议。我已更新 SQL Server 代理作业以包含在运行导入步骤之前创建数据库的任务。我会密切关注它,并在几周内提供更新。
-
@PankajSanwal 自从我们添加了创建 DB 步骤以来,这项工作每天晚上都在成功,所以我正在考虑解决这个问题!请随时添加您的评论作为回复,以便我将其标记为答案并给予您信任。
标签: sql-server import sqlpackage bacpac azure-sql-server-managed-instance