2010-09-10 109 views
2

嗨,我們正在構建一個多租戶解決方案,其中每個租戶都有自己的數據庫。 我們會將有關租戶的信息保存在索引數據庫中。 創建租戶時,將執行以下步驟。寫入數據庫並創建數據庫時的事務

創建租戶類,將其保存到數據庫中,在該數據庫中將獲得一個增量數,該數將用於命名我們將創建的數據庫。 用增量編號創建數據庫。 然後更新數據庫模式。

這完全沒有問題,問題是如果某些第二階段將拋出異常。然後我們想要回滾租戶的儲蓄。我們可以在更大的交易中做到這一點嗎?爲了能夠使用增量編號,我們被迫提交交易來獲取它。我們是否應該使用其他命名策略?

想法?

+0

您是否使用表中的IDENTITY /自動編號列來獲取編號?您可以使用T-SQL中的SCOPE_IDENTITY()函數來獲取添加的最後一條記錄的標識值。 INSERT INTO X(a,b)VALUES(x,y); SET @TenantID = SCOPE_IDENTITY(); – 2010-09-13 01:03:18

回答

0

MSDN

CREATE DATABASE語句必須在自動提交模式(默認事務管理模式),並在顯式或隱式的交易是不允許的運行。

(這也適用於ALTER DATABASE爲好。)

但是,如果你的應用程序邏輯判定該操作應該會失敗(注:將盡可能多的檢查的,你可以在邏輯,你早可以),您可以簡單地使用DROP DATABASE(並回滾索引數據庫事務),因爲下一次嘗試應該可能重新創建整個事情。通過任何方式都不是一個理想的解決方案,但是你必須解決上面引用的約束。