广州明生堂生物科技有限公司


如何使用 goldengate ogg 将mysql 数据库同步到 oracle 11g,配置实战

网络编程 如何使用 goldengate ogg 将mysql 数据库同步到 oracle 11g,配置实战 09-20

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 mgrPORT 1739DYNAMICPORTLIST  1740-1838AUTORESTART EXTRACT *,RETRIES 999,WAITMINUTES 3STARTUPVALIDATIONDELAY 5PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 3LAGREPORTHOURS 1LAGINFOMINUTES 30LAGCRITICALMINUTES 45

2.3抽取进程:extpr

> view param EXTTSextract exttssetenv(MYSQL_HOME="/usr/")sourcedb ogg@196.14.1.1:1306,userid  ogg,password oggtranlogoptions altlogdest /mysql/data/mdb-bin.indexdiscardfile ./dirrpt/extts.dsc,append,megabytes 1024exttrail ./dirdat/ts,format release 11.2gettruncatesdynamicresolutiontable 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 DPETSextract dpetssourcedb ogg@196.14.1.1:1306,userid  ogg,password  oggrmthost 196.14.1.2,mgrport 1839rmttrail ./dirdat/ts,format release 11.2gettruncatestable psd_bpm.testb;

因为目标端ogg为11g版本,需要在rmttrail 参数配置format release 11.2

2.5源端初始化参数文件:etsinit

> view param etsinitSOURCEISTABLEsetenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)sourcedb ogg@196.14.1.1:1306,userid  ogg,password  oggrmthost 196.14.1.2,mgrport 1839RMTFILE /ogg/dirdat/tsinit,FORMAT RELEASE 11.2, MEGABYTES 1024,PURGEtable psd_bpm.testb;

SOURCEISTALBE参数表示初始化加载进程直接从源表抽取数据。

RMTFILE参数配置初始化进程抽取的数据文件存放目标位置,为目标端的位置。目标端版本为11g,这里也要配置FORMAT RELEASE 11.2的选项。

2.6生成def文件

在ogg主目录新建一个rtsdef.prm文件

>vi rtsdef.prmdefsfile ./dirdef/rtsdef.def,purgesourcedb ogg@196.14.1.1:13306,userid  ogg,password oggtable psd.testb;

生成def文件

>./defgen paramfile rtsdef.prm

找到生成的rtsdef.def文件中的内容:

Database type: MYSQLCharacter set ID: UTF-8National character set ID: UTF-16Locale: en_USCase sensitivity: 00 00 00 22 22 00 00 00 00 00 00 00 11 00 00 00TimeZone: 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 reptsSETENV(ORACLE_SID = "ffdb")SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2/db_1")setenv (NLS_LANG=AMERICAN_AMERICA.UTF8)USERID ogg, PASSWORD oggREPORT AT 01:59REPORTCOUNT EVERY 30 MINUTES, RATEREPERROR DEFAULT, ABENDSOURCEDEFS ./dirdef/repts.defDISCARDFILE ./dirrpt/repts.dsc, APPEND, MEGABYTES 1024DISCARDROLLOVER AT 02:30GETTRUNCATESALLOWNOOPUPDATESHANDLECOLLISIONSmap psd.testb,target bpm.testb,KEYCOLS(TID);

跨版本同步,ogg initial load只能使用文件加载方式,初始化不设置检查点,因此入库进程启动前需要配置HANDLECOLLISIONS参数,忽略错误。

3.2目标端初始化进程repinit

> view param rtsinitSPECIALRUNEND RUNTIMEUSERID ogg, PASSWORD GG_yxcb161SOURCEDEFS ./dirdef/repts.defREPERROR DEFAULT,DISCARDEXTFILE /ogg/dirdat/tsinitmap 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 eventsWHEN FAILED : While reading log event from binary logWHERE FAILED : MySQLBinLog Reader ModuleCONTEXT 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文件大小不增长

解决方法:表名大小写问题,修改进程中的表名大小写与数据库字典中的一致


编辑:广州明生堂生物科技有限公司

标签:进程,初始化,大小写,文件,参数