我正在尝试将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
以删除约束,但这会失败,因为它现在(正确地说)会失败校验和验证。
答案 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文件。