无法将 SQL Azure bacpac 导入 2016 CTP

Posted

技术标签:

【中文标题】无法将 SQL Azure bacpac 导入 2016 CTP【英文标题】:Cannot import SQL Azure bacpac to 2016 CTP 【发布时间】:2016-07-04 02:56:22 【问题描述】:

我非常熟悉从 Azure SQL V12 导出到我的开发箱,然后导入到我的本地 sql (2014) 实例的过程。我正在启动一个新的 Win10 机器并安装了 SQL 2016 CTP。我正在连接到同一个 Azure 实例并且可以对其进行操作——并且可以像 2014 一样导出 .bacpac。

但是当我尝试导入到本地时,我得到了:

Could not import package.
Warning SQL72012: The object [FOO33_Data] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.
Warning SQL72012: The object [FOO33_Log] exists in the target, but it will not be dropped even though you selected the 'Generate drop statements for objects that are in the target database but that are not in the source' check box.
Error SQL72014: .Net SqlClient Data Provider: Msg 547, Level 16, State 0, Line 3 The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Address_dbo.User_idUser". The conflict occurred in database "FOO33", table "dbo.User", column 'idUser'.
Error SQL72045: Script execution error.  The executed script:
PRINT N'Checking constraint: FK_dbo.Address_dbo.User_idUser [dbo].[Address]';

ALTER TABLE [dbo].[Address] WITH CHECK CHECK CONSTRAINT [FK_dbo.Address_dbo.User_idUser];

【问题讨论】:

那又怎样? SQL Server 2016 CTP,作为CTP,其他产品不完全支持?这里有什么惊喜吗? 它说“错误 SQL72014:.Net SqlClient 数据提供程序:消息 547,级别 16,状态 0,第 3 行 ALTER TABLE 语句与外键约束“FK_dbo.Address_dbo.User_idUser”冲突。数据库“FOO33”、表“dbo.User”、列“idUser”中发生冲突 尝试解决错误 @justSteve,我从生产到本地导入时遇到了同样的错误,您找到解决方案了吗?如果是,如果您提供有关如何解决此问题的最新信息,将会很有帮助。 我见过几次报告错误但导入成功的情况。也可以尝试重新运行操作。 【参考方案1】:

由于这个问题在 MSDN 上也有提问和回答,所以在这里分享一下。 https://social.msdn.microsoft.com/Forums/azure/en-US/0b025206-5ea4-4ecb-b475-c7fabdb6df64/cannot-import-sql-azure-bacpac-to-2016-ctp?forum=ssdsgetstarted

来自链接答案的文本:

我怀疑这里出了什么问题,导出操作是使用在导出过程中发生变化的数据库实例执行的。这可能会导致导出的表数据不一致,因为与 SQL Server 的物理备份/恢复不同,导出不保证事务一致性。相反,它们本质上是通过依次连接到数据库中的每个表并运行 select * 来执行的。当两个表之间存在外键关系且读取的表数据不一致时,会导致数据写入数据库后导入时出错,导入代码尝试重新启用外键。我们建议使用数据库复制机制(创建数据库copyDb作为originalDb的副本),这样可以保证副本具有事务一致性,然后从不变的数据库副本中导出。

【讨论】:

避免只使用指向答案的链接来回答。这是 SO 的一个主要原则。 试过了,但它也不导入。

以上是关于无法将 SQL Azure bacpac 导入 2016 CTP的主要内容,如果未能解决你的问题,请参考以下文章

Azure SQL 数据库 Bacpac 本地还原

从global到mooncake迁移SQL Azure

在 Azure 中创建加密的 bacpac 文件

即使选项在防火墙设置中设置为 yes,Azure SQL Server 防火墙也不允许操作连接

使用PowerShell脚本的Azure SQL备份自动化

使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败