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管理控制台
2.2.3、在ogg控制台输入命令: create subdirs ,让ogg创建其需要用到的目录
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 保存退出
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.
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管理控制台
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)
输入如下参数:
PORT 7809
DYNAMICPORTLIST 7810-7909
--AUTOSTART ER *
AUTORESTART EXTRACT ,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
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
Info all
3.1.7、配置抽取进程
edit params ext1(修改ext1的配置参数)
输入如下参数:
extract ext1
dynamicresolution
userid ggs,password ggs
exttrail /u01/ogg/11.2/dirdat/xs
table dbuser.user;
add extract ext1,tranlog,begin now(增加一个抽取进程ext1,ext1名字可以根据需要修改)
add exttrail /u01/ogg/11.2/dirdat/xs,extract ext1(将ext1抽取的源数据变更数据写到该文件夹)
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
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;
add extract push1,exttrailsource /u01/ogg/11.2/dirdat/xs
add rmttrail /u01/ogg/11.2/dirdat/xs,extract push1
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
并将生成的/u01/ogg/11.2/dirdef/ah4.prm 传到目的端的相应目录中去
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
PORT 7809
DYNAMICPORTLIST 7810-7909
--AUTOSTART ER *
AUTORESTART EXTRACT ,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
start mgr
info all
3.2.5、配置checkpoint table
edit params ./GLOBALS
CHECKPOINTTABLE user.checkpoint
登录
dblogin SOURCEDB user,userid root
由于OGG默认是找/tmp/mysql.sock文件,而mysql的socket文件没有放在/tmp目录下,可以使用软链接解决个问题
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
add checkpointtable user.checkpointtab
info checkpointtable user.checkpointtab
查看mysql,可以看到相应的表被添加了
3.2.6、配置应用进程
edit params rep3
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;
add replicat rep3,exttrail /u01/ogg/11.2/dirdat/xs,checkpointtable user.checkpointtab
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
通过上述步骤,目标端配置完毕
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.*;
--代表所有表
./defgen paramfile dirprm/defgen.prm
生成定义文件
2、还有个坑,就是同步多张表到mysql时,需要MySQL创建的数据库和表都是大写,不然报错。