Oracle GoldenGate实时同步oracle数据到mysql

1、简介

本文是配置使用OGG实时同步oracle数据到mysql

2、Oracle GoldenGate安装

2.1、Oracle GoldenGate下载

Oracle GoldenGate(下文简称ogg)软件可以通过ORACLE官方网站进行下载,根据ORACLE的版本及操作系统来下载对应版本的ogg,官方下载地址:
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
oracle端安装包:fbo_ggs_Linux_x64_ora11g_64bit.tar
mysql端安装包:ggs_Linux_x64_MySQL_64bit.tar

2.2、Oracle GoldenGate 源端(ORACLE)安装

OGG安装非常简单,但需在源数据库和目标数据库服务器上均安装ogg软件即可

2.2.1 、将压缩包解压到系统目录/u01/ogg/11.2 (该路径可以根据需要自行选择)
2.2.2、进入/u01/ogg/11.2目录,运行./ggsci,进入ogg管理控制台

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

2.2.3、在ogg控制台输入命令: create subdirs ,让ogg创建其需要用到的目录

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

2.2.4、 登录到oracle创建复制用的用户,并授权

–创建相应表空间
[oracle@local ~]$ sqlplus “/ as sysdba”
SQL> create tablespace oggtbs datafile ‘/home/oracle/app/oradata/oggtbs01.dbf’ size 500M autoextend on;
SQL> create user ggs identified by ggs default tablespace oggtbs;
SQL> GRANT create table to ggs;
SQL> GRANT CONNECT TO ggs;
SQL> GRANT ALTER ANY TABLE TO ggs;
SQL> GRANT ALTER SESSION TO ggs;
SQL> GRANT CREATE SESSION TO ggs;
SQL> GRANT FLASHBACK ANY TABLE TO ggs;
SQL> GRANT SELECT ANY DICTIONARY TO ggs;
SQL> GRANT SELECT ANY TABLE TO ggs;
SQL> GRANT RESOURCE TO ggs;
SQL> GRANT DELETE ANY TABLE TO ggs;
SQL> GRANT INSERT ANY TABLE TO ggs;
SQL> GRANT UPDATE ANY TABLE TO ggs;
SQL> GRANT RESTRICTED SESSION TO ggs;

2.2.5、登陆到ogg,执行初始化

输入ggschema ggs 保存退出

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

2.2.6、 为新创建的ogg用户执行配置脚本

在ogg的安装目录下登陆sqlplus,使用sys登陆sqlplus,然后执行如下配置
[oracle@local ~]$ sqlplus “/ as sysdba”
SQL> @marker_setup.sql —输入ggs
SQL> @ddl_setup.sql; —输入ggs
SQL> @role_setup.sql; —输入ggs
SQL> grant GGS_GGSUSER_ROLE to ggs;
SQL> @ddl_enable.sql;
SQL>@sequence.sql;
GGSCI (local) 1> dblogin userid ggs
Password: ggs
Successfully logged into database.

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

2.2.7、进入ogg控制台,测试用户是否创建成功

GGSCI (local) 1> dblogin userid ggs
Password: ggs
Successfully logged into database.

2.3、Oracle GoldenGate 目标端(mysql)安装

2.3.1 、将压缩包解压到系统目录/u01/ogg/11.2 (该路径可以根据需要自行选择)
2.3.2、进入/u01/ogg/11.2目录,运行./ggsci,进入ogg管理控制台

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

2.3.3、在ogg控制台输入命令: create subdirs ,让ogg创建其需要用到的目录

通过上述步骤,ogg就安装成功了。

3、配置

先讲下OGG中一些概念:
1、 Manager:ogg所有服务必须依赖Manager,Manger如同ogg的总调度。
2、 Extract :ogg用来获取源数据库数据更新的,将变更的数据发送到目标数据库
3、 Replicat :ogg用来接收源数据库的更新,一旦源数据库Extract将数据发送过来后,Replicat会自动将更新脚本同步到目标数据库。

3.1、源端(ORACLE)服务器配置

3.1.1、开启ORACLE归档模式,设置日志模式

查询日志是否开启的命令

archive log list
select force_logging from v$database;

开启日志
[oracle@local ~]$ sqlplus “/ as sysdba”
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database force logging;
SQL> alter database add supplemental log data;
SQL> alter database open;

3.1.2、 回收站功能会影响同步,需要关闭回收站

—查询oracle回收站状态
SELECT Value FROM V$parameter WHERE Name = ‘recyclebin’;
—关闭回收站  
SQL>alter session set recyclebin=off;
SQL>alter system set recyclebin=off;

3.1.3、配置环境变量NLS_LANG(不配置中文同步会乱码)

首先在oracle中查询select userenv( ‘language’) from dual;
然后将查询的结果配置到linux环境变量中
如export NLS_LANG=” SIMPLIFIED CHINESE_CHINA.ZHS16GBK”

3.1.4、登陆ogg控制台,设置需要进行同步的oracle表

运行./ggsci
GGSCI (local) 1> dblogin userid user
GGSCI (local) 1> add trandata dbuser.user

3.1.5、配置mgr

edit param mgr(配置界面操作类似vi)

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

输入如下参数:

PORT 7809

DYNAMICPORTLIST 7810-7909

–AUTOSTART ER *

AUTORESTART EXTRACT
,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/
,usecheckpoints, minkeepdays 3

LAGREPORTHOURS 1

LAGINFOMINUTES 30

LAGCRITICALMINUTES 45

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

MANAGER进程参数配置说明:

PORT:指定服务监听端口;这里以7809为例,默认端口为7809

DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口;

COMMENT:注释行,也可以用–来代替;

AUTOSTART:指定在管理进程启动时自动启动哪些进程;

AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;

PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。

LAGREPORT、LAGINFO、LAGCRITICAL:

定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。

3.1.6、启动mgr,并查看状态

start mgr

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

Info all

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

3.1.7、配置抽取进程

edit params ext1(修改ext1的配置参数)

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

输入如下参数:
extract ext1
dynamicresolution
userid ggs,password ggs
exttrail /u01/ogg/11.2/dirdat/xs
table dbuser.user;

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

add extract ext1,tranlog,begin now(增加一个抽取进程ext1,ext1名字可以根据需要修改)

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

add exttrail /u01/ogg/11.2/dirdat/xs,extract ext1(将ext1抽取的源数据变更数据写到该文件夹)

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

ext的模板可以是:

EXTRACT extmb

setenv (NLS_LANG = “AMERICAN_AMERICA.UTF8”)

SETENV (ORACLE_HOME = “/u01/oracle/product/11.2.0/db_1”)

SETENV (ORACLE_SID = “orcl”)

USERID ggs, PASSWORD ggs

–GETTRUNCATES

REPORTCOUNT EVERY 1 MINUTES, RATE

DISCARDFILE ./dirrpt/extmb.dsc,APPEND,MEGABYTES 1024

–THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENS 60000

DBOPTIONS ALLOWUNUSEDCOLUMN

WARNLONGTRANS 2h,CHECKINTERVAL 3m

EXTTRAIL ./dirdat/mb
–TRANLOGOPTIONS EXCLUDEUSER USERNAME
FETCHOPTIONS NOUSESNAPSHOT
TRANLOGOPTIONS CONVERTUCS2CLOBS
TABLE hr.emp;
SETENV:配置系统环境变量
USERID/ PASSWORD: 指定OGG连接数据库的用户名和密码
COMMENT:注释行,也可以用–来代替;
TABLE:定义需复制的表,后面需以;结尾
TABLEEXCLUDE:定义需要排除的表,如果在TABLE参数中使用了通配符,可以使用该参数指定排除掉得表。
GETUPDATEAFTERS|IGNOREUPDATEAFTERS:
是否在队列中写入后影像,缺省复制
GETUPDATEBEFORES| IGNOREUPDATEBEFORES:
是否在队列中写入前影像,缺省不复制
GETUPDATES|IGNOREUPDATES:
是否复制UPDATE操作,缺省复制
GETDELETES|IGNOREDELETES:
是否复制DELETE操作,缺省复制
GETINSERTS|IGNOREINSERTS:
是否复制INSERT操作,缺省复制
GETTRUNCATES|IGNORETRUNDATES:
是否复制TRUNCATE操作,缺省不复制;

3.1.8、配置投递进程

edit params push

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

extract push1
passthru
dynamicresolution
userid ggs,password ggs
rmthost 192.168.0.166,mgrport 7809 —-目标服务器ip
rmttrail /u01/ogg/11.2/dirdat/xs —-目标服务器的文件夹
table dbuser.user;

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

add extract push1,exttrailsource /u01/ogg/11.2/dirdat/xs

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

add rmttrail /u01/ogg/11.2/dirdat/xs,extract push1

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

push的模板:

EXTRACT pushmb

SETENV (NLS_LANG = “AMERICAN_AMERICA.UTF8”)

USERID ggs, PASSWORD ggs

PASSTHRU

RMTHOST 192.168.0.165, MGRPORT 7809, compress

RMTTRAIL /u01/ogg/11.2/dirdat/xs

TABLE hr.ah4;

RMTHOST:指定目标系统及其Goldengate Manager进程的端口号,还用于定义是否使用压缩进行传输,本例中的compress为压缩传输;

RMTTRAIL:指定写入到目标断的哪个队列;

EXTTRAIL:指定写入到本地的哪个队列;

SQLEXEC:在extract进程运行时首先运行一个SQL语句;

PASSTHRU:禁止extract进程与数据库交互,适用于Data Pump传输进程;

REPORT:定义自动定时报告;
STATOPTIONS:定义每次使用stat时统计数字是否需要重置;
REPORTCOUNT:报告已经处理的记录条数统计数字;
TLTRACE:打开对于数据库日志的跟踪日志;
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
DBOPTIONS:指定对于某种特定数据库所需要的特殊参数;
TRANLOGOPTIONS:指定在解析数据库日志时所需要的特殊参数,例如:对于裸设备,可能需要加入以下参数 rawdeviceoggset 0
WARNLONGTRANS:指定对于超过一定时间的长交易可以在gsserr.log里面写入警告信息,本处配置为每隔3分钟检查一次场交易,对于超过2小时的进行警告;

3.1.9、去相应的目录下生产define文件:

./defgen paramfile dirprm/ah4.prm

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

并将生成的/u01/ogg/11.2/dirdef/ah4.prm 传到目的端的相应目录中去

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

</p>

3.1.10、启动ogg extract命令

GGSCI (local) 1> start extract ext1 (等目标服务器ogg配置成功后再启动ext)
GGSCI (local) 1> start extract push1 (等目标服务器ogg配置成功后再启动push)

通过上述步骤,源端配置完毕

3.2、目标端(mysql)服务器配置

3.2.1、因为复制需要二进制日志,所以启动mysql的时候需要启用二进制日志

mysqld_safe –user=mysql –log-bin=/tmp/binlog.001 –log-bin-index=/tmp/binlog.index –max-binlog-size=10M –binlog-do-db=mysql &

3.2.2、创建数据库

mysql>create database dbuser;
mysql>use dbuser;

3.2.3、创建表

OGG对mysql只支持innodb引擎
mysql>create table user(id int ,name varchar(10),primary key(id)) engine=innodb;

3.2.4、配置mgr

edit params mgr

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

PORT 7809

DYNAMICPORTLIST 7810-7909

–AUTOSTART ER *

AUTORESTART EXTRACT
,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/
,usecheckpoints, minkeepdays 3

LAGREPORTHOURS 1

LAGINFOMINUTES 30

LAGCRITICALMINUTES 45

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

start mgr

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

info all

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

3.2.5、配置checkpoint table

edit params ./GLOBALS

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

CHECKPOINTTABLE user.checkpoint

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

登录

dblogin SOURCEDB user,userid root

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

由于OGG默认是找/tmp/mysql.sock文件,而mysql的socket文件没有放在/tmp目录下,可以使用软链接解决个问题
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

add checkpointtable user.checkpointtab

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

info checkpointtable user.checkpointtab

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

查看mysql,可以看到相应的表被添加了

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

3.2.6、配置应用进程

edit params rep3

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

replicat rep3
sourcedefs /u01/ogg/11.2/dirdef/ah4.prm
SOURCEDB hr,userid root,password 123456
reperror default,discard
discardfile /u01/ogg/11.2/dirrpt/rep4.dsc,append,megabytes 50
map dbuser.user, target dbuser.user;

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

add replicat rep3,exttrail /u01/ogg/11.2/dirdat/xs,checkpointtable user.checkpointtab

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

REPLICAT进程参数配置说明:
ASSUMETARGETDEFS:假定两端数据结构一致使用此参数;
SOURCEDEFS:假定两端数据结构不一致,使用此参数指定源端的数据结构定义文件,该文件需要由GlodenGate工具产生。
MAP:用于指定源端与目标端表的映射关系;
MAPEXCLUDE:用于使用在MAP中使用*匹配时排除掉指定的表;
REPERROR:定义出错以后进程的响应,一般可以定义为两种:
ABEND,即一旦出现错误即停止复制,此为缺省配置;
DISCARD,出现错误后继续复制,只是把错误的数据放到discard文件中。
DISCARDFILE:定义discardfile文件位置,如果处理中油记录出错会写入到此文件中;
SQLEXEC:在进程运行时首先运行一个SQL语句;
GROUPTRANSOPS:将小交易合并成一个大的交易进行提交,减少提交次数,降低系统IO消耗。
MAXTRANSOPS:将大交易拆分,每XX条记录提交一次。

3.2.7、最后把ORACLE端的EXT1,PUSH1和MYSQL端的REP31都start

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

</p>

通过上述步骤,目标端配置完毕

4、维护

4.1、OGG常用命令

1、 启动manager:start manager
2、 启动extract:start extract extn
3、 启动replicat:start replicat repn
4、 停止manager:stop manager
5、 停止 extract:stop extract extn
6、 停止replicat:stop replicat repn
7、 删除extract:delete extract extn
8、 删除replicat:delete extract repn
9、 查看ogg状态:info all
10、 修改manager参数:edit params mgr
11、 修改extract参数:edit params extn
12、 修改replicat参数:edit params repn
13、 修改全局参数:edit params ./GLOBAL

4.2、 OGG日志路径

$OGG_HOME/ggserr.log

4.3、 OGG开机自启

1、用oracle用户建立/oracle/ogg/autostart/info.txt,文件内容如下:
sh dat
start mgr
2、chmod x info.txt
3、用oracle用户建立/oracle/ogg/autostart/startmgr.sh,文件内如下:
/oracle/ogg/ggsci paramfile /oracle/ogg/autostart/info.txt >> /oracle/ogg/autostart/log.txt
4、chmod x startmgr.sh
5、用root用户编辑 /etc/rc.local ,添加如下信息:
su – oracle -c “/oracle/ogg/autostart/startmgr.sh”

4.3、mgr配置说明

在ogg中主进程是manager进程,使用startmgr启动。可以在mgr进程中添加一些参数用来在启动mgr进程的同时启动extract和replicat进程。
1、以下是extract端的mgr参数配置
GGSCI (gg01) 130> edit params mgr
PORT 7809
DYNAMICPORTLIST 7800-7909
–启动mgr进程启动启动extract进程
AUTOSTART EXTRACT *
–extract异常终止时会自动启动,每5分钟尝试重新启动所有的extract进程,一共尝试3次,5分钟清零
AUTORESTART EXTRACT *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 10
2、配置目标端replicat进程自启动,在mgr参数中添加如下
GGSCI (gg02) 140> edit params mgr

PORT 7809
–动态端口,当指定端口不可用时,会从以下列表中选择一个可用端口
DYNAMICPORTLIST 7800-7909
–自动启动replicat进程
AUTOSTART REPLICAT *
–当replicat进程异常终止时会自动启动,每5分钟尝试重新启动所有的replicat进程,一共尝试5次
AUTORESTART REPLICAT , WAITMINUTES 2, RETRIES 5
–mgr每隔1小时检查extract延时情况,超5分钟作为信息记录log中,超过7分钟作为警告记录log中
LAGREPORTHOURS 1
LAGINFOMINUTES 5
LAGCRITICALMINUTES 7
–删除10天前的trail文件
PURGEOLDEXTRACTS /oracle/ogg/dirdat/
, USECHECKPOINTS, MINKEEPDAYS 10

配置时需要注意的:

1、源端配置生成定义文件处理(配置多个表时)
edit param defgen
DEFSFILE ./dirdef/defgen.prm
userid ggs,password ggs
TABLE HR.*;
–代表所有表

《Oracle GoldenGate实时同步oracle数据到mysql》 Paste_Image.png

./defgen paramfile dirprm/defgen.prm
生成定义文件
2、还有个坑,就是同步多张表到mysql时,需要MySQL创建的数据库和表都是大写,不然报错。

    原文作者:献给记性不好的自己
    原文地址: https://www.jianshu.com/p/53882229b70e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞