配置ogg異構oracle到mysql

pingdanorcale發表於2023-03-15

最近研究了一下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

 

四: 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)

至此,源端就配置完畢。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10201716/viewspace-2939705/,如需轉載,請註明出處,否則將追究法律責任。

相關文章