OGG:Oracle to MySQL异构复制环境搭建

来源:互联网 发布:ubuntu无法登录界面 编辑:程序博客网 时间:2024/05/16 09:26

环境介绍

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 oggorauid=501(oggora) gid=500(oinstall) groups=500(oinstall)vi .bash_profileexport ORACLE_SID=orclexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1export LD_LIBRARY_PATH=/ogg:$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/libPATH=/ogg4oracle:$HOME/bin:$PATHexport 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]$ ./ggsciGGSCI (ora11g) 1> create subdirs--配置全局参数文件GLOBALS,这个文件必须为大写,必须放在ogg的安装根目录下.--加上“./”表示在当前目录下创建,否则ogg会默认将配置文件创建在ogg安装目录下的dirprm子目录中.--在GLOBALS配置文件中添加GGSCHEMA参数,这个GGSCHEMA就是你的DDLuser,也就是我们的ogg Oracle数据库账户.GGSCI (ora11g) 2> edit params ./GLOBALSGGSCHEMA ogg4oGGSCI (ora11g) 1> edit params mgrport 7809dynamicportlist 7810-7820,7830autostart er r*autorestart er r*,retries 4,waitminutes 4startupvalidationdelay 5purgeoldextracts /ogg4oracle/dirdat/rt*,usecheckpoints,minkeephours 2GGSCI (ora11g) 3> start mgrGGSCI (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  NOSQL>  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用户,赋权限,修改数据库参数允许OGGSQL> 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/liliConnected.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 defgenuserid ogg4o password ogg4odefsfile /ogg4oracle/dirdef/oracle.deftable 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]$ ./ggsciGGSCI (mys56) 1> create subdirsGGSCI (mys56) 1> edit params ./GLOBALSGGSCHEMA ogg4mGGSCI (mys56) 2> edit params mgrport 9900dynamicportlist 9901-9920,9930autostart er *autorestart er *,retries 4,waitminutes 4startupvalidationdelay 5purgeoldextracts /ogg4mysql/dirdat/*,usecheckpoints,minkeephours 2ACCESSRULE, PROG *, IPADDR 192.168.5.*, ALLOWGGSCI (mys56) 3> start mgrGGSCI (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,sourceistableGGSCI (ora11g) 3> info extract *, task-- 配置初始化加载捕获参数文件GGSCI (ora11g) 3> edit params initextract inituserid ogg4o password ogg4ormthost 192.168.5.223,mgrport 9900rmttask replicat,group repinittable lili.*;

2.target端初始化捕获交付任务

-- 在target端创建一个初始化加载交付批处理任务组,确认添加成功:GGSCI (mys56) 3> add replicat repinit,specialrunGGSCI (mys56) 3> info replicat *,task-- 配置初始化加载交付参数文件GGSCI (mys56) 3> edit params repinitreplicat repinittargetdb ogg@192.168.5.223:3306 userid ogg4m password ogg4msourcedefs /ogg4mysql/dirdef/oracle.defdiscardfile /ogg4mysql/dirrpt/repinit.dsc,purgemap 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 ogg4oSuccessfully 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 ext1extract ext1userid ogg4o password ogg4oexttrail /ogg4oracle/dirdat/lttable 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 pump1extract pump1userid ogg4o, password ogg4ormthost 192.168.5.223, mgrport 9900rmttrail /ogg4mysql/dirdat/rtpassthrutable lili.*;

启动捕获进程和data pump进程

GGSCI (ora11g) 9> start ext1GGSCI (ora11g) 9> start pump1GGSCI (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 ogg4mSuccessfully 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 rep1replicat rep1targetdb ogg@192.168.5.223:3306 userid ogg4m password ogg4mhandlecollisionssourcedefs /ogg4mysql/dirdef/oracle.defdiscardfile /ogg4mysql/dirrpt/rep1.dsc,purgemap 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被再次启用。

测试在线数据同步

原创粉丝点击