由于外键冲突,无法恢复bacpac

时间:2013-07-10 15:59:33

标签: azure azure-sql-database bacpac

我正在尝试将SQL Azure数据库的备份(.bacpac)还原到另一个SQL Azure数据库,但由于以下错误而无法执行此操作:

  

服务操作期间遇到错误。无法导入   包。错误SQL72014:.Net SqlClient数据提供程序:消息547,级别   16,状态0,行3 ALTER TABLE语句与   FOREIGN KEY约束“FK_x_xx”。冲突发生在数据库中   “x”,表“dbo.x”。错误SQL72045:脚本执行错误。该   执行脚本:PRINT N'Checking约束:FK_x_xx [dbo]。[x]';改变   TABLE [dbo]。[x] WITH CHECK CHECK CONSTRAINT [FK_x_xx];

我还试图在本地恢复但没有成功使用mscorlib异常(我将再次尝试它,并会很快更新确切的错误消息。

我检查了实时数据库,但我看不出为什么会违反此密钥。

我还尝试修改model.xml中包含的.bacpac以删除约束,但这会失败,因为它现在(正确地说)会失败校验和验证。

1 个答案:

答案 0 :(得分:11)

bacpac文件不是事务性的,因此在生成bacpac时写入目标数据库的新行最终会破坏索引。数据库要么没有其他用户连接进行写入,要么您可以复制数据库并从副本中制作bacpac。

1)复制目标数据库,它将立即返回,但数据库将需要一些时间来复制。此操作将创建完整的事务副本:

CREATE DATABASE <name> AS COPY OF <original_name>

2)找到复制操作的状态:

SELECT * FROM sys.dm_database_copies

3)在复制的数据库上生成bacpac文件,任何人都不会使用该文件。

4)删除复制的数据库,你将有一个工作的bacpac文件。