Oracle 發行者的交易式複寫工作流程
「Oracle 發行者」的交易式複寫建立在 Microsoft SQL Server 交易式複寫發行架構之上,但在「發行者」端追蹤變更並將其傳遞到「散發者」的處理與標準交易式複寫完全不同。儘管存在差異,但 Oracle 資料庫中發生的交易還是會在「訂閱者」端套用,以與交易式群組一致。傳遞變更時,其彼此間含有外部索引鍵參考的資料表會維護其資料關聯性 (外部索引鍵不會複製到「訂閱者」)。
[!附註]
大型物件 (LOB) 的追蹤與其他資料類型不同。如需詳細資訊,請參閱<Oracle 發行者的設計考量與限制>主題的「大型物件考量」一節。
下列工作流程反白顯示追蹤和傳遞「Oracle 發行者」中變更所涉及的關鍵步驟。
追蹤變更:
使用者或應用程式會對一或多個為複寫而發行的 Oracle 資料表執行插入、更新或刪除作業。
針對每個已修改資料列,會引發由每個已發行 Oracle 資料表上之複寫所安裝的資料列層級觸發程序,以儲存資料表相關聯之發行項記錄資料表中的變更資訊。
當引發資料列層級觸發程序時,會從 HREPL_seq 順序中擷取一個數字,並會指派其至描述 DML 作業的記錄資料表資料列。這可以確定複寫將在「訂閱者」端以正確的順序套用變更命令。
如果主索引鍵發生更新,資料表中安裝的陳述式層級觸發程序也會引發,以允許相同陳述式中發生的多個主索引鍵更新彼此相互關聯。陳述式識別碼從 HREPL_Stmt 順序中提取。此用於正確處理「訂閱者」端的主索引鍵更新。
對於插入已發行 Oracle 資料表或從中刪除的每一個資料列,都會有一個資料列插入相關聯的發行項記錄資料表。而對於在 Oracle 資料表中更新的每一個資料列,根據複寫是否需要資料列之前狀態的資訊,記錄資料表中會插入一個資料列 (後置資料影像) 或兩個資料列 (前置與後置資料影像)。
將變更傳遞至散發者
「記錄讀取器代理程式」可識別一組尚未與輪詢間隔相關聯之發行項記錄的交易一致性變更,並將記錄資料表項目的資料列 ID 暫時儲存在 HREPL_Poll 資料表中。從順序 HREPL_Pollid 中提取的識別碼用於標示為交易一致性組之成員的每一個變更項目,並為與其他組相關的組提供處理順序。
處理已發行資料表的變更時,會從記錄資料表擷取資料列;HREPL_Pollid 目前的輪詢 ID 用於識別那些要處理的資料列。
記錄資料表中的變更批次會認可為散發資料庫中的單一交易,並儲存在 MSrepl_commands 和 MSrepl_transactions 資料表中。
然後,當變更含標準交易式複寫時,「散發代理程式」會從散發資料庫讀取變更,並將其傳遞到「訂閱者」。