我试图将SQL数据库的备份(.bacpac)还原到另一个SQL数据库,但由于以下错误无法恢复:
服务操作中遇到的错误。无法导入包。Error SQL72014:.Net SqlClient数据提供程序: Msg 547,级别16,状态0,第3行ALTER语句与外键约束"FK_x_xx“冲突。冲突发生在数据库"x“表"dbo.x”中。错误SQL72045:脚本执行错误。执行的脚本:打印N‘’Checking约束: FK_x_xxdbo.x';使用CHECK约束FK_x_xx修改表dbo.x;
我还尝试在本地恢复,但没有成功地使用mscorlib异常(我将再次尝试,并将使用准确的错误消息进行更新。
我已经检查了实时数据库,我不知道为什么这个密钥被侵犯了。
我还尝试修改包含在.bacpac中的.bacpac,以删除约束,但这失败了,因为它现在(正确地)失败了校验和验证。
发布于 2014-01-22 17:42:09
bacpac文件不是事务性的,因此在生成bacpac时写入目标数据库的新行将最终破坏索引。数据库必须没有其他用户连接,进行写操作,或者您可以复制数据库并从副本中生成bacpac。
1)复制目标数据库,这将立即返回,但数据库将需要一些时间来复制。此操作将创建一个完整的事务性副本:
CREATE DATABASE <name> AS COPY OF <original_name>2)查找副本操作的状态:
SELECT * FROM sys.dm_database_copies3)在复制的数据库上生成bacpac文件,任何人都不使用该文件。
4)删除复制的数据库,您将得到一个可工作的bacpac文件。
https://stackoverflow.com/questions/17575459
复制相似问题