當前位置:成語大全網 - 書法字典 - 水壺字典替換

水壺字典替換

OGG(Oracle golden gate)是Oracle為解決異構數據環境中的數據復制而提供的商業工具。與其他遷移工具OGG相比,它的優點是可以直接解析源Oracle的重做日誌,因此可以實現增量部分數據的遷移,而無需對原始表結構進行太多調整。本文將重點介紹如何使用OGG實現Oracle到MySQL數據的順利遷移,以及個人在遷移過程中遇到的問題的解決方案。

OGG邏輯架構

參考上圖,我將向您簡要介紹OGG邏輯架構,以便您對OGG數據同步流程有壹個簡單的了解。以下章節將詳細演示相關流程的配置方法。OGG的使用主要涉及以下流程和文件:

管理器進程:源端和目標端需要同時運行,其主要功能是監控和管理其他進程、報告錯誤、分配和清理數據存儲空間以及發布閾值報告。

提取過程:運行在數據庫的源端,主要用於捕獲數據的變化,負責提取總量和增量數據。

軌跡文件:暫時存儲在磁盤上的數據文件。

數據抽取進程:它在數據庫的源端運行,屬於提取進程的輔助進程。如果未配置數據泵,提取過程將直接將提取的數據發送到目標端的跟蹤文件。如果配置了數據泵,提取過程會將數據提取到本地跟蹤文件,然後通過數據泵過程將其發送到目標端。配置數據抽取過程的主要優點是,即使從源端到目標端的網絡中斷,提取過程也不會終止。

收集器進程:接收源傳輸的數據更改並將它們寫入本地跟蹤文件。

Replicat流程:讀取跟蹤文件中記錄的數據更改,創建相應的DML語句並在目標端回放。

第二,遷移計劃

⑴環境信息

OGG版本ogg12.2.0.2適用於Oracle ogg12.2.0.2適用於MySQL?

數據庫版本Oracle 11 . 2 . 0 . 4 MySQL 5 . 7 . 21。

OGG _ HOME/HOME/Oracle/ogg/opt/ogg

表結構遷移

表結構的遷移並不難,但內容比較復雜。我們在遷移表結構時使用了壹個名為sqlines的開源工具,然後對MySQL端sqlines工具創建失敗且不符合預期的表結構進行了特殊處理,以提高表結構轉換的效率。

註意:在Oracle遷移MySQL的場景中,OGG不支持DDL語句同步,所以在表結構遷移後和數據庫切換前盡量不要修改表結構。

⑶數據遷移

所有數據同步操作都由OGG工具執行。考慮到數據總量和增量之間的聯系,OGG需要首先啟動增量同步的提取過程,抓取數據庫的重做日誌,在總量提取後啟動增量數據回放,並應用總量和增量期間生成的日誌數據。OGG可以根據參數配置重復數據處理,因此使用OGG時,首先配置並啟用增量。此外,為了避免本章篇幅過長,OGG參數將不予解釋,需要它的朋友可以查看官方參考文檔來查詢任何您不理解的參數。

1.源位置的OGG配置

(1)Oracle數據庫配置

對於Oracle數據庫,OGG需要數據庫打開歸檔模式、添加輔助日誌和強制日誌記錄,以確保OGG可以捕獲完整的日誌信息。

檢查當前環境是否滿足要求,輸出結果如下圖所示:

Oracle數據庫OGG用戶創建

Ogg要求用戶擁有操作數據庫中相關對象的權限。涉及以下權限。此示例將使用OGG用戶名和口令創建壹個Oracle數據庫用戶,並授予以下權限。

(3)源OGG管理流程(MGR)配置

(4)源OGG表級完成日誌(trandata)的配置

只有打開最小完成日誌時,表級完成日誌才起作用。以前,只有最小完成日誌(alter database添加補充日誌數據;),redolog記錄的信息不夠全面,因此必須使用add trandata打開表級完成日誌以獲取必要的信息。

(5)OGG在源頭上提取工藝配置。

提取過程在數據庫的源端運行,負責從源表或日誌中捕獲數據。提取過程使用其固有的檢查點機制來定期檢查和記錄其讀取和寫入位置,通常寫入本地跟蹤文件。這種機制是為了確保如果提取過程終止或操作系統關閉,在我們重新啟動提取過程後,GoldenGate可以返回到以前的狀態並從最後壹個斷點繼續運行而不會丟失任何數據。

(6)源OGG傳輸流程(泵)配置

泵進程在數據庫的源端運行,它的功能非常簡單。如果在源端的提取過程中使用本地蹤跡文件,則泵進程將通過TCP/IP協議將蹤跡文件以數據塊的形式發送到目標端。泵送過程本質上是提取過程的壹種特殊形式。如果不使用trail文件,提取過程將在提取數據後直接將數據傳送到目標端。

補充:當啟動pump進程時,需要與目標端的mgr進程連接,因此需要提前在目標端配置mgr,否則會報告連接被拒絕,提取的日誌文件無法傳輸到目標端的相應目錄。

(7)源OGG異構映射文件(defgen)的生成

該文件記錄需要在源庫中復制的表的表結構定義信息。源庫生成該文件後,需要將其復制到目標庫的dirdef目錄中。當目標庫的副本進程將傳輸的數據應用到目標庫時,它需要讀取和寫入該文件,而同構數據庫不需要執行此操作。

2.目標端的OGG配置

(1)目標端的MySQL數據庫配置

確認MySQL端表結構已經存在。

MySQL數據庫OGG用戶創建

mysql & gt創建由“ogg”標識的用戶“ogg”@“%”;

mysql & gt在*上授予全部權限。* to‘ogg‘@‘%‘;

# # # #提前為ogg創建壹個數據庫來存儲檢查點表。

mysql & gt創建數據庫ogg

(2)在目標側配置OGG管理流程(MGR)

目標端MGR流程與源端配置相同,源端配置方法可以在目標端直接重復,此部分不再贅述。

(3)在目標端配置OGG檢查點日誌表。

檢查點表用於確保在執行壹個事務後,MySQL數據庫中有壹個表來記錄當前的日誌回放點,該表類似於MySQL復制記錄binlog的GTID或位置點。

# # # #切換到ogg軟件目錄並執行ggsci以進入命令行終端。

shell & gtcd $OGG之家

shell & gtggsci

ggsci & gt編輯參數。/全局

檢查點表ogg.ggs_checkpoint

ggsci & gtdblog in sourcedb ogg @ 17x . 1x . 84 . 121:3306 userid ogg

ggsci & gt添加檢查點表ogg.ggs_checkpoint

(4)目標端的OGG回放線程(replicat)配置。

Replicat流程在目標端運行,是數據交付的最後壹站。它負責在目標端讀取Trail文件的內容,將其解析為DML語句,然後將其應用到目標數據庫。

# # # #切換到ogg軟件目錄並執行ggsci以進入命令行終端。

shell & gtcd $OGG之家

shell & gtggsci

# # # #添加壹個回放線程並將其與源泵進程傳輸的跟蹤文件相關聯,並使用檢查點表來確保數據不會丟失。

ggsci & gt添加replicat r_cms,exttrail /opt/ogg/dirdat/ms,check point table ogg . ggs _ check point

# # # #添加/編輯播放過程配置文件

ggsci & gt編輯參數r_cms

復制r_cms

targetdb CMS @ 17x . 1x . 84 . 121:3306,用戶id ogg,密碼ogg

sourcedefs/opt/ogg/dirdef/CMS . def

丟棄文件/opt/ogg/dirrpt/r_cms.dsc,追加,兆字節1024

手柄碰撞

映射cms。*,目標cms。*;

註意:replicat進程只需要配置,不需要啟動。它將在完全提取完成後啟動。

到目前為止,源環境配置完成了嗎?

全量數據提取完成後,即可啟動目標回放流程,完成數據的準實時同步。

3.完全同步配置

完全數據同步是壹次性操作。當部署OGG軟件並配置和啟動增量提取過程時,可以配置1個特殊提取過程來從表中提取數據,將提取的數據保存到目標端以生成文件,目標端啟動單次運行的replicat回放過程來解析數據並將其回放到目標數據庫。

(1)來源端OGG總提取流程配置

# # # #切換到ogg軟件目錄並執行ggsci以進入命令行終端。

shell & gtcd $OGG之家

shell & gtggsci

# # # #添加/編輯總提取過程的配置文件

# # # #其中RMTFILE指定將提取的數據直接傳輸到遠程對應目錄。

# # # #註意:RMTFILE參數指定的文件僅支持2個字符,超過replicat將無法識別。

ggsci & gt編輯參數ei_cms

源表

SETENV(NLS _郎=“美國_美國。AL32UTF8“)

SETENV(ORACLE _ SID = CMS)

SETENV(ORACLE _ HOME =/data/ORACLE/11.2/db _ 1)

用戶ID ogg@appdb,密碼ogg

rmt host 17x . 1x . 84 . 121,MGRPORT 7809

RMTFILE /opt/ogg/dirdat/ms,maxfiles 100,兆字節1024,清除

表cms。*;

# # # #啟動並檢查提取過程是否正常。

shell & gt諾厄普。/extract paramfile。/dirprm/ei_cms.prm報告文件。/dirrpt/ei _ CMS . RPT & amp;

# #檢查日誌是否完全正常提取。

shell & gttail -f ./dirrpt/ei_cms.rpt

(2)目標端OGG完整回放過程(replicat)配置

# # # #切換到ogg軟件目錄並執行ggsci以進入命令行終端。

shell & gtcd $OGG之家

shell & gtggsci

ggsci & gt編輯參數ri_cms

特別潤

結束運行時間

TARGETDB CMS @ 17x . 1x . 84 . 121:3306,用戶ID ogg,密碼ogg

EXTFILE /opt/ogg/dirdat/ms

廢棄文件。/dirrpt/ri_cms.dsc,清除

映射cms。*,目標cms。*;

# # # #啟動並檢查播放過程是否正常。

shell & gt諾厄普。/replicat參數文件。/dirprm/ri_cms.prm報告文件。/dirrpt/ri _ CMS . RPT & amp;

# # # #檢查日誌是否正常完整回放。

shell & gttail -f ./dirrpt/ri_cms.rpt

三是數據驗證

數據驗證是數據遷移過程中必不可少的環節。本章提供了幾種數據驗證的思路和參數,驗證方法可以從以下角度實現:

1.通過OGG日誌檢查總量和增量過程中丟棄記錄是否為0,判斷數據是否丟失;

2.通過對源端和目標端的表進行計數來判斷數據計數是否壹致;

3.編寫壹個類似pt-table-checksum原理的程序實現行級壹致性檢查。這種方法有明顯的優點和缺點。優點是可以完整準確地檢查數據內容,缺點是需要遍歷每壹行數據,檢查成本高。

4.相對折中的數據驗證方法是從業務角度預先編寫幾十條返回結果更快的SQL,從業務角度通過抽樣檢查。

四。移民問題的處理

本章將講述遷移過程中遇到的壹些問題以及相應的解決方案。

MySQL的限制

從Oracle到MySQL的表結構遷移過程中有兩個主要限制:

1.Oracle端的表結構壹開始設計並不嚴格,大量列使用了varchar(4000)數據類型,導致遷移到MySQL後表結構超過了行限制,表結構無法創建。由於MySQL自身數據結構的限制,壹個16K的數據頁至少需要存儲兩行數據,因此單行數據不能超過65535字節,因此這種情況有兩種解決方案:

根據實際存儲數據的長度,對超長varchar列進行收縮;

對於無法收縮的列,數據類型為文本,但這可能會在使用過程中導致壹些性能問題;

2.與第壹點類似,在Innodb存儲引擎中,索引前綴長度限制為767字節。如果使用動態和壓縮行格式,並且打開了innodblargeprefix,則此限制為3072字節,也就是說,當使用utf8mb4字符集時,最多只能對varchar(768)的列進行索引。

3.使用ogg完全初始化同步時,如果存在外鍵約束,由於批量導入時每個表的插入順序不唯壹,可能會出現子表先插入數據而主表尚未插入的情況,導致子表所依賴的記錄失敗。因此,建議在數據遷移階段禁用主外鍵約束,並在遷移後打開。

mysql & gtset global foreign _ key _ checks = off;

總量趨同和增量趨同

HANDLECOLLISIONS參數是實現OGG總量數據和增量數據連接的關鍵。其原理是在完全提取之前啟動增量提取過程,捕獲完全應用期間生成的重做日誌,並在完全應用完成後啟動增量回放過程,並在完全應用期間應用增量數據。使用此參數後,DML語句的增量回放主要有以下場景和處理邏輯:

目標端沒有delete語句的記錄。忽略此問題將不會記錄在廢棄文件中。

目標端丟失了更新記錄。

-主鍵值被更新,並且update被轉換為insert。

-更新的鍵值是非主鍵。忽略此問題將不會記錄在廢棄文件中。

目標端重復插入現有的主鍵值,該主鍵值將被replicat進程轉換為壹行對現有主鍵值的更新。

③OGG版本選擇

在選擇OGG版本時,我們還根據用戶的情況對OGG版本進行了多次更改。起初,因為客戶的Oracle數據庫版本是11.2.0.4,所以我們傾向於使用OGG版本。然而,在使用過程中發現,每次數據提取生成的跟蹤文件達到約2G時,OGG都會報告連接中斷。查看RMTFILE參數的詳細描述,我們了解到Trail文件的默認限制是2G。後來,我們用12.3替換了OGG版本,並使用MAXFILES參數來控制指定大小的多個蹤跡文件的生成。在回放過程中,復制過程可以自動依次讀取蹤跡文件,這最終解決了問題。但是,如果Oracle環境不幸使用Linux 5版本的系統,那麽您的OGG需要降低到較小的版本,最高版本只能是OGG 12.2。

④無主鍵表處理

遷移過程中遇到的另壹個難題是Oracle端有大量沒有主鍵的表。MySQL中的表沒有主鍵,這幾乎是不允許的,因為這很容易導致性能問題和主從延遲。同時,OGG移民過程中也存在壹些隱患。例如,對於沒有主鍵的表,默認情況下,OGG會將該行數據中的所有列拼湊為唯壹鍵,但仍可能存在重復數據,這可能導致異常的數據同步。針對這個問題,甲骨文官方也提供了解決方案。通過將GUID列添加到沒有主鍵作為行的唯壹標記的表中,具體操作方法可以在MOS文檔ID 1538+0538 .300505076中搜索

⑤OGG安全規則

錯誤報告信息

2019-03-08 06:15:22 ?錯誤?OGG-01201?MGR報告的錯誤:訪問被拒絕。

錯誤消息的含義是提取進程需要與目標mgr進程通信,但被拒絕。具體操作是:源端的提取過程需要與目標mgr進行通信,目標replicat遠程啟動,但由於現在的安全性問題,連接被拒絕。

報告錯誤的原因

在Oracle OGG 11版本之後,添加了新的安全要求。如果需要遠程啟動目標端的replicat進程,應該在mgr節點添加壹個訪問控制參數以允許遠程調用。

解決辦法

分別在源和目標mgr節點上添加訪問控制規則,然後重新啟動。

# #表示mgr節點允許10.186網段(IPADDR)的所有類型的程序(Prog *)訪問訪問規則PROG *,IP Addr 10.186。* *,允許。

㈥數據提取方法

錯誤報告信息

2019-03-15 14:49:04 ?錯誤?OGG-01192?正在嘗試對可能作為LOB區塊寫入的數據類型使用RMTTASK(表:“UNIONPAYCMS。CMS _ OT _ CONTENT _ RTF)。

報告錯誤的原因

根據官方文檔,直接從Oracle數據庫中提取數據並寫入MySQL的initial-load方法不支持LOBs數據類型,而表UNIONPAYCMS。CMSOTCONTENT_RTF包含CLOB字段,因此無法傳輸,並且此方法不支持超過4k的字段數據類型。

解決辦法

將提取過程中的RMTTASK更改為RMTFILE參數。官方建議是首先將數據提取到壹個文件中,然後基於文件數據分析初始化導入。