2013-07-10 31 views
4

我試圖還原SQL Azure數據庫到另一個SQL Azure的數據庫的備份(.bacpac),但我不能這樣做,因爲下面的錯誤的這樣:無法恢復BACPAC由於外鍵衝突

Error encountered during the service operation. Could not import package. 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_x_xx". The conflict occurred in database "x", table "dbo.x". Error SQL72045: Script execution error. The executed script: PRINT N'Checking constraint: FK_x_xx[dbo].[x]'; ALTER TABLE [dbo].[x] WITH CHECK CHECK CONSTRAINT [FK_x_xx];

我也試圖在不使用的mscorlib異常(我會再次嘗試,並會盡快與確切的錯誤信息更新成功本地恢復。

我檢查活動數據庫和我可以看不出爲什麼這把鑰匙被侵犯了。

我也試圖修改.bacpac中包含的model.xml來刪除約束,但是這樣做失敗了,因爲它現在(正確地)失敗了校驗和驗證。

+0

我也有一些奇怪的行爲。就在上週,由於缺少聚簇索引,我無法清除SQL Azure數據庫。這甚至不應該在SQL Azure中可能。 –

+0

我認爲這是SQL數據工具的缺陷。無論我在導出之前創建副本,我每天都會導出/導入我的數據庫十幾次。同樣的'.bacpac'可以成功導入幾次,但失敗兩次以上,完全是隨機的。 – UserControl

回答

8

bacpac文件不是事務性的,因此在生成bacpac時寫入到目標數據庫的新行將最終破壞索引。數據庫必須沒有其他用戶連接進行寫入,或者您可以複製數據庫並從副本中創建一個bacpac。

1)複製目標數據庫,它將立即返回,但數據庫將需要一些時間來複制。此操作將創建一個完整的事務副本:

CREATE DATABASE <name> AS COPY OF <original_name> 

2)尋找您複製操作的狀態:

SELECT * FROM sys.dm_database_copies 

3)生成複製數據庫的BACPAC文件,該文件不被使用由任何人。

4)刪除複製的數據庫,你將有一個工作bacpac文件。

+0

沒有看過這一段時間,但這是非常有意義的。謝謝。 – Fishcake

+1

那麼它的那種毫無意義的讓你「出口」的時候它的副本正在製作中。 – Dave

+0

我用[複製](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy-portal)選項形式天青門戶,當我運行'SELECT * FROM sys.dm_database_copies '在查詢[編輯](https://azure.microsoft.com/en-us/blog/t-sql-query-editor-in-browser-azure-portal/)我得到'無法執行查詢。錯誤:無效的對象名稱'sys.dm_database_copies'.'? – stom