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
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
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数据库的数据定义文件。
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
在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被再次启用。
测试在线数据同步