美文网首页数据库程序员Java学习笔记
Oracle GoldenGate实时同步oracle数据到my

Oracle GoldenGate实时同步oracle数据到my

作者: 献给记性不好的自己 | 来源:发表于2017-03-29 18:50 被阅读2444次

    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管理控制台
    Paste_Image.png
    2.2.3、在ogg控制台输入命令: create subdirs ,让ogg创建其需要用到的目录
    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 保存退出


    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.


    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管理控制台


    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)

    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
    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


    Paste_Image.png

    Info all


    Paste_Image.png
    3.1.7、配置抽取进程

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


    Paste_Image.png

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


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

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


    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


    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;


    Paste_Image.png
    add extract push1,exttrailsource /u01/ogg/11.2/dirdat/xs
    Paste_Image.png

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


    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

    Paste_Image.png
    并将生成的/u01/ogg/11.2/dirdef/ah4.prm 传到目的端的相应目录中去
    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

    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
    Paste_Image.png
    start mgr
    Paste_Image.png
    info all
    Paste_Image.png
    3.2.5、配置checkpoint table

    edit params ./GLOBALS


    Paste_Image.png

    CHECKPOINTTABLE user.checkpoint


    Paste_Image.png
    登录
    dblogin SOURCEDB user,userid root
    Paste_Image.png

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


    Paste_Image.png
    Paste_Image.png
    add checkpointtable user.checkpointtab
    Paste_Image.png
    info checkpointtable user.checkpointtab
    Paste_Image.png
    查看mysql,可以看到相应的表被添加了
    Paste_Image.png
    3.2.6、配置应用进程

    edit params rep3


    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;


    Paste_Image.png
    add replicat rep3,exttrail /u01/ogg/11.2/dirdat/xs,checkpointtable user.checkpointtab
    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
    Paste_Image.png
    Paste_Image.png
    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.*;
    --代表所有表


    Paste_Image.png

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

    相关文章

      网友评论

        本文标题:Oracle GoldenGate实时同步oracle数据到my

        本文链接:https://www.haomeiwen.com/subject/syqjottx.html