OGG:Oracle to MySQL異構複製環境搭建

環境介紹

source:
Oracle RDBMS 11.2.0.4
OGG for oracle OGG-12.2.0.1
IP:192.168.5.221
OS user:oggora
安裝目錄:/ogg4oracle
OGG數據庫用戶:ogg4o
OGG數據庫表空間:oggtbs
數據庫測試賬戶:lili

target:
MySQL 5.6.37
OGG for mysql OGG-12.2.0.1
IP:192.168.5.223
OS user:oggmy
安裝目錄:/ogg4mysql
OGG數據庫用戶:ogg4m
測試數據庫:lili
OGG自用數據庫:ogg

source端環境準備:

1.創建操作系統賬戶oggora,該用戶要與數據庫系統賬戶同組以能訪問相關文件。
設置環境變量

[root@ora11g ~]# useradd -g oinstall oggora
[root@ora11g ~]# id oggora
uid=501(oggora) gid=500(oinstall) groups=500(oinstall)

vi .bash_profile
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export LD_LIBRARY_PATH=/ogg:$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib

PATH=/ogg4oracle:$HOME/bin:$PATH
export PATH

2.創建ogg安裝目錄,安裝ogg軟件
由於是ogg 12.x版本,需要用圖形界面安裝,這裏爲了偷懶,使用響應文件靜默安裝,反正也只有兩個參數要填。

[root@ora11g ~]# mkdir /ogg4oracle
[root@ora11g ~]# chown ogg:oinstall /ogg4oracle

[oggora@ora11g ~]# unzip fbo_ggs_Linux_x64_shiphome.zip
[oggora@ora11g ~]# tar xvf fbo_ggs_Linux_x64_shiphome.tar

[oggora@ora11g Disk1]# ./runInstaller -silent -responseFile /home/oggora/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
 > 響應文件中指定INSTALL_OPTION=ORA11g,SOFTWARE_LOCATION=/ogg4oracle

3.創建ogg子目錄,配置全局參數文件,配置並啓動mgr

[oggora@ora11g ogg4oracle]$ ./ggsci
GGSCI (ora11g) 1> create subdirs

--配置全局參數文件GLOBALS,這個文件必須爲大寫,必須放在ogg的安裝根目錄下.
--加上“./”表示在當前目錄下創建,否則ogg會默認將配置文件創建在ogg安裝目錄下的dirprm子目錄中.
--在GLOBALS配置文件中添加GGSCHEMA參數,這個GGSCHEMA就是你的DDLuser,也就是我們的ogg Oracle數據庫賬戶.

GGSCI (ora11g) 2> edit params ./GLOBALS
GGSCHEMA ogg4o

GGSCI (ora11g) 1> edit params mgr
port 7809
dynamicportlist 7810-7820,7830
autostart er r*
autorestart er r*,retries 4,waitminutes 4
startupvalidationdelay 5
purgeoldextracts /ogg4oracle/dirdat/rt*,usecheckpoints,minkeephours 2

GGSCI (ora11g) 3> start mgr

GGSCI (ora11g) 4> info mgr

4.配置oracle數據庫,開啓歸檔,附加日誌,force logging

SQL> select LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
LOG_MODE     FOR SUPPLEME
------------ --- --------
ARCHIVELOG   NO  NO

SQL>  alter database force logging;
Database altered.

SQL> alter database add supplemental log data;
Database altered.

SQL> select LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
LOG_MODE     FOR SUPPLEME
------------ --- --------
ARCHIVELOG   YES YES

5.創建ogg表空間,數據庫用戶,測試用戶,測試表

--創建表空間,數據庫OGG用戶,賦權限,修改數據庫參數允許OGG
SQL> create tablespace oggtbs datafile '/u01/app/oracle/oradata/orcl/oggtbs.dbf' size 2G autoextend off;
Tablespace created.

SQL> create user ogg4o identified by ogg4o default tablespace oggtbs;
User created.

SQL> grant connect,resource,dba to ogg4o;
Grant succeeded.

SQL> exec dbms_goldengate_auth.grant_admin_privilege('OGG4O');
PL/SQL procedure successfully completed.

SQL> ALTER SYSTEM SET enable_goldengate_replication=TRUE;
 > 將source數據庫的enable_goldengate_replication參數設置爲true,否則無法複製.
 > 這個參數是在11.2.0.4版本開始纔有的,這個參數主要用來控制新的數據類型和操作的輔助日誌的複製.
 > 以前這些提取是由輔助記錄DDL來控制的,現在這個參數也必須被設置爲true來啓用輔助日誌的請求.
 > 這個參數默認是false的,我們需要將它設置爲true。


-- 創建測試用戶及測試數據
SQL>  create user lili identified by lili;
User created.

SQL> grant resource,connect to lili;
Grant succeeded.

SQL> conn lili/lili
Connected.
SQL> create table tt (id number primary key,name varchar2(20));

Table created.

SQL> begin 
  2  for i in 1..10000 loop
  3   insert into tt values(i,'sdfs'||i);
  4  end loop;                           
  5  commit;
  6  end;   
  7  /

PL/SQL procedure successfully completed.

SQL> create table gg (dd number,kk date);

Table created.

6.創建source端Oracle數據庫需要複製同步的數據定義文件,拷貝到target端相應目錄下。

-- 配置數據定義文件參數
GGSCI (ora11g) 5> edit params defgen
userid ogg4o password ogg4o
defsfile /ogg4oracle/dirdef/oracle.def
table lili.*;
-- 生成數據定義文件
[oggora@ora11g ogg4oracle]$ ./defgen paramfile dirprm/defgen.prm 
-- 拷貝生成的數據定義文件到目標端數據定義目錄下
[oggora@ora11g dirdef]$ scp oracle.def oggmy@192.168.5.223:/ogg4mysql/dirdef

target端環境準備:

1.創建操作系統用戶

[root@mys56 ~]# useradd oggmy

2.安裝ogg軟件,配置並啓動mgr

[root@mys56 ~]# mkdir /ogg4mysql
[root@mys56 ~]# chown oggmy:oggmy /ogg4mysql
[oggmy@mys56 ogg4mysql]$ unzip ggs_Linux_x64_MySQL_64bit.zip
[oggmy@mys56 ogg4mysql]$ tar xvf ggs_Linux_x64_MySQL_64bit.tar

[oggmy@mys56 ogg4mysql]$ ./ggsci
GGSCI (mys56) 1> create subdirs

GGSCI (mys56) 1> edit params ./GLOBALS
GGSCHEMA ogg4m

GGSCI (mys56) 2> edit params mgr
port 9900
dynamicportlist 9901-9920,9930
autostart er *
autorestart er *,retries 4,waitminutes 4
startupvalidationdelay 5
purgeoldextracts /ogg4mysql/dirdat/*,usecheckpoints,minkeephours 2
ACCESSRULE, PROG *, IPADDR 192.168.5.*, ALLOW

GGSCI (mys56) 3> start mgr
GGSCI (mys56) 4> info mgr

3.創建target端測試數據庫和相應的表,創建ogg的用戶,賦予權限,創建ogg用到的數據庫。

-- 創建測試數據庫及表
-- 注意Mysql數據庫是大小寫敏感的,而Oracle數據庫對大小寫不敏感。
-- 並且Oracle數據庫會把所有的小寫字符內部都轉換成大寫
-- 所以要注意在映射到Mysql時要麼Mysql中將表全部建成大寫
-- 要麼就是在使用Map映射是將每個表的對應關係寫清楚,否則複製會失敗。
mysql> create database lili;
mysql> use lili;
mysql> create table GG(dd int,kk date);
mysql> create table TT(id int primary key, name varchar(20));

-- 創建OGG自己用的數據庫及用戶
mysql> create database ogg;
mysql> grant all on *.*  to 'ogg4m'@'%' identified by 'ogg4m';
mysql> flush privileges

初始化加載配置

1.source端初始化捕獲處理任務

-- 在source系統上執行以下命令添加一個Extract進程叫做init,確認添加成功:
GGSCI (ora11g) 3> add extract init,sourceistable
GGSCI (ora11g) 3> info extract *, task

-- 配置初始化加載捕獲參數文件
GGSCI (ora11g) 3> edit params init
extract init
userid ogg4o password ogg4o
rmthost 192.168.5.223,mgrport 9900
rmttask replicat,group repinit
table lili.*;

2.target端初始化捕獲交付任務

-- 在target端創建一個初始化加載交付批處理任務組,確認添加成功:
GGSCI (mys56) 3> add replicat repinit,specialrun
GGSCI (mys56) 3> info replicat *,task

-- 配置初始化加載交付參數文件
GGSCI (mys56) 3> edit params repinit
replicat repinit
targetdb [email protected]:3306 userid ogg4m password ogg4m
sourcedefs /ogg4mysql/dirdef/oracle.def
discardfile /ogg4mysql/dirrpt/repinit.dsc,purge
map lili.*,target lili.*;

-- MysqlOracle數據庫登陸數據庫不同的地方在於需要用targetdb指定登陸的數據庫。
-- 由於是異構環境,所以要指定sourcedefs參數,使用source數據庫的數據定義文件。

change capture 配置

1.source端添加extract組
原本想用integrated tranlog,無奈需要打補丁,太麻煩,偷懶用了classic的tranlog

GGSCI (ora11g) 3> add extract ext1,tranlog,begin now

如果是integrated tranlog需要如下配置

GGSCI (ora11g) 3> add extract ext1,integrated tranlog,begin now
由於我們使用的是Integrated捕獲方式,所以我們必須將Extract進程註冊到數據庫中:
GGSCI (ora11g) 9> dblogin userid ogg4o password ogg4o
Successfully logged into database.

GGSCI (ora11g as ogg4o@orcl) 10> register extract ext1 database

定義本地trail與Extract的鏈接關係:

GGSCI (ora11g) 9> add exttrail /ogg4oracle/dirdat/lt,extract ext1

確認結果

GGSCI (ora11g) 9> info extract ext1

創建Extract參數文件

GGSCI (ora11g) 9> edit params ext1
extract ext1
userid ogg4o password ogg4o
exttrail /ogg4oracle/dirdat/lt
table lili.*;

添加data pump進程

GGSCI (ora11g) 9> add extract pump1,exttrailsource /ogg4oracle/dirdat/lt,begin now

定義remote trail與data pump的鏈接關係

GGSCI (ora11g) 9> add rmttrail /ogg4mysql/dirdat/rt,extract pump1
-- 注意此處rmttrail 指定的路徑是target端的路徑

創建data pump參數文件

GGSCI (ora11g) 9> edit params pump1
extract pump1
userid ogg4o, password ogg4o
rmthost 192.168.5.223, mgrport 9900
rmttrail /ogg4mysql/dirdat/rt
passthru
table lili.*;

啓動捕獲進程和data pump進程

GGSCI (ora11g) 9> start ext1
GGSCI (ora11g) 9> start pump1
GGSCI (ora11g) 9> info all

Change Delivery配置

在target系統上創建checkpoint table
與Oracle數據庫登陸數據庫不同的地方在於需要加上sourcedb這個參數指定登陸的數據庫。

GGSCI (mys56) 2> dblogin sourcedb ogg@192.168.5.223:3306 userid ogg4m password ogg4m
Successfully logged into database.
GGSCI (mys56 DBLOGIN as ogg4m) 3> add checkpointtable ogg.checkpoint_table

添加一個Replicat組用於在線同步複製應用

GGSCI (mys56) 2> add replicat rep1,exttrail /ogg4mysql/dirdat/rt,checkpointtable ogg.checkpoint_table

創建一個Replicat參數文件

GGSCI (mys56) 2> edit params rep1
replicat rep1
targetdb ogg@192.168.5.223:3306 userid ogg4m password ogg4m
handlecollisions
sourcedefs /ogg4mysql/dirdef/oracle.def
discardfile /ogg4mysql/dirrpt/rep1.dsc,purge
map lili.*,target lili.*;

由於是異構環境,所以要指定sourcedefs參數,使用source數據庫的數據定義文件。
handlecollisions參數來處理初始化加載的結果與實時改變同步捕獲數據的衝突。

初始化數據加載

source端
start init

target端查看初始化數據加載複製進程的報告確認加載成功
view report repinit

進入mysql數據庫查詢數據,進一步驗證

數據改變同步

source端修改數據
target端啓動rep1
驗證數據
確認初始化數據加載完成後關閉改變同步Replicat進程rep1的handlecollisions。

 send rep1,nohandlecollisions

並將rep1參數文件中的handlecollisions參數去除,防止rep1下次啓動時handlecollisions被再次啓用。

測試在線數據同步

發佈了107 篇原創文章 · 獲贊 22 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章