資料庫映象和跨資料庫事務

iSQlServer發表於2008-11-13

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

  • 對於跨資料庫事務:故障轉移後,映象資料庫位於其他伺服器例項中,並且通常會位於獨立於非映象資料庫的資料庫中。即使是在相同的兩個夥伴之間映象兩個資料庫,仍不能保證這兩個資料庫會同時進行故障轉移。
  • 對於分散式事務:故障轉移後,新主體伺服器無法連線到前一個使用相同資源 ID 的主體伺服器的分散式事務處理協調器。因此,新主體伺服器無法獲取事務狀態。

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

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

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

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

相關文章