日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql goldengate_oracle GoldenGate实现Oracle到MySQL数据平滑迁移

發(fā)布時(shí)間:2023/12/15 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql goldengate_oracle GoldenGate实现Oracle到MySQL数据平滑迁移 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(一)OGG邏輯架構(gòu)

參照上圖簡(jiǎn)單給大家介紹下OGG邏輯架構(gòu),讓大家對(duì)OGG數(shù)據(jù)同步過(guò)程有個(gè)簡(jiǎn)單了解,后面章節(jié)會(huì)詳細(xì)演示相關(guān)進(jìn)程的配置方式,在OGG使用過(guò)程中主要涉及以下進(jìn)程及文件:Manager進(jìn)程:需要源端跟目標(biāo)端同時(shí)運(yùn)行,主要作用是監(jiān)控管理其它進(jìn)程,報(bào)告錯(cuò)誤,分配及清理數(shù)據(jù)存儲(chǔ)空間,發(fā)布閾值報(bào)告等

Extract進(jìn)程:運(yùn)行在數(shù)據(jù)庫(kù)源端,主要用于捕獲數(shù)據(jù)的變化,負(fù)責(zé)全量、增量數(shù)據(jù)的抽取

Trails文件:臨時(shí)存放在磁盤上的數(shù)據(jù)文件

Data Pump進(jìn)程:運(yùn)行在數(shù)據(jù)庫(kù)源端,屬于Extract進(jìn)程的一個(gè)輔助進(jìn)程,如果不配置Data Pump,Extract進(jìn)程會(huì)將抽取的數(shù)據(jù)直接發(fā)送到目標(biāo)端的Trail文件,如果配置了Data Pump,Extract進(jìn)程會(huì)將數(shù)據(jù)抽取到本地Trail文件,然后通過(guò)Data Pump進(jìn)程發(fā)送到目標(biāo)端,配置Data Pump進(jìn)程的主要好處是即使源端到目標(biāo)端發(fā)生網(wǎng)絡(luò)中斷,Extract進(jìn)程依然不會(huì)終止

Collector進(jìn)程:接收源端傳輸過(guò)來(lái)的數(shù)據(jù)變化,并寫入本地Trail文件中

Replicat進(jìn)程:讀取Trail文件中記錄的數(shù)據(jù)變化,創(chuàng)建對(duì)應(yīng)的DML語(yǔ)句并在目標(biāo)端回放

二、遷移方案

(一)表結(jié)構(gòu)遷移表結(jié)構(gòu)遷移屬于難度不高但內(nèi)容比較繁瑣的一步,我們?cè)谶w移表結(jié)構(gòu)時(shí)使用了一個(gè)叫sqlines的開源工具,對(duì)于sqlines工具在MySQL端創(chuàng)建失敗及不符合預(yù)期的表結(jié)構(gòu)再進(jìn)行特殊處理,以此來(lái)提高表結(jié)構(gòu)轉(zhuǎn)換的效率。

注意:OGG在Oracle遷移MySQL的場(chǎng)景下不支持DDL語(yǔ)句同步,因此表結(jié)構(gòu)遷移完成后到數(shù)據(jù)庫(kù)切換前盡量不要再修改表結(jié)構(gòu)。

(二)數(shù)據(jù)遷移數(shù)據(jù)同步的操作均采用OGG工具進(jìn)行,考慮數(shù)據(jù)全量和增量的銜接,OGG需要先將增量同步的抽取進(jìn)程啟動(dòng),抓取數(shù)據(jù)庫(kù)的redo log,待全量抽取結(jié)束后開啟增量數(shù)據(jù)回放,應(yīng)用全量和增量這段期間產(chǎn)生的日志數(shù)據(jù),OGG可基于參數(shù)配置進(jìn)行重復(fù)數(shù)據(jù)處理,所以使用OGG時(shí)優(yōu)先將增量進(jìn)行配置并啟用。此外,為了避免本章節(jié)篇幅過(guò)長(zhǎng),OGG參數(shù)將不再解釋,有需要的朋友可以查看官方提供的Reference文檔查詢?nèi)魏文悴焕斫獾膮?shù)。三、數(shù)據(jù)校驗(yàn)

數(shù)據(jù)校驗(yàn)是數(shù)據(jù)遷移過(guò)程中必不可少的環(huán)節(jié),本章節(jié)提供給幾個(gè)數(shù)據(jù)校驗(yàn)的思路共大家參數(shù),校驗(yàn)方式可以由以下幾個(gè)角度去實(shí)現(xiàn):

1.通過(guò)OGG日志查看全量、增量過(guò)程中discards記錄是否為0來(lái)判斷是否丟失數(shù)據(jù);

2.通過(guò)對(duì)源端、目標(biāo)端的表執(zhí)行count判斷數(shù)據(jù)量是否一致;

3.編寫類似于pt-table-checksum校驗(yàn)原理的程序,實(shí)現(xiàn)行級(jí)別一致性校驗(yàn),這種方式優(yōu)缺點(diǎn)特別明顯,優(yōu)點(diǎn)是能夠完全準(zhǔn)確對(duì)數(shù)據(jù)內(nèi)容進(jìn)行校驗(yàn),缺點(diǎn)是需要遍歷每一行數(shù)據(jù),校驗(yàn)成本較高;

4.相對(duì)折中的數(shù)據(jù)校驗(yàn)方式是通過(guò)業(yè)務(wù)角度,提前編寫好數(shù)十個(gè)返回結(jié)果較快的SQL,從業(yè)務(wù)角度抽樣校驗(yàn)。

四、遷移問(wèn)題處理本章節(jié)將講述遷移過(guò)程中碰到的一些問(wèn)題及相應(yīng)的解決方式。

(一)MySQL限制

在Oracle到MySQL的表結(jié)構(gòu)遷移過(guò)程中主要碰到以下兩個(gè)限制:

1. Oracle端的表結(jié)構(gòu)因?yàn)樽畛踉O(shè)計(jì)不嚴(yán)謹(jǐn),存在大量的列使用varchar(4000)數(shù)據(jù)類型,導(dǎo)致遷移到MySQL后超出行限制,表結(jié)構(gòu)無(wú)法創(chuàng)建。由于MySQL本身數(shù)據(jù)結(jié)構(gòu)的限制,一個(gè)16K的數(shù)據(jù)頁(yè)最少要存儲(chǔ)兩行數(shù)據(jù),因此單行數(shù)據(jù)不能超過(guò)65,535 bytes,因此針對(duì)這種情況有兩種解決方式:根據(jù)實(shí)際存儲(chǔ)數(shù)據(jù)的長(zhǎng)度,對(duì)超長(zhǎng)的varchar列進(jìn)行收縮;

對(duì)于無(wú)法收縮的列轉(zhuǎn)換數(shù)據(jù)類型為text,但這在使用過(guò)程中可能導(dǎo)致一些性能問(wèn)題;

2. 與第一點(diǎn)類似,在Innodb存儲(chǔ)引擎中,索引前綴長(zhǎng)度限制是767 bytes,若使用DYNAMIC、COMPRESSED行格式且開啟innodblargeprefix的場(chǎng)景下,這個(gè)限制是3072 bytes,即使用utf8mb4字符集時(shí),最多只能對(duì)varchar(768)的列創(chuàng)建索引;

3. 使用ogg全量初始化同步時(shí),若存在外鍵約束,批量導(dǎo)入時(shí)由于各表的插入順序不唯一,可能子表先插入數(shù)據(jù)而主表還未插入,導(dǎo)致報(bào)錯(cuò)子表依賴的記錄不存在,因此建議數(shù)據(jù)遷移階段禁用主外鍵約束,待遷移結(jié)束后再打開。mysql>set global foreign_key_checks=off;

(二)全量與增量銜接HANDLECOLLISIONS參數(shù)是實(shí)現(xiàn)OGG全量數(shù)據(jù)與增量數(shù)據(jù)銜接的關(guān)鍵,其實(shí)現(xiàn)原理是在全量抽取前先開啟增量抽取進(jìn)程,抓去全量應(yīng)用期間產(chǎn)生的redo log,當(dāng)全量應(yīng)用完成后,開啟增量回放進(jìn)程,應(yīng)用全量期間的增量數(shù)據(jù)。使用該參數(shù)后增量回放DML語(yǔ)句時(shí)主要有以下場(chǎng)景及處理邏輯:目標(biāo)端不存在delete語(yǔ)句的記錄,忽略該問(wèn)題并不記錄到discardfile

目標(biāo)端丟失update記錄

– 更新的是主鍵值,update轉(zhuǎn)換成insert

– 更新的鍵值是非主鍵,忽略該問(wèn)題并不記錄到discardfile

目標(biāo)端重復(fù)insert已存在的主鍵值,這將被replicat進(jìn)程轉(zhuǎn)換為UPDATE現(xiàn)有主鍵值的行

總結(jié)

以上是生活随笔為你收集整理的mysql goldengate_oracle GoldenGate实现Oracle到MySQL数据平滑迁移的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。