回答

收藏

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

技术问答 技术问答 266 人阅读 | 0 人回复 | 2023-09-14

我正在尝试将SQL Azure数据库的备份(.bacpac)还原到另一个SQL Azure数据库,但是由于以下错误而无法恢复:
! g" ]9 U8 l/ P3 Z
( i8 ^/ d$ n% h$ s服务操作期间遇到错误。无法导入包。错误SQL72014:.Net SqlClient数据提供程序:消息547,级别16,状态0,第3行ALTER
* G' k* v# {' A# L- S/ T. T7 e8 x) VTABLE语句与FOREIGN KEY约束“ FK_x_xx”发生冲突。数据库“ x”的表“
4 |# R/ E' }0 edbo.x”中发生了冲突。错误SQL72045:脚本执行错误。执行的脚本:PRINT N’检查约束:FK_x_xx [dbo]。[x]’; ALTER( \1 n% ~* Y" Z8 U+ E, N
TABLE [dbo]。[x]带检查检查约束[FK_x_xx];8 G: h6 m9 g; x- p5 D0 |

4 T  a9 L7 ~" w我还曾尝试通过mscorlib异常在本地进行还原,但未成功(我将再次尝试进行该操作,并将在不久后通过确切的错误消息进行更新。0 L& W) ^. P2 R; d- V6 [/ a
我已经检查了实时数据库,但看不到为什么违反了该密钥。
8 U3 S& e; \4 ]; U& b# G, M我还尝试了修改中model.xml包含的内容.bacpac以删除约束,但这失败了,因为现在(正确的是)它无法通过校验和验证。6 V" f$ }: s# R% D* z  y6 Z
               
4 @+ x1 ]$ l  o& i% g, _' Y) V解决方案:
9 O# y$ \$ K8 M* C               
! a3 F) e' g7 i! ^0 N
' b0 c9 |5 ]9 [" `3 k
8 O. V, V/ I0 l" l7 c                bacpac文件不是事务性的,因此在生成bacpac时写入目标数据库的新行将最终破坏索引。数据库必须没有其他任何连接的用户进行写操作,或者您可以复制数据库并从该副本中创建一个bacpac。
9 u& N1 Y5 o. p& A! U9 q1)复制目标数据库,该数据库将立即返回,但是复制该数据库将需要一些时间。此操作将创建完整的事务副本:
% G( I3 p3 @9 W' m8 ^% KCREATE DATABASE  AS COPY OF
# `3 x4 z& o6 x3 `2)查找复制操作的状态:
" N2 L3 Q6 i; ]( bSELECT * FROM sys.dm_database_copies/ d: k0 W5 y$ T) s: O
3)在复制的数据库上生成一个bacpac文件,任何人都不会使用。
; r$ }, _( A( z* S5 `. U/ i" u. m6 j4)删除复制的数据库,您将拥有一个有效的bacpac文件。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则