zoukankan      html  css  js  c++  java
  • Oracle使用goldengate分别向Oracle和mysql双路的单向复制

    一.Oracle分别向Oracle和mysql双路的单向复制是在:

    ORACLE-mysql的单向复制基础上做的。http://blog.csdn.net/q947817003/article/details/13294937

    二.分别再在ORACLE主库及ORACLE目标库上增加相应进程

    ORACLE源端增加:

    1.增加配置extract进程

    按顺序执行以下操作:
    add extract extora,tranlog, begin now

    目标端文件的位置--这里要注意rmttrail指的是目标端的路径。
    add rmttrail /u01/ogg/dirdat/ot, extract extora

    edit params extora
    在打开的编辑窗口写入
    extract extora
    userid ogg, password ogg
    rmthost 192.168.1.213, mgrport 7809
    rmttrail /u01/ogg/dirdat/ot
    table test5.test5;
    ##################################################

    2.目标端增加replicat进程:

    -----我这里MYSQL目标库和ORACLE目标库在同一台虚拟机,如果是同样情况要要注意:
    OGG FOR MYSQL和OGG FOR ORACLE安装在不同目录,并且所涉及的MGR及接收、抽取进程都是独立的。
    相关的进程都需要单独启动。
    同时要注意OGG FOR MYSQL和OGG FOR ORACLE两个主进程要运行在不同的端口,如我的OGG FOR ORACLE运行在7809.  OGG FOR MYSQL运行在7810
    逐次输入以下命令:
    dblogin userid ogg,password ogg
    add checkpointtable ogg.checkpoint           ###########如果之前已经配置过增加这个表,就不需要执行这一句。
    add replicat repora,exttrail /u01/ogg/dirdat/ot, checkpointtable ogg.checkpoint

    edit params repora
    在弹出编辑窗口输入以下:---我这里只设置了同步test5用户的test5表

    试中再建立。
    replicat repora
    handlecollisions
    assumetargetdefs
    userid ogg,password ogg
    discardfile /u01/ogg/dirdat/repora_discard.txt,append, megabytes 10
    map test5.test5, target test5.test5;

    三、在ORACLE目标库创建用户及表,并启动主及目标库的OGG进程。

    1. ORACEL目标数据库中创建用户和表所使用的语句如下:
    使用DBA用户执行 create user test5 identified by test5;
    grant connect,resource to test5;
    conn test5/test5
    create table test5(aa int primary key);

    2.启动主及目标库的OGG进程
    涉及语句大致如下:
    start mgr
    start extract extmysql  或start   extmysql
    start  replicat repmysql   或start  repmysql
    start extract extora  或start   extora
    start  replicat repora   或start  repora

    3.进程 启动后的状态如下:
    ORACLE主库OGG进程:  --只用不用 了EXTMYSQL  EXTORA两个,其它的是其它复制测试用的,不用管。--以下的OGG进程同理。
    GGSCI (bys001.oel.com) 21> info all
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING                                          
    EXTRACT     ABENDED     EXT1        00:00:00      26:20:26   
    EXTRACT     ABENDED     EXT3        00:00:00      26:18:25   
    EXTRACT     RUNNING     EXTMYSQL    07:39:30      00:00:04   
    EXTRACT     RUNNING     EXTORA      00:00:00      00:08:28   
    EXTRACT     ABENDED     PUMP3       00:00:00      26:20:29   
    REPLICAT    ABENDED     REP2        00:00:00      26:18:29

    MYSQL目标库OGG进程:
    GGSCI (bys2.oel.com) 4> info all
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING                                          
    REPLICAT    RUNNING     REPMYSQL    00:00:00      00:00:00

    ORACLE目标库OGG进程:
    GGSCI (bys2.oel.com) 14> info all
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING                                          
    EXTRACT     ABENDED     EXT2        00:00:00      26:19:06   
    REPLICAT    ABENDED     REP1        00:00:00      26:18:59   
    REPLICAT    ABENDED     REP3        00:00:00      26:18:58   
    REPLICAT    RUNNING     REPORA      00:00:00      00:00:
    所涉及的OGG相关进程均正常运行。

    四、同步测试

    注:下面测试中在统计SQL语句执行时间中是不准确的,比如下面的语句

    00:19:21 TEST5@bys1>insert into test5 values(333);
    1 row created.
    00:19:50 TEST5@

    如果统计插入语句的执行时间,应该统计执行完语句的返回的下一个命令提示符中的时间,即00:19:50,而不是00:19:21。目前没实验环境,暂且这样。

    1.在源库做插入操作:

      --源库已经有两条数据,是在做ORACLE-mysql的单向复制时留下的,这里不清除,
    测试可以看到,新增加的ORACLE目标库中初始没有这两条数据,我的配置里OGG也不会自动同步源库与目标库表中存在的数据。
    TEST5@bys1>select * from test5;
            AA
    ----------
           100
           200
    TEST5@bys1>set time on
    00:19:21 TEST5@bys1>insert into test5 values(333);
    1 row created.
    00:19:50 TEST5@bys1>commit;   

    Commit complete.

    00:19:53 TEST5@bys1>---注意记录一下提交的时间,方便在目标库查看数据同步情况。

    2.目标ORACLE库查询数据同步情况:

    ---因为目标库内数据未做初始化,原库有两条数据100和200.目标库未初始化这些数据。--可以手动插入那两条数据即可。
    [oracle@bys2 mysqlogg]$ sqlplus test5/test5
    TEST5@bys2>set time on
    00:19:32 TEST5@bys2>select * from test5;
    no rows selected
    00:19:54 TEST5@bys2>select * from test5;   -
    no rows selected
    00:19:57 TEST5@bys2>select * from test5;  ---可以看到,主库提交后延迟有4秒钟多。
            AA
    ----------
           333

    3.目标MYSQL库同步情况:

    [oracle@bys2 mysqlogg]$ mysql -u root -p oggtest
    Enter password:
    mysql> select * from test5;
    +-----+
    | aa  |
    +-----+
    | 100 |
    | 200 |
    | 333 |
    +-----+
    3 rows in set (0.00 sec)
    mysql> select * from chktab;             ----查询这个表, audit_ts  列在OACLE源库发出COMMIT后就有了更新。 last_update_ts列是在00:19:54秒,和ORACLE目标库一样是有4秒多的延迟了。                                                                                            
    +------------+------------+-------+------+----------------------------+---------------------+---------------------+---------------+
    | group_name | group_key  | seqno | rba  | audit_ts                   | create_ts           | last_update_ts      | current_dir   |
    +------------+------------+-------+------+----------------------------+---------------------+---------------------+---------------+
    | REPMYSQL   | 2345303211 |     2 | 1218 | 2013-08-31 00:19:50.795556 | 2013-08-30 14:14:31 | 2013-08-31 00:19:54 | /u01/mysqlogg |
    +------------+------------+-------+------+----------------------------+---------------------+---------------------+---------------+
    1 row in set (0.00 sec)

  • 相关阅读:
    Docker入门之二镜像
    巧用Freemarker的自定义方法
    freemarker空值的多种处理方法
    ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
    Mingyang.net:自定义FreeMarkerView
    hibernate one-to-many many-to-one 双向注解
    Mingyang.net:Controller必需是public吗?
    Mingyang.net:org.springframework.context.annotation.ConflictingBeanDefinitionException
    Mingyang.net:No identifier specified for entity
    jQuery:find()及children()的区别
  • 原文地址:https://www.cnblogs.com/pangblog/p/3395325.html
Copyright © 2011-2022 走看看