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 - 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)