AlwaysOn 可用性組或資料庫映象不支援跨資料庫事務和分散式事務

cow977發表於2014-07-03

原文:

 

AlwaysOn 可用性組或資料庫映象不支援跨資料庫事務和分散式事務。 這是因為以下原因無法保證事務的原子性/完整性:

l  對於跨資料庫事務:每個資料庫獨立提交。因此,即使對於單個可用性組中的資料庫,在一個資料庫提交事務後、但是在另一個資料庫提交前可能發生故障轉移。對於資料庫映象,此問題很複雜,因為在故障轉移後,映象資料庫所在的伺服器例項通常不同於其他資料庫的伺服器例項,即使在兩個相同夥伴之間對兩個資料庫進行映象,也無法保證兩個資料庫同時進行故障轉移。

l  對於分散式事務:故障轉移後,新主體伺服器/主副本無法連線到前一個主體伺服器/主副本的分散式事務處理協調器。因此,新主體伺服器/主副本無法獲取事務狀態。

以下資料庫映象示例說明了如何可能出現邏輯上的不一致。 在此示例中,應用程式使用跨資料庫事務插入兩行資料:將其中一行插入映象資料庫 A 中的表,將另一行插入另一個資料庫 B 中的表。 資料庫 A 在具有自動故障轉移功能的高安全性模式下進行映象。 提交事務時,資料庫 A 不可用,映象會話將故障自動轉移到資料庫 A 的映象資料庫。

故障轉移之後,跨資料庫事務可能會在資料庫 B 上成功提交,但不可能會在故障轉移的資料庫中成功提交。 如果在發生故障之前,資料庫 A 的原始主體伺服器未能將跨資料庫事務的日誌傳送到映象伺服器,則可能會出現這種情況。 故障轉移之後,該事務將不存在於新的主體伺服器上。 資料庫 A 和資料庫 B 出現不一致,因為在資料庫 B 中插入的資料保持完好無損,而在資料庫 A 中插入的資料已經丟失。

使用 MS DTC 事務時可能會出現類似的情況。 例如,故障轉移後,新主體將訪問 MS DTC。 但是 MS DTC 不能識別新的主體伺服器,因而會終止被認為已在其他資料庫中提交了的、所有“準備提交”的事務。

重要提示

將資料庫映象或可用性組與 DTC 搭配使用不會導致 SQL Server 安裝失去支援。 但是,如果資料庫為資料庫映象會話或可用性組的一部分,且在資料庫中使用了 DTC,則僅當支援問題與將資料庫映象或可用性組與 DTC 搭配使用無關時將由 Microsoft 組織調查。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-1208783/,如需轉載,請註明出處,否則將追究法律責任。

相關文章