環境介紹
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.*;
-- Mysql與Oracle數據庫登陸數據庫不同的地方在於需要用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被再次啓用。
測試在線數據同步