日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
OracleVSMySQL:數(shù)據(jù)庫(kù)選擇指南(oracle數(shù)據(jù)庫(kù)mysql)

在當(dāng)今數(shù)據(jù)爆炸的時(shí)代,選擇合適的數(shù)據(jù)庫(kù)管理系統(tǒng)是關(guān)鍵之一。當(dāng)我們?yōu)g覽各種網(wǎng)站的時(shí)候,我們可能總能看到“Oracle”和“MySQL”兩個(gè)詞,那么這兩者之間有怎樣的區(qū)別呢?該如何選擇適合自己項(xiàng)目的數(shù)據(jù)庫(kù)呢?本文將會(huì)對(duì)Oracle和MySQL進(jìn)行比較,從而幫助您選擇適合自己需要的數(shù)據(jù)庫(kù)系統(tǒng)。

Oracle與MySQL的背景

讓我們了解一下這兩者的背景。Oracle數(shù)據(jù)庫(kù)是由Oracle Corporation公司于1977年開(kāi)發(fā)的,是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。而MySQL則由瑞典程序員Michael Widenius和David Axmark創(chuàng)立的公司MySQL AB在1995年發(fā)布的,和Oracle一樣,也是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。

兩者之間的區(qū)別

Oracle和MySQL都是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),但它們之間有許多差異。

1. 支持程度與使用范圍

Oracle是一個(gè)支持程度相對(duì)比較高的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),可適用于大型企業(yè)的復(fù)雜應(yīng)用系統(tǒng)。而MySQL則更適合于小型項(xiàng)目的數(shù)據(jù)存儲(chǔ)。這是由于Oracle具有清晰的架構(gòu)、強(qiáng)大的事務(wù)處理、以及支持多個(gè)語(yǔ)言,因此被視為更為成熟且功能更齊全的數(shù)據(jù)庫(kù)系統(tǒng)。而MySQL則較為靈活的處理簡(jiǎn)單的查詢和數(shù)據(jù)存儲(chǔ),我們可以將MySQL看作是一種輕量級(jí)的數(shù)據(jù)庫(kù)管理系統(tǒng)。

2. 開(kāi)源 VS 專業(yè)商用

Oracle數(shù)據(jù)庫(kù)是一種商業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng),需要購(gòu)買(mǎi)許可才能使用。而MySQL則是一種開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng),能夠以免費(fèi)方式使用。需要注意的是,MySQL雖然是開(kāi)源的,但是在2023年Sun Microsystems被Oracle并購(gòu)后,MySQL也成為了Oracle的財(cái)產(chǎn)。

3. 處理數(shù)據(jù)的速度

如果我們需要在短時(shí)間內(nèi)處理較大的數(shù)據(jù),那么Oracle就顯得更為優(yōu)秀。Oracle數(shù)據(jù)庫(kù)提供了強(qiáng)大的存儲(chǔ)選項(xiàng),能夠以更高的速度處理大量數(shù)據(jù)請(qǐng)求。而MySQL則在處理大型數(shù)據(jù)時(shí),可能會(huì)變得無(wú)法承受。

4. 成本

使用Oracle數(shù)據(jù)庫(kù)會(huì)花費(fèi)更多的金錢(qián),這不僅是因?yàn)樗且环N商業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng),而且還因?yàn)樗枰嗟挠布蛦T工支持。相比之下,MySQL的成本就要低得多。

5. 安全性

安全性是選擇數(shù)據(jù)庫(kù)的重要的因素之一。在這方面,Oracle數(shù)據(jù)庫(kù)因其廣泛的安全特性而著名。這些安全特性包括密碼加密、訪問(wèn)控制和數(shù)據(jù)加密等。而MySQL雖然也有類似的安全特性,但它們與Oracle相比還是稍遜一籌。

那么該選擇哪個(gè)?

在選擇數(shù)據(jù)庫(kù)時(shí),您需要根據(jù)自己的需求進(jìn)行選擇。如果您的項(xiàng)目需要使用大型數(shù)據(jù)、高度安全的存儲(chǔ)環(huán)境以及高性能的處理方式,那么您可以選擇Oracle數(shù)據(jù)庫(kù)。如果您的需求相對(duì)較小,比如您的項(xiàng)目不需要處理大規(guī)模數(shù)據(jù),MySQL會(huì)更加適合。

不過(guò)如果僅僅是對(duì)數(shù)據(jù)存儲(chǔ)的研究,那么您可以嘗試使用兩者都有支持的SQL Server,它是由Microsoft公司開(kāi)發(fā)的一套關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),既支持Oracle數(shù)據(jù)庫(kù)也支持MySQL數(shù)據(jù)庫(kù)。

在選擇Oracle和MySQL中的某一個(gè)之前,您需要考慮自己項(xiàng)目的需求、預(yù)算和安全性等方面。如果您的項(xiàng)目需要高度安全、可靠的存儲(chǔ)、處理大規(guī)模數(shù)據(jù)或需要專業(yè)的支持團(tuán)隊(duì),那么您應(yīng)該選擇Oracle數(shù)據(jù)庫(kù)。而如果您的項(xiàng)目規(guī)模相對(duì)較小,需要處理的數(shù)據(jù)量不大,或是預(yù)算較小,MySQL是一個(gè)更加適合您的選擇。

當(dāng)然,每個(gè)項(xiàng)目都是獨(dú)特的,您需要根據(jù)自己項(xiàng)目的特點(diǎn)進(jìn)行選擇。希望本文對(duì)您在選擇數(shù)據(jù)庫(kù)方面有所幫助。

相關(guān)問(wèn)題拓展閱讀:

  • 如何將Oracle數(shù)據(jù)導(dǎo)入MySQL?

如何將Oracle數(shù)據(jù)導(dǎo)入MySQL?

可以導(dǎo)成文本格式的數(shù)據(jù),比如使用特殊的符號(hào)分隔:||,然后MySQL可以使用LOAD DATA 命令 或者mysqlimport工具導(dǎo)入,即可….關(guān)鍵四點(diǎn):

1.表結(jié)構(gòu)定義要對(duì)應(yīng);

2.數(shù)據(jù)分隔符號(hào)一定不在數(shù)據(jù)中出現(xiàn),否則格式就亂了;

3.數(shù)據(jù)導(dǎo)出的字符集編碼與需要存儲(chǔ)的字姿基符集編碼要對(duì)應(yīng)起來(lái);

4.導(dǎo)入的時(shí)候設(shè)置對(duì)應(yīng)的字符集;

備注:上述辦法是通過(guò)人工完成的,還有一些收費(fèi)工具可用的,你可以google下,還有一種跡拿謹(jǐn)辦法就是編寫(xiě)程序的模式,把數(shù)據(jù)讀出來(lái)再入MySQL.若敏爛是停機(jī)維護(hù),推薦已經(jīng)列出的方法。

OGG全稱腔納為Oracle GoldenGate,是由Oracle官方提供的用于解決異構(gòu)數(shù)據(jù)環(huán)境中數(shù)據(jù)復(fù)制的一個(gè)商業(yè)工具。相比于其它遷移工具OGG的優(yōu)勢(shì)在于可以直接解析源端Oracle的redo log,因此能夠?qū)崿F(xiàn)在不需要對(duì)原表結(jié)構(gòu)做太多調(diào)整的前提下完成數(shù)據(jù)增量部分的遷移。本篇文章將重點(diǎn)介紹如何使用OGG實(shí)現(xiàn)Oracle到MySQL數(shù)據(jù)的平滑遷移,以及講述個(gè)人在遷移過(guò)程中所碰到問(wèn)題的解決方案。

(一)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í)存放在磁盤(pán)上的數(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ù)變化,并寫(xiě)入本地Trail文件中

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

二、遷移方案

(一)環(huán)境信息

OGG版本    OGG 12.2.0.2.2 For Oracle    OGG 12.2.0.2.2 For MySQL    

數(shù)據(jù)庫(kù)版本    Oracle 11.2.0.4    MySQL 5.7.21    

OGG_HOME    /home/oracle/ogg    /opt/ogg    

(二)表結(jié)構(gòu)遷移

表結(jié)構(gòu)遷移屬于難度不高但內(nèi)容比較繁瑣的一步,我們?cè)谶w移表結(jié)構(gòu)時(shí)使用了一個(gè)叫sqlines的開(kāi)源工具,對(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é)束后開(kāi)啟增量數(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ù)。

1.源端OGG配置

(1)Oracle數(shù)據(jù)庫(kù)配置

針對(duì)Oracle數(shù)據(jù)庫(kù),OGG需要數(shù)據(jù)庫(kù)開(kāi)啟歸檔模式及增加輔助補(bǔ)充日志、強(qiáng)制記錄日志等來(lái)保障OGG可抓取到完整的日志信息

查看當(dāng)前環(huán)境是否滿足要求,輸出結(jié)果如下圖所示:

(2)Oracle數(shù)據(jù)庫(kù)OGG用戶創(chuàng)建

OGG需要有一個(gè)用戶有權(quán)限對(duì)數(shù)據(jù)庫(kù)的相關(guān)對(duì)象做操作,以下為涉及的權(quán)限,該示例將創(chuàng)建一個(gè)用戶名和密碼均為ogg的Oracle數(shù)據(jù)庫(kù)用戶并授予以下權(quán)限

(3)源端OGG 管理進(jìn)程(MGR)配置

(4)源端OGG 表級(jí)補(bǔ)全日磨宏志(trandata)配置

表級(jí)補(bǔ)全日志需要在最小補(bǔ)全日志打開(kāi)的情況下才起作用,之前只在數(shù)據(jù)庫(kù)級(jí)開(kāi)啟了最小補(bǔ)全日志(alter database add supplemental log data;),redolog記錄的信息還不夠全面,必須再使用add trandata開(kāi)啟表級(jí)伍游沒(méi)的補(bǔ)全日志以獲得必要的信息。

(5)源端OGG 抽取進(jìn)程(extract)配置

Extract進(jìn)程運(yùn)行在數(shù)據(jù)庫(kù)源端,負(fù)責(zé)從源端數(shù)據(jù)表或日志中捕獲數(shù)據(jù)。Extract進(jìn)程利用其內(nèi)在的checkpoint機(jī)制,周期性地檢查并記錄其讀寫(xiě)的位置,通常是寫(xiě)入到本地的trail文件。這種機(jī)制是為了保證如果Extract進(jìn)程終止或者操作系統(tǒng)宕機(jī),我們重啟Extract進(jìn)程后,GoldenGate能夠恢復(fù)到以前的狀態(tài),從上一個(gè)斷點(diǎn)處繼續(xù)往下運(yùn)行,而不會(huì)有任何數(shù)據(jù)損失。

(6)源端OGG 傳輸進(jìn)程(pump)配置

pump進(jìn)程運(yùn)行在數(shù)據(jù)庫(kù)源端,其作用非常簡(jiǎn)單。如果源端的Extract抽取進(jìn)程使用了本地trail文件,那么pump進(jìn)程就會(huì)把trail文件以數(shù)據(jù)塊的形式通過(guò)TCP/IP協(xié)議發(fā)送到目標(biāo)端,Pump進(jìn)程本質(zhì)上是Extract進(jìn)程的一種特殊形式,如果不使用trail文件,那么Extract進(jìn)程在抽取完數(shù)據(jù)后,直接投遞到目標(biāo)端。

補(bǔ)充:pump進(jìn)程啟動(dòng)時(shí)需要與目標(biāo)端的mgr進(jìn)程進(jìn)行連接,所以需要優(yōu)先將目標(biāo)端的mgr提前配置好,否則會(huì)報(bào)錯(cuò)連接被拒絕,無(wú)法傳輸抽取的日志文件到目標(biāo)端對(duì)應(yīng)目錄下

(7)源端OGG 異構(gòu)mapping文件(defgen)生成

該文件記錄了源庫(kù)需要復(fù)制的表的表結(jié)構(gòu)定義信息,在源庫(kù)生成該文件后需要拷貝到目標(biāo)庫(kù)的dirdef目錄,當(dāng)目標(biāo)庫(kù)的replica進(jìn)程將傳輸過(guò)來(lái)的數(shù)據(jù)apply到目標(biāo)庫(kù)時(shí)需要讀寫(xiě)該文件,同構(gòu)的數(shù)據(jù)庫(kù)不需要進(jìn)行該操作。

2.目標(biāo)端OGG配置

(1)目標(biāo)端MySQL數(shù)據(jù)庫(kù)配置

確認(rèn)MySQL端表結(jié)構(gòu)已經(jīng)存在

MySQL數(shù)據(jù)庫(kù)OGG用戶創(chuàng)建

mysql> create user ‘ogg’@’%’ identified by ‘ogg’;

mysql> grant all on *.* to ‘ogg’@’%’;

#### 提前創(chuàng)建好ogg存放checkpoint表的數(shù)據(jù)庫(kù)

mysql> create database ogg;

(2)目標(biāo)端OGG 管理進(jìn)程(MGR)配置

目標(biāo)端的MGR進(jìn)程和源端配置一樣,可直接將源端配置方式在目標(biāo)端重復(fù)執(zhí)行一次即可,該部分不在贅述

(3)目標(biāo)端OGG 檢查點(diǎn)日志表(checkpoint)配置

checkpoint表用來(lái)保障一個(gè)事務(wù)執(zhí)行完成后,在MySQL數(shù)據(jù)庫(kù)從有一張表記錄當(dāng)前的日志回放點(diǎn),與MySQL復(fù)制記錄binlog的GTID或position點(diǎn)類似。

#### 切換至ogg軟件目錄并執(zhí)行g(shù)gsci進(jìn)入命令行終端

shell> cd $OGG_HOME

shell> ggsci

ggsci> edit param ./GLOBALS

checkpointtable ogg.ggs_checkpoint

ggsci> dblogin sourcedb :3306 userid ogg

ggsci> add checkpointtable ogg.ggs_checkpoint

(4)目標(biāo)端OGG 回放線程(replicat)配置

Replicat進(jìn)程運(yùn)行在目標(biāo)端,是數(shù)據(jù)投遞的最后一站,負(fù)責(zé)讀取目標(biāo)端Trail文件中的內(nèi)容,并將解析其解析為DML語(yǔ)句,然后應(yīng)用到目標(biāo)數(shù)據(jù)庫(kù)中。

#### 切換至ogg軟件目錄并執(zhí)行g(shù)gsci進(jìn)入命令行終端

shell> cd $OGG_HOME

shell> ggsci

#### 添加一個(gè)回放線程并與源端pump進(jìn)程傳輸過(guò)來(lái)的trail文件關(guān)聯(lián),并使用checkpoint表確保數(shù)據(jù)不丟失

ggsci> add replicat r_cms,exttrail /opt/ogg/dirdat/ms,checkpointtable ogg.ggs_checkpoint

#### 增加/編輯回放進(jìn)程配置文件

ggsci> edit params r_cms

replicat r_cms

targetdb :3306,userid ogg,password ogg

sourcedefs /opt/ogg/dirdef/cms.def

discardfile /opt/ogg/dirrpt/r_cms.dsc,append,megabytes 1024

HANDLECOLLISIONS

MAP cms.*,target cms.*;

注意:replicat進(jìn)程只需配置完成,無(wú)需啟動(dòng),待全量抽取完成后再啟動(dòng)。

至此源端環(huán)境配置完成 

待全量數(shù)據(jù)抽取完畢后啟動(dòng)目標(biāo)端回放進(jìn)程即可完成數(shù)據(jù)準(zhǔn)實(shí)時(shí)同步。

3.全量同步配置

全量數(shù)據(jù)同步為一次性操作,當(dāng)OGG軟件部署完成及增量抽取進(jìn)程配置并啟動(dòng)后,可配置1個(gè)特殊的extract進(jìn)程從表中抽取數(shù)據(jù),將抽取的數(shù)據(jù)保存到目標(biāo)端生成文件,目標(biāo)端同時(shí)啟動(dòng)一個(gè)單次運(yùn)行的replicat回放進(jìn)程將數(shù)據(jù)解析并回放至目標(biāo)數(shù)據(jù)庫(kù)中。

(1)源端OGG 全量抽取進(jìn)程(extract)配置

#### 切換至ogg軟件目錄并執(zhí)行g(shù)gsci進(jìn)入命令行終端

shell> cd $OGG_HOME

shell> ggsci

#### 增加/編輯全量抽取進(jìn)程配置文件

#### 其中RMTFILE指定抽取的數(shù)據(jù)直接傳送到遠(yuǎn)端對(duì)應(yīng)目錄下

#### 注意:RMTFILE參數(shù)指定的文件只支持2位字符,如果超過(guò)replicat則無(wú)法識(shí)別

ggsci> edit params ei_cms

SOURCEISTABLE

SETENV (NLS_LANG = “AMERICAN_AMERICA.AL32UTF8”)

SETENV (ORACLE_SID=cms)

SETENV (ORACLE_HOME=/data/oracle/11.2/db_1)

USERID ogg@appdb,PASSWORD ogg

RMTHOST 17X.1X.84.121,MGRPORT 7809

RMTFILE /opt/ogg/dirdat/ms,maxfiles 100,megabytes 1024,purge

TABLE cms.*;

#### 啟動(dòng)并查看抽取進(jìn)程正常

shell> nohup ./extract paramfile ./dirprm/ei_cms.prm reportfile ./dirrpt/ei_cms.rpt &

## 查看日志是否正常進(jìn)行全量抽取

shell> tail -f ./dirrpt/ei_cms.rpt

(2)目標(biāo)端OGG 全量回放進(jìn)程(replicat)配置

#### 切換至ogg軟件目錄并執(zhí)行g(shù)gsci進(jìn)入命令行終端

shell> cd $OGG_HOME

shell> ggsci

ggsci> edit params ri_cms

SPECIALRUN

END RUNTIME

TARGETDB :3306,USERID ogg,PASSWORD ogg

EXTFILE /opt/ogg/dirdat/ms

DISCARDFILE ./dirrpt/ri_cms.dsc,purge

MAP cms.*,TARGET cms.*;

#### 啟動(dòng)并查看回放進(jìn)程正常

shell> nohup ./replicat paramfile ./dirprm/ri_cms.prm reportfile ./dirrpt/ri_cms.rpt &

#### 查看日志是否正常進(jìn)行全量回放

shell> tail -f ./dirrpt/ri_cms.rpt

三、數(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.編寫(xiě)類似于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ù)角度,提前編寫(xiě)好數(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行格式且開(kāi)啟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é)束后再打開(kāi)。

mysql>set global foreign_key_checks=off;

(二)全量與增量銜接

HANDLECOLLISIONS參數(shù)是實(shí)現(xiàn)OGG全量數(shù)據(jù)與增量數(shù)據(jù)銜接的關(guān)鍵,其實(shí)現(xiàn)原理是在全量抽取前先開(kāi)啟增量抽取進(jìn)程,抓去全量應(yīng)用期間產(chǎn)生的redo log,當(dāng)全量應(yīng)用完成后,開(kāi)啟增量回放進(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)有主鍵值的行

(三)OGG版本選擇

在OGG版本選擇上我們也根據(jù)用戶的場(chǎng)景多次更換了OGG版本,最初因?yàn)榭蛻舻腛racle 數(shù)據(jù)庫(kù)版本為11.2.0.4,因此我們?cè)谶x擇OGG版本時(shí)優(yōu)先選擇使用了11版本,但是使用過(guò)程中發(fā)現(xiàn),每次數(shù)據(jù)抽取生成的trail文件達(dá)到2G左右時(shí),OGG報(bào)錯(cuò)連接中斷,查看RMTFILE參數(shù)詳細(xì)說(shuō)明了解到trail文件默認(rèn)限制為2G,后來(lái)我們替換OGG版本為12.3,使用MAXFILES參數(shù)控制生成多個(gè)指定大小的trail文件,回放時(shí)Replicat進(jìn)程也能自動(dòng)輪轉(zhuǎn)讀取Trail文件,最終解決該問(wèn)題。但是如果不幸Oracle環(huán)境使用了Linux 5版本的系統(tǒng),那么你的OGG需要再降一個(gè)小版本,更高只能使用OGG 12.2。

(四)無(wú)主鍵表處理

在遷移過(guò)程中還碰到一個(gè)比較難搞的問(wèn)題就是當(dāng)前Oracle端存在大量表沒(méi)有主鍵。在MySQL中的表沒(méi)有主鍵這幾乎是不被允許的,因?yàn)楹苋菀讓?dǎo)致性能問(wèn)題和主從延遲。同時(shí)在OGG遷移過(guò)程中表沒(méi)有主鍵也會(huì)產(chǎn)生一些隱患,比如對(duì)于沒(méi)有主鍵的表,OGG默認(rèn)是將這個(gè)一行數(shù)據(jù)中所有的列拼湊起來(lái)作為唯一鍵,但實(shí)際還是可能存在重復(fù)數(shù)據(jù)導(dǎo)致數(shù)據(jù)同步異常,Oracle官方對(duì)此也提供了一個(gè)解決方案,通過(guò)對(duì)無(wú)主鍵表添加GUID列來(lái)作為行唯一標(biāo)示,具體操作方式可以搜索MOS文檔ID.1進(jìn)行查看。

(五)OGG安全規(guī)則

報(bào)錯(cuò)信息

:15:22  ERROR   OGGError reported by MGR : Access denied.

錯(cuò)誤信息含義源端報(bào)錯(cuò)表示為該抽取進(jìn)程需要和目標(biāo)端的mgr進(jìn)程通訊,但是被拒絕,具體操作為:源端的extract進(jìn)程需要與目標(biāo)端mgr進(jìn)行溝通,遠(yuǎn)程將目標(biāo)的replicat進(jìn)行啟動(dòng),由于安全性現(xiàn)在而被拒絕連接。

報(bào)錯(cuò)原因

在Oracle OGG 11版本后,增加了新特性安全性要求,如果需要遠(yuǎn)程啟動(dòng)目標(biāo)端的replicat進(jìn)程,需要在mgr節(jié)點(diǎn)增加訪問(wèn)控制參數(shù)允許遠(yuǎn)程調(diào)用

解決辦法

在源端和目標(biāo)端的mgr節(jié)點(diǎn)上分別增加訪問(wèn)控制規(guī)則并重啟

## 表示該mgr節(jié)點(diǎn)允許(ALLOW)10.186網(wǎng)段(IPADDR)的所有類型程序(PROG *)進(jìn)行連接訪問(wèn)ACCESSRULE, PROG *, IPADDR 10.186.*.*, ALLOW

(六)數(shù)據(jù)抽取方式

報(bào)錯(cuò)信息

:49:04  ERROR   OGGTrying to use RMTTASK on data types which may be written as LOB chunks (Table: ‘UNIONPAYCMS.CMS_OT_CONTENT_RTF’).

報(bào)錯(cuò)原因

根據(jù)官方文檔說(shuō)明,當(dāng)前直接通過(guò)Oracle數(shù)據(jù)庫(kù)抽取數(shù)據(jù)寫(xiě)到MySQL這種initial-load方式,不支持LOBs數(shù)據(jù)類型,而表 UNIONPAYCMS.CMSOTCONTENT_RTF 則包含了CLOB字段,無(wú)法進(jìn)行傳輸,并且該方式不支持超過(guò)4k的字段數(shù)據(jù)類型

解決方法

將抽取進(jìn)程中的RMTTASK改為RMTFILE參數(shù) 官方建議將數(shù)據(jù)先抽取成文件,再基于文件數(shù)據(jù)解析進(jìn)行初始化導(dǎo)入

  將Oracle數(shù)據(jù)導(dǎo)入MySQL的方法是使用MySQL Migration Toolkit實(shí)現(xiàn)的。

  1、 運(yùn)行MySQL Migration Toolkit,一路“Next”到“Source Database”,在Database System中選擇Oracle Database Server,如果之一次使用會(huì)告之要求加載驅(qū)動(dòng)程序ojdbc14.jar。

網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動(dòng)網(wǎng)站開(kāi)發(fā)制作等網(wǎng)站服務(wù)。


當(dāng)前文章:OracleVSMySQL:數(shù)據(jù)庫(kù)選擇指南(oracle數(shù)據(jù)庫(kù)mysql)
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/cdshphp.html