使用OGG从ORACLE到MYSQL的数据同步

作者简介:高文博,OCM,从事ORACLE专业15年,主要服务于各大升级运营商。现任职北京海天起点技术服务股份有限公司山东办事处主任,为山东省内企事业客户提供海量级ORACLE数据库及相关产品的运维支持,参与出版《Oracle云管理平台——企业管理器12c实战指南》一书。

背景:

已有源端ORACLE到ORACLE的数据同步,由于业务需要,需添加源端ORACLE到目标端MYSQL的数据同步,本操作不包含源端抽取进程的配置。

部署OGG for MYSQL

http://edelivery.oracle.com选择golden gate for non oracle database11.2.0.1,继续后可以选择for mysql 5.x下载。
将介质上传至服务器指定目录,root用户解压,进入ggsci

配置MYSQL端mgr

数据初始化

ORACLE端

配置direct load抽取进程

异构数据库需使用defgen生成指定sourcedefs/targetdefs文件

到$GGATE_HOME下生成defgen文件

./defgen paramfile ./dirprm/defgen.prm NOEXTATTR –//NOEXTATTR,不同版本ogg,不同表结构,需要此参数,11.2版本以后支持此参数

将mt.def 复制到目标端$GGATE_HOME/dirdef/下

MYSQL端

在MYSQL中创建表结构和索引

而且要创建innodb引擎的表,注意oracle中的number对应int,varchar2对应varchar,数据类型的转换。

在实际操作中,生产表中有一个字段是DJXH NUMBER(20),20位数字,一开始我对应了int,但在mysql中int类型只有10位数字


使用bigint类型,才可以

BIGINT 
-9223372036854775808 – 9223372036854775807 
BIGINT UNSIGNED 
0 – 18446744073709551615

但实际操作中,使用bigint也报错,是因为bigint默认19位,一位是符号位,只有在创建表时指定UNSIGNED关键字才能达到20位数字。
create table test(id bigint(20) UNSIGNED not null);

配置复制进程

测试连接mysql数据库

没有/tmp/mysql.sock,实际位置在/etc/my.cnf里有,是在/var/lib/mysql/mysql.sock

修改后,本地mysql登录有问题,只能创建一个软连接,可以正常连接数据库了。

MYSQL数据库中给root用户赋权

MYSQL端启动Manager

源端开启抽取和传送进程

源端:在生产系统中进行初始化时,会因为数据量大导致初始化时间特别长,在实际操作中,160万数据,初始化大概需要10个小时,还没包含lob等特殊字段,因此,必须在初始化之前就开启传送进程。

查看TO ORACLE的传送进程

当前trail文件为c000001,是1号文件,RBA2431

查看MYSQL传送进程

指定从当前文件及块号读取

Mysql传送进程读的trail文件是0号文件,不满足我们的同步需求,因此,需要指定从1号文件2431块开始读取。

ORACLE端启动 初始化进程EX1

查看日志输出

验证初始化数据

配置数据同步

ORACLE端

源端由于有抽取进程,只需新加一个推送进程

MYSQL端

配置GLOBAL

添加一个复制进程

源端启动传递进程

MYSQL端启动复制进程

数据验证:

源端

目标端

源端删除数据

目标端检查

 

 

未经允许不得转载:Oracle一体机用户组 » 使用OGG从ORACLE到MYSQL的数据同步

相关推荐