OGG_mysql 12c複製到OGG_oracle 11g部署方案

linxueguo發表於2022-03-17

OGG_mysql 12c 複製到 OGG_oracle 11g 部署方案

1、 環境

源端資料庫: mysql 5.7.31

目標端資料庫: oracle 11.2.0.4

源端 ogg 介質: 122022_ggs_Linux_x64_MySQL_64bit

目標端 ogg 介質: Oracle-GoldenGate-11.2.1.0

注意:

1 )這裡源端使用 ogg 12.2.0.2 的版本,如果使用低版本,抽取程式啟動會報 600 錯誤

2 )目標端使用 11g 的版本,使用 ogg initial load 工具進行初始化,直接載入的方式不支援新增版本引數 FORMAT RELEASE 11.2 ,只能使用檔案載入方式進行初始化,效能相對較慢。因此,有條件的建議目標端也使用 12c 版本。

3 )雖然 mysql 端設定了表名大小寫不敏感的引數 lower_case_table_names=1 ,但是 ogg 對錶名大小寫依然敏感。

2 、源端配置

2.1 Mysql 引數許可權

ogg 相關的 Mysql 資料庫引數配置

binlog-format=ROW

log-bin=mysql-bin

需要同步的表要先授權

>GRANT INSERT, UPDATE, DELETE,select ON `psd`.`testb` TO 'ogg'@'%';

2.2 管理程式: mgr

> view param mgr
PORT 1739
DYNAMICPORTLIST  1740-1838
AUTORESTART EXTRACT *,RETRIES 999,WAITMINUTES 3
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45

 

2.3 抽取程式: extpr

> view param EXTTS
extract extts
setenv(MYSQL_HOME="/usr/")
sourcedb ogg@196.14.1.1:1306,userid  ogg,password ogg
tranlogoptions altlogdest /mysql/data/mdb-bin.index
discardfile ./dirrpt/extts.dsc,append,megabytes 1024
exttrail ./dirdat/ts,format release 11.2
gettruncates
dynamicresolution
table psd_bpm.testb;

MYSQL_HOME 可以透過執行 show variables like '%basedir%' 來確定

tranlogoptions altlogdest 配置的是 log-bin index 檔案,可以透過檢視 my.cnf 配置檔案確定,也可以執行 show variables like '%datadir%' 來確定

因為目標端 ogg 11g 版本,需要在 exttail 引數配置 format release 11.2

2.4 傳輸程式 :dpepr

> view param DPETS
extract dpets
sourcedb ogg@196.14.1.1:1306,userid  ogg,password  ogg
rmthost 196.14.1.2,mgrport 1839
rmttrail ./dirdat/ts,format release 11.2
gettruncates
table psd_bpm.testb;

因為目標端 ogg 11g 版本,需要在 rmttrail 引數配置 format release 11.2

2.5 源端初始化引數檔案 :etsinit

> view param etsinit
SOURCEISTABLE
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
sourcedb ogg@196.14.1.1:1306,userid  ogg,password  ogg
rmthost 196.14.1.2,mgrport 1839
RMTFILE /ogg/dirdat/tsinit,FORMAT RELEASE 11.2, MEGABYTES 1024,PURGE
table psd_bpm.testb;

SOURCEISTALBE 參數列示初始化載入程式直接從源表抽取資料。

RMTFILE 引數配置初始化程式抽取的資料檔案存放目標位置,為目標端的位置。目標端版本為 11g ,這裡也要配置 FORMAT RELEASE 11.2 的選項。

2.6 生成 def 檔案

ogg 主目錄新建一個 rtsdef.prm 檔案

>vi rtsdef.prm
defsfile ./dirdef/rtsdef.def,purge
sourcedb ogg@196.14.1.1:13306,userid  ogg,password ogg
table psd.testb;

生成 def 檔案

>./defgen paramfile rtsdef.prm

找到生成的 rtsdef.def 檔案中的內容:

Database type: MYSQL
Character set ID: UTF-8
National character set ID: UTF-16
Locale: en_US
Case sensitivity: 00 00 00 22 22 00 00 00 00 00 00 00 11 00 00 00
TimeZone: CST

這裡的 Case sensitivity 表示資料庫的表名大小寫是否敏感, mysql 資料庫引數檔案配置了 lower_case_table_names=1 ,表示大小寫不敏感,這裡對應的值就是表名大小寫不敏感。但是我們發現 ogg 11g 入庫程式對大小寫敏感, mysql 端生成的 def 檔案中的表名都是小寫,所以我們需要把這個值修改為大小寫敏感,其值可以參考 oracle 生產的 def 檔案。具體配置:

Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14

這裡如果不做修改,入庫程式引數檔案配置了 SOURCEDEFS 引數,啟動程式會報找不到表定義。這裡應該是 ogg 11g bug ogg 12c 已經修復了該問題,無需修改該值。

Ogg 11g 版本不支援 TimeZone: CST ,我們需要手動刪除該值。

3 、目標端配置

3.1 入庫程式 repts

> view param REPTS
 
REPLICAT repts
SETENV(ORACLE_SID = "ffdb")
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2/db_1")
setenv (NLS_LANG=AMERICAN_AMERICA.UTF8)
USERID ogg, PASSWORD ogg
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
SOURCEDEFS ./dirdef/repts.def
DISCARDFILE ./dirrpt/repts.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 02:30
GETTRUNCATES
ALLOWNOOPUPDATES
HANDLECOLLISIONS
map psd.testb,target bpm.testb,KEYCOLS(TID);

跨版本同步, ogg initial load 只能使用檔案載入方式,初始化不設定檢查點,因此入庫程式啟動前需要配置 HANDLECOLLISIONS 引數,忽略錯誤。

3.2 目標端初始化程式 repinit

> view param rtsinit
SPECIALRUN
END RUNTIME
USERID ogg, PASSWORD GG_yxcb161
SOURCEDEFS ./dirdef/repts.def
REPERROR DEFAULT,DISCARD
EXTFILE /ogg/dirdat/tsinit
map psd.testb,target bpm.testb,KEYCOLS(TID);

SPECIALRUN 表示將初始化程式實現為不使用檢查點的一次性執行

END RUNTIME 表示初始化程式在載入完成後終止

EXTFILE 配置源端傳過來的初始化資料檔案在本地的位置

4、 新增並啟動程式

4.1 新增程式

4.1.1 源端

> add extract extts,tranlog,begin now   
> add exttrail ./dirdat/ts,extract extts,MEGABYTES 512
> add extract dpets,exttrailsource ./dirdat/ts
> add rmttrail ./dirdat/ts,extract dpets,MEGABYTES 512

4.1.2 目標端

>add replicat repts,exttrail ./dirdat/ts,nodbcheckpoint

4.2 啟動程式

4.2.1 源端

啟動抽取和傳輸程式

>start extract extpr

>start extract dpepr

啟動初始化載入工具

>./extract paramfile dirprm/etsinit.prm reportfile ./dirrpt/estinitrp.log

etsinit.prm就是上面配置的初始化引數檔案,estinitrp.log為初始化載入日誌檔案。

跟蹤日誌estinitrp.log輸出:

Report at 2022-03-17 09:38:57 (activity since 2022-03-17 09:38:52)
Output to /ogg/oraogg/dirdat/tsinit:
From Table psd_bpm.testb:
       #                   inserts:        11
       #                   updates:         0
       #                   deletes:         0
       #                  discards:         0

看到上面的日誌,表示資料已經抽取完成,第一行為完成時間,要記住這個時間,入庫程式刪除HANDLECOLLISIONS引數就是以這個時間點作為標準,必須在這之後才能刪除。

4.2.2 目標端

啟動初始化載入工具

>./replicat paramfile dirprm/rtsinit.prm reportfile ./dirrpt/rstinitrp.log

載入完成後,啟動入庫程式

>start replicat repts

跟蹤觀察入庫程式,直到入庫到初始化抽取完成時間之後

>info replicat repts

刪除入庫程式中的HANDLECOLLISIONS引數,並重啟入庫程式

5 、問題解決

Q1 :啟動抽取程式報  error 600

2022-03-11 10:39:01  ERROR   OGG-00146  VAM function VAMRead returned unexpected result: error 600 - VAM Client Report <CAUSE OF FAILURE : Sanity Check Failed for events
WHEN FAILED : While reading log event from binary log
WHERE FAILED : MySQLBinLog Reader Module
CONTEXT OF FAILURE : No Information Available!>.

解決方法: 源端 mysql 使用 OGG-11.2.0.1 ,啟動抽取程式會報上面的錯誤,需要升級到 12.2.0.2 以上版本。

 

Q2 :入庫程式啟動報 ERROR   OGG-00303

2022-03-16 17:10:21  ERROR   OGG-00303  Problem at line 37.  Expecting file, table, or record definition: TimeZone: CST.
2022-03-16 17:10:21  ERROR   OGG-01668  PROCESS ABENDING.

解決方法: def 檔案使用 12c defgen 生成, ogg 11g 不支援 TimeZone: CST 引數,需要手動刪除該行。

Q3 :入庫程式啟動報 ERROR   OGG-00423

2022-03-14 15:59:01  ERROR   OGG-00423  Oracle GoldenGate Delivery for Oracle, repbpm.prm:  Could not find definition for psd_bpm.bpm_worklist_cur.
2022-03-14 15:59:01  ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle, repbpm.prm:  PROCESS ABENDING.

解決方法: 修改 def 檔案中的 case sensitivity

Case sensitivity: 00 00 00 22 22 00 00 00 00 00 00 00 11 00 00 00

改為

Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14

上面的是 mysql 的,表示大小寫不敏感

下面複製 oracle 的值,表示大小寫敏感

 

Q4 :抽取程式無資料生成

抽取程式啟動後不報錯, trail 檔案大小不增長

解決方法: 表名大小寫問題,修改程式中的表名大小寫與資料庫字典中的一致

 

Q5 :傳輸程式資料不傳輸

傳輸程式啟動後不報錯,目標端 trail 檔案大小不增長

解決方法: 表名大小寫問題,修改程式中的表名大小寫與資料庫字典中的一致


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31374736/viewspace-2871615/,如需轉載,請註明出處,否則將追究法律責任。

相關文章