OGG 是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化。
Oracle | Mysql | |
IP address | 192.168.80.100 | 192.168.80.16 |
DB version | 19.2.0 | 5.7 |
host name | temp | mysql |
OS version: CentOS 7.9
一,Oracle 服务器上的准备工作。
1.在oracle服务器上创建ogg 用户以及工作目录
su - rootuseradd ogg -g oinstallpasswd oggmkdir -p /opt/oggchown -R ogg /opt/oggmkdir -p /home/oracle/oradata/OGG/ORCLCDBmkdir -p /home/oracle/oradata/OGG/tablespacechown -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_PATHexport 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_HOMEldd ggsci
5.检查归档
su - oraclemkdir /home/oracle/archivelogsqlplus / as sysdbaarchive 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用户登录PDBsqlplus test_ogg/ogg@PDBcreate table test_ogg(id int,name varchar(20),primary key(id));
15.
切换到ogg用户:cd $OGG_HOMEggsciedit param ./globals填写以下内容oggschema ogg
16.输入以下内容
dblogin userid ogg@PDB password oggadd schematrandata PDB.test_oggadd trandata test_ogg.*capture tabledef test_ogg.*
17.OGG源端管理进程MGR配置:
edit param mgr添加以下内容PORT 7809
18.OGG源端抽取进程extoracle配置
edit param extorcl
extract extorclDDL INCLUDE ALLSETENV (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 pumysqladd extract pumysql, exttrailsource /opt/ogg/source_endpoint/dirdat/toadd rmttrail /opt/ogg/target_endpoint/dirdat/rt, extract pumysql, megabytes 100
info all
21.把这些全启动
start mgrstart extorclstart 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 ogg2passwd ogg2su - ogg2
4.将ogg for mysql安装包 传到/home/ogg2下
unzip -d ~ ./213000_ggs_Linux_x64_MySQL_64bit.zip
5.创建工作目录
mkdir /opt/ogg/target_endpointchown -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/binexport PATH
export JAVA_HOME=$HOME/jdk1.8.0_141
export PATH=$JAVA_HOME/bin:$PATHexport 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/libsexport PATH=$OGG_HOME:$PATH
alias ggsci='cd $OGG_HOME;ggsci'
8.
cd $OGG_HOMEggscicreate 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 oggcreate 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 oggadd 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 oggdelete replicat r_tab1add replicat r_tab1,exttrail /opt/ogg/target_endpoint/dirdat/rt,checkpointtable ogg.ggs_checkpoint
info allstart mgrstart 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)