我最近嘗試了2個數據庫的大合併。我們重新從數據庫2架構到數據庫1並創建了一個腳本,從數據庫2傳輸所有數據到數據庫1.該腳本需要大約35分鐘運行,並具有與交易處理:將SQl服務器數據庫脫機時連接會發生什麼?
BEGIN TRANSACTION
...
IF(@@error<>0)
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
完整的腳本有點敏感,但這裏有一些SQL具有相同的結構:http://pastebin.com/GWJ3ZnkF
我們運行了腳本,所有數據都被無誤地傳輸了。我們測試了使用新的組合數據庫運行的系統(刪除了舊數據庫的訪問權限)。
但作爲最後一項任務,我們希望將舊數據庫脫機以確保沒有人使用該數據庫。要做到這一點,我們使用:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
這很糟糕。在這行SQL代碼之後,我們剛剛複製的組合數據庫中的所有數據突然消失了。我第一次認爲它並沒有真正完成,所以「立即回滾」聽起來像是在我的交易中執行了回滾。
但是爲什麼?是不是事務已經提交?
此外,我嘗試再次運行相同的腳本幾次,但在每次嘗試後,即使它說腳本是成功的,沒有數據被複制。我不知道爲什麼......是否記得我的離線回滾?
我的關係真的發生了什麼?
+1好的建議。 –
謝謝,我懷疑這將會接近我會得到的答案。是的。我做了一個備份,但數據庫爲2個非常活躍的Web系統提供服務,因此數據庫將老化(僅在維護意味着加載後的幾個小時)才能恢復,除非我們確實必須這樣做。我將不得不嘗試創建一個腳本來處理當前狀態下的腳本。 – Swippen