GoldenGate 傳統抽取進程的 ADG 模式簡介:
GoldenGate 傳統抽取進程的 ADG 模式可實現對 DataGuard 備庫的抽取。與傳統方式不同,其不再由聯機在線 Redo 日志抽取,而抽取由主庫投遞而來的日志(歸檔日志及 standby redo logs)。
GoldenGate 傳統抽取進程的 ADG 模式原理:
1.抽取的日志類型
由主庫投遞至備庫的日志,具體表現為備庫的歸檔日志(archived logs)以及 standby redo logs。
2.DDL 復制的限制
Oracle GoldenGate 的 DDL 復制的本質是基於數據庫全局 Trigger 的復制。Trigger 將會捕捉 DDL 操作至中間表,隨后抽取進程將讀取中間表的 DDL 語句,並與 DML 語句根據 csn(Change Sequence Number)排序。投遞進程將采集到的操作傳遞至目標端,最終復制進程重現以上 DDL 語句。
但是由於 ADG 模式抽取的是備庫,因此 Trigger 至中間表的操作無法實現。所以 ADG 模式下只能實現 DML 的復制,而如欲實現 DDL 復制則需要在主庫上抽取。
3.DataGuard 角色切換的抽取過程
當執行數據庫切換時,Redo 日志的頭部將插入標記,用於指明日志流的結束。屆時抽取進程將根據 Redo 日志頭部插入的標記,判斷角色轉換時點,從而以新的模式(由於角色切換,抽取模式也應在正常及 ADG 模式間轉換)進行抽取。
4.主備庫實例數的限制
抽取進程的創建需要指定抽取數據庫的實例數,當數據庫角色轉換時,原本采用正常模式的抽取進程此時需轉換為 ADG 模式,反之亦然。因此倘若主備庫實例數不一致,將可能引發抽取進程的錯誤。
例如:主庫為 2 節點的 RAC,備庫為單實例數據庫,雖然可以通過在主庫上額外建立存放備庫第二實例的 Standby Redo Log(由此騙過抽取進程,令其認為備庫擁有 2 個節點),結構如下圖所示。


但是當執行角色切換后,抽取進程在 ADG 模式下需要通過原主庫的歸檔日志確定角色切換點。確定切換點后,抽取進程從 Standby Redo Log 中繼續抽取數據。但是由於原備庫為單實例數據庫,因此原主庫上進程號為 2 的 Standby Redo Log 並無數據,也就造成了原主庫上以 ADG 模式對 2 號 Redo 進程的抽取點停留在原主庫的歸檔日志上。過程如下圖所示。


注意:因此刪除歸檔實例時,原主庫上包含切換點的第二實例歸檔日志將報錯 "ASM file not dropped; currently being accessed"。抑或當第二實例歸檔日志丟失時,抽取進程將失效,且無論如果重置抽取點都會報錯 "OGG-00446 Could not find archived log for sequence"。屆時,只能通過角色回切后重置抽取點,或重建 ADG 模式抽取進程的實例數為 1 以解決故障。其中,重建語句類似如下。
GGSCI>
DROP EXTRACT ext1
ADD EXTRACT ext1 THREADS t BEGIN SCN s
START EXTRACT ext1
參考文檔:
(1).《GoldenGate
Installing and Configuring Oracle GoldenGate for Oracle Database
》
11.6 Configuring Classic Capture in Oracle Active Data Guard Only Mode
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">