Oracle 使用OGG(Oracle GoldenGate) 实现19c PDB与MySQL5.7 数据同步

OGG 是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化。

OracleMysql
IP address192.168.80.100192.168.80.16
DB version19.2.05.7
host nametempmysql

OS version: CentOS 7.9

一,Oracle 服务器上的准备工作。

1.在oracle服务器上创建ogg 用户以及工作目录

su - root

useradd ogg -g oinstall

passwd ogg

mkdir -p /opt/ogg

chown -R ogg /opt/ogg

mkdir -p /home/oracle/oradata/OGG/ORCLCDB

mkdir -p /home/oracle/oradata/OGG/tablespace

chown -R oracle:oinstall /home/oracle/oradata/OGG

2.安装ogg软件

su - ogg

将ogg安装包 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip 传到/home/ogg下

unzip -d ~ 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip

cd fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response/

编辑 oggcore.rsp

更新以下行:

INSTALL_OPTION=ORA19C
SOFTWARE_LOCATION=/opt/ogg/source_endpoint

cd ..

./runInstaller -silent -nowait -responseFile /home/ogg/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response/oggcore.rsp

3.编辑ogg用户环境变量

export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

export OGG_HOME=/opt/ogg/source_endpoint/
export PATH=$OGG_HOME:$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
alias ggsci='cd $OGG_HOME;ggsci'

source ~/.bashrc使其生效:

4.建立软链接


ln -s $ORACLE_HOME/lib/libnnz19.so /opt/ogg/source_endpoint/libnnz19.so
cd $OGG_HOME

ldd ggsci

5.检查归档

su - oracle

mkdir /home/oracle/archivelog

sqlplus / as sysdba

archive log list

6.开启oracle ogg

alter system set enable_goldengate_replication=true;

7.创建c##ogg所需要的表空间

创建c##ogg所需要的表空间:

create tablespace oggtbs datafile '/home/oracle/oradata/OGG/tablespace/oggtbs01.dbf' size 1000M autoextend on;

并在上面创建c##ogg用户:

create user c##ogg identified by ogg default tablespace oggtbs;

赋予权限:

grant dba ,connect, resource, unlimited tablespace to c##ogg;

exec dbms_goldengate_auth.grant_admin_privilege('c##ogg','*',TRUE);

select username,common,con_id from cdb_users where username like '%OGG%';

commit;

8.检查pdb状态

9.给c##ogg用户赋权限

grant dba ,connect, resource, unlimited tablespace to c##ogg;

10.编辑$TNS_ADMIN下的 tnsnames.ora文件

pdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.100)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =pdb)
    )
  )

11.创建ogg所需要的表空间

create tablespace mytbs datafile '/home/oracle/oradata/OGG/tablespace/mytbs01.dbf' size 500M autoextend on;

并在上面创建ogg用户:

create user ogg identified by ogg default tablespace mytbs;

赋予权限:

grant dba ,connect, resource, unlimited tablespace to ogg;

exec dbms_goldengate_auth.grant_admin_privilege('ogg','*',TRUE);

select username,common,con_id from cdb_users where username like '%OGG%';

commit;

12.验证ogg可以正常登录PDB数据库

13.创建ogg子目录

su - ogg
ggsci
create subdirs

14.切换到oracle用户,创建一个test_ogg用户

create user test_ogg identified by ogg ;

grant dba ,connect, resource, unlimited tablespace to test_ogg;

quit

切换到test_ogg用户登录PDB

sqlplus test_ogg/ogg@PDB

create table test_ogg(id int,name varchar(20),primary key(id));

15.

切换到ogg用户:



cd $OGG_HOME

ggsci

edit param ./globals

填写以下内容

oggschema ogg

16.输入以下内容

dblogin userid ogg@PDB password ogg

add schematrandata PDB.test_ogg

add trandata test_ogg.*

capture tabledef test_ogg.*

17.OGG源端管理进程MGR配置:

edit param mgr

添加以下内容

PORT 7809

18.OGG源端抽取进程extoracle配置

edit param extorcl
extract extorcl

DDL INCLUDE ALL

SETENV (ORACLE_HOME = "/u01/app/oracle/product/19.2.0/db_1")
SETENV (ORACLE_SID="orcl")
SETENV (NLS_LANG="american_america.AL32UTF8")
userid c##ogg@orcl , password ogg
exttrail /opt/ogg/source_endpoint/dirdat/to
table PDB.test_ogg.*;

19.

OGG源端传输进程pumysql配置

edit param pumysql

加入以下内容
extract pumysql
userid c##ogg@orcl, password ogg
rmthost 192.168.80.16,mgrport 7810
rmttrail /opt/ogg/target_endpoint/dirdat/rt
table PDB.test_ogg.*;

20.

delete extract pumysql

add extract pumysql, exttrailsource /opt/ogg/source_endpoint/dirdat/to

add rmttrail /opt/ogg/target_endpoint/dirdat/rt, extract pumysql, megabytes 100

info all

21.把这些全启动

start mgr

start extorcl

start pumysql

其实可以看到现在Time Since Chkpt 这里是有问题的,没有及时的重置时间,因为我们mysql那边还没有进行配置

22.

edit param tab1

defsfile /opt/ogg/source_endpoint/dirdef/ogg_test.ogg_test
userid test_ogg@PDB, password ogg
table test_ogg.test_ogg;

23.

quit

./defgen paramfile dirprm/tab1.prm  

二,Mysql服务器上的准备工作。

1.安装Mysql步骤这里不做描述。

2.创建ogg用户

create user 'ogg'@'%' identified by 'ogg';

grant all on *.* to 'ogg'@'%';

3.创建目的端ogg用户:ogg2

useradd ogg2

passwd ogg2

su - ogg2

4.将ogg for mysql安装包 传到/home/ogg2下

unzip -d ~ ./213000_ggs_Linux_x64_MySQL_64bit.zip

5.创建工作目录

mkdir /opt/ogg/target_endpoint

chown -R ogg2 /opt/ogg/target_endpoint

6.切换回ogg2用户:

tar -xvf ggs_Linux_x64_MySQL_64bit.tar -C /opt/ogg/target_endpoint

7.编辑环境变量

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export JAVA_HOME=$HOME/jdk1.8.0_141
export PATH=$JAVA_HOME/bin:$PATH

export OGG_HOME=/opt/ogg/target_endpoint
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$OGG_HOME/lib:$HOME/libs

export PATH=$OGG_HOME:$PATH
alias ggsci='cd $OGG_HOME;ggsci'

8.

cd $OGG_HOME

ggsci

create subdirs

9.edit param mgr

这个端口要和一.19步要对应上

10.OGG目的端检查点日志表checkpoint配置

edit param ./GLOBALS

添加如下内容

CHECKPOINTTABLE ogg.checkpoint

11.

创建MySQL的ogg用户:

drop user ogg;

create user 'ogg'@'%' identified by 'ogg';

grant all on *.* to 'ogg'@'%';

创建checkpoint所需的ogg库:

create database ogg;
use ogg

create table test_ogg(id int,name varchar(20),primary key(id));

12.

将上次生成的 /opt/ogg/source_endpoint/dirdef/ogg_test.ogg_test 文件拷贝到 $OGG_HOME/dirdef下:

cp /opt/ogg/source_endpoint/dirdef/ogg_test.ogg_test /opt/ogg/target_endpoint/dirdef/ogg_test.ogg_test

目标端:

13.进入ggsci命令行



dblogin sourcedb ogg@127.0.0.1:3306 ,userid ogg, password ogg

add checkpointtable ogg.ggs_checkpoint

14.edit params r_tab1  这里重中之重,所参考文档 这一步是有问题的。

replicat r_tab1
targetdb ogg@192.168.80.16:3306,userid ogg,password ogg
sourcedefs /opt/ogg/target_endpoint/dirdef/ogg_test.ogg_test
HANDLECOLLISIONS
MAP PDB.test_ogg.*,target ogg.test_ogg;

翻译过来就是,我理解的意思就是源表你指定了要同步一个PDB的内容,但是params r_tab1这个文件里面却没指定,所以MAP 后面应该是PDB.test_ogg.*。之前参考的文档有些许错误。

15.

dblogin sourcedb ogg@127.0.0.1:3306 ,userid ogg, password ogg

delete replicat r_tab1

add replicat r_tab1,exttrail /opt/ogg/target_endpoint/dirdat/rt,checkpointtable ogg.ggs_checkpoint

info all

start mgr

start r_tab1

16. 关于排错的体会。

首先看一下RBA是否是有值的,如果是0,证明数据没同步过来,解决思路是看一下Log Read Checkpoint 这个目录里面的文件名字是否对上了。

info all

看一下 Time Since Chkpt 每隔十几秒钟会不会清零,如果没清零,则肯定是有报错,去看日志,

view ggsevt

同时在Oracle这边 PUMYSQL组也Time Since Chkpt也应该十几秒清零一次,做检查点。

一般来讲,如果Time Since Chkpt 一直没清零,则几分钟后该程序就会停止。

最后,检查数据是否同步:

使用OGG实现Oracle 19C到MySQL 5.7的数据同步(1) - 知乎 (zhihu.com)

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值