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被再次启用。

测试在线数据同步

你可能感兴趣的:(OGG)