配置ogg异构oracle到mysql

来源:这里教程网 时间:2026-03-03 18:30:35 作者:

最近研究了一下oracle Goldengate异构同步的过程, 真是几天不用手生,敲命令竟然如此生疏。不过还算顺利,经过一番折腾终于好了。

环境描述:

192.0.2.101( Oracle ) —> 192.0.2.102 (Mysql )

版本:

操作系统:redhat6.5

Oracle :  12.1.0.2.0

Mysql:     5.6.25

goldgate:

Version 12.2.0.1.1 for oracle

Version 12.2.0.1.1  for mysql

测试用户:   在oracle创建2个用户,并创建了2张表,同步到mysql test数据库下。

Oracle to Mysql 需要注意的地方:

Supported data types for mysql

CHAR

 DOUBLE

 TINYTEXT

 VARCHAR

 DATE

 MEDIUMTEXT

 INT

 TIME

 LONGTEXT

 TINYINT

 YEAR

 BLOB

 SMALL   INT

 DATETIME

 TINYBLOB

 MEDIUM   INT

 TIMESTAMP

 MEDIUMBLOB

 BIG   INT

 BINARY

 LONGBLOB

 DECIMAL

 VARBINARY

 ENUM

 FLOAT

 TEXT

 BIT(M)

Oracle GoldenGate supports InnoDB storage engine for a source MySQL database goldengate 对mysql只支持innodb引擎 所以,在创建mysql端的表的时候,要指定表为innodb引擎。但是5.6默认的存储引擎就是InnoDB。

 

一:Oracle端的基础配置

初始化ogg

/u01/ogg/dbhome

[oracle@host01 dbhome]$ ./ggsci

 

Oracle GoldenGate Command Interpreter for Oracle

Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401_FBO

Linux, x64, 64bit (optimized), Oracle 12c on Dec 12 2015 02:56:48

Operating system character set identified as UTF-8.

Copyright (C) 1995, 2015, Oracle and/or its affiliates. All rights reserved.

GGSCI (host01.example.com) 1>

GGSCI (host01.example.com) 9> create  subdirs

 

1.1. 修改oracle数据库的参数

1.2 修改数据库为归档模式

1.3 打开辅助日志

 alter database add supplemental log data

1.34 关闭回收站

alter system set recyclebin=off scope=both; (10g以后可以不关闭)

 

下面报错以上由于没设参数以及授予权限,

 OGG REPLICAT abend:

  ERROR   OGG-01820  Could not enable workspace.

  ERROR   OGG-01668  PROCESS ABENDING.

通过设置alter system set enable_goldengate_replication=true scope=both ;解决

 

1.5 创建复制用的用户,并授权

create  tablespace oggtb  datafile '/u01/app/oracle/oradata/PROD4/oggtb01.dbf'  size 1g ;

create  tablespace oggtb  datafile '/u01/app/oracle/oradata/EMREP/oggtb01.dbf'  size 1g ;

 create user ogg identified by ogg default  tablespace  oggtb; 

 grant connect,resource to ogg;

 grant unlimited tablespace to ogg;

 grant execute on utl_file to ogg;

在ogg的安装目录下登陆sqlplus,使用sys登陆sqlplus,然后执行如下配置

[oracle@local ~]$ sqlplus /nolog

SQL> conn / as sysdba

SQL> @marker_setup.sql

SQL> @ddl_setup.sql;

SQL> @role_setup.sql;

SQL> grant GGS_GGSUSER_ROLE to ogg;

SQL> @ddl_enable.sql;

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

GGSCI (local) 1> dblogin userid ogg

Password: ogg

Successfully logged into database.

由于异构数据库之间不支持ddl复制,mysql也没有Oracle使用的 sequence ,所以数据库上不需要启用DDL 复制支持和 Sequence 复制支持。(上边步骤可以省略)     二:target 端(Mysql)

2.1 配置Mysql参数

 Mysql 的引擎很多,但是OGG只支持Innodb 的引擎,所以需要修改mysql的配置文件开启 binary  logging, / etc / my.conf 文件中添加如下内容

log-bin=/u01/mysql/log/binary-log

log-bin-index=/u01/mysql/log/binary-log.index binlog_format = row

说明: 1 . 设为 row 使得dml语句以 binary 格式记入日志,任何其他日志格式(mixed或 statement )将引起 extract   进程停止。因为ogg支持InfoDB。            2 . 这里直接将Mysql默认的引擎改成INNODB了,当然也可以在创建表的时候修改。

 

-- 重启mysql数据库: [root@host02 ~]# msyqladmin shutdown [root@host02 ~]# mysqld_safe & 创建测试数据库test和表 zw ,tt   createtable  zw(id integer primarykey,name varchar(20)); mysql> create table  tt (id varchar(1)); Query OK, 0 rows affected (0.07 sec) 2.2   修改ogg参数 GGSCI (host02.example.com) 1> dblogin sourcedb test,userid root,password root123 GGSCI (host02.example.com) 1> edit params  mgr port 7808 GGSCI (host02.example.com) 2> info all   Program     Status      Group       Lag at Chkpt  Time Since Chkpt   MANAGER     RUNNING         三、配置同步source GGSCI (host01.example.com) 1> add extract extmy3,tranlog,begin now ADD EXTTRAIL /u01/ogg/dbhome/dirdat/E3, EXTRACT EXTMY3, megabytes 100      GGSCI (host01.example.com) 2> view param extmy3 extract extmy3 userid ogg,password ogg exttrail /u01/ogg/dbhome/dirdat/E3 table test.zw; table hr.tt; --fetchoptions fetchpkupdatecols   GGSCI (host01.example.com) 3>     在source 端添加 datapump进程   GGSCI (host01.example.com) 3> add extract pumpmy3,exttrailsource /u01/ogg/dbhome/dirdat/E3 add rmttrail  /u01/oggmysql/dirdat/R3,extract pumpmy3   GGSCI (host01.example.com) 4> view param pumpmy3   extract pumpmy3 rmthost 192.0.2.102,mgrport 7808 rmttrail /u01/oggmysql/dirdat/R3 passthru gettruncates table test.zw; table hr.tt;   info all   Program     Status      Group       Lag at Chkpt  Time Since Chkpt   MANAGER     RUNNING                                           EXTRACT     ABENDED     DPEA        00:00:00      95:05:49    EXTRACT     ABENDED     EXTA        00:00:00      95:05:54    EXTRACT     RUNNING     EXTMY3      00:00:00      00:00:08    EXTRACT     ABENDED     HRDPEA      00:00:00      95:05:49    EXTRACT     ABENDED     HREXTA      00:00:00      95:05:54    EXTRACT     RUNNING     PUMPMY3     00:00:00      00:00:05      配置     defegn 因为这里是oracle到mysql的同步,所以要生成异构的文件,并将文件复制到target端的dirdef目录下 在Oracle数据库执行           GGSCI (host01.example.com) 7> edit param defgen userid ogg,password ogg defsfile /u01/ogg/dbhome/dirdef/oracle.def table test.zw; table hr.tt  出现如下错: OGG-00396  Command not terminated by semi-colon. ERROR   OGG-01668  PROCESS ABENDING. 原因是配置文件中没有以分号结尾; 解决办法:修改配置文件。        defgen paramfile /u01/ogg/dbhome/dirprm/defgen.prm  scp oracle.def root@192.0.2.102:/u01/oggmysql/dirdef/   四: target 端配置replicat进程 修改mysql密码 target 端配置replicat进程 mysqladmin -u root password "root123" -- 创建 checkpointtable   GGSCI (host02.example.com DBLOGIN as root) 4> dblogin sourcedb test,userid root,password root123 Successfully logged into database.   add checkpointtable test.checkpoint GGSCI (host02.example.com DBLOGIN as root) 5> add replicat r3,exttrail /u01/oggmysql/dirdat/R3,checkpointtable test.checkpoint -- 修改参数   GGSCI (host02.example.com DBLOGIN as root) 6> view param R3   replicat  R3 dboptions host localhost,connectionport 3306 targetdb test,userid root,password root123 sourcedefs /u01/oggmysql/dirdef/oracle.def handlecollisions assumetargetdefs discardfile /u01/oggmysql/dirrpt/R3.dsc,append,megabytes 50 map test.zw,target test.zw; map  hr.tt,target test.tt;   GGSCI (host02.example.com DBLOGIN as root) 7> start  r3 五: 测试 SQL> insert into  hr.tt values ('3');   1 row created.   SQL> SQL> commit ; mysql> select * from test.tt; +------+ | id   | +------+ | 2    | | 2    | | 3    | +------+ 3 rows in set (0.00 sec) select * from test.zw ;           ID NAME ---------- --------------------          1 missa          2 rita          3 ardu   SQL> insert into test.zw  values (5,'ogg');   1 row created.   SQL> commit ;   Commit complete.   SQL> select * from test.zw ;           ID NAME ---------- --------------------          1 missa          2 rita          3 ardu          5 ogg select * from test.zw; +----+------+ | id | name | +----+------+ |  3 | ardu | +----+------+ 1 row in set (0.00 sec)   mysql> select * from test.zw; +----+------+ | id | name | +----+------+ |  3 | ardu | |  5 | ogg  | +----+------+ 2 rows in set (0.00 sec) delete from test.zw where  id='3';   1 row deleted.   SQL> commit ;   Commit complete.   SQL> /   Commit complete.   SQL> select * from test.zw ;           ID NAME ---------- --------------------          1 missa          2 rita          5 ogg mysql> select * from test.zw; +----+------+ | id | name | +----+------+ |  5 | ogg  | +----+------+ 1 row in set (0.00 sec) 至此,源端就配置完毕。

相关推荐