热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,希望大家能够喜欢,并提出宝贵地意见,我们一起提升,守住自己的饭碗。
一、OGG入门小知识
1、OGG介绍
Oracle Golden Gate (OGG) 通过解析日志获取数据变化并同步到目标数据库。支持一对一、广播、聚合、双向等多种拓扑结构,适用于应急系统、在线报表、容灾等多个场景。
2、ogg架构
在一个典型的 Oracle Golden Gate (OGG) 环境中,涉及两个数据库和两个 OGG 实例,有四个核心对象和五个主要进程:
核心对象
• 源数据
• 目标数据
• 源OGG
• 目标OGG
主要进程
• Capture:捕获进程
• Trail:跟踪进程
• Delivery:分发进程
工作流程
1. 源OGG端
• Extract:从源数据库的联机日志挖掘数据并记录到 Source Trail 文件。
• Data Pump:从 Source Trail 文件读取数据,通过网络发送给目标OGG的 Collector 进程。
2. 目标OGG端
• Collector:接收数据并存储到本地的 Remote Trail 文件。
• Replicate:从 Remote Trail 文件中提取数据并更新目标数据库。
注:源OGG端的 Extract 和 Data Pump 步骤可合并为直接发送数据到目标端。

3、OGG理论概念
在 Oracle Golden Gate (OGG) 中,同步过程可以简化描述如下:
同步过程
• 源端:
• Extract:从源数据库的联机日志中抽取变化,写入本地 Trail 文件。
• Data Pump:从本地 Trail 文件读取数据并传输给目标端的 Collector 进程。
• 目标端:
• Collector:接收数据并写入目标 Trail 文件。
• Replicat:将目标 Trail 文件中的变化应用到目标数据库。
多进程支持
OGG 支持配置多个 Extract、Data Pump 和 Replicat 进程,以便管理大量表或不同业务,并且这些进程可以独立操作,不会互相影响。
管理进程
所有 OGG 进程由 Manager 进程管理,负责启动和关闭其他进程。每个 OGG 进程都有自己的参数文件、检查点文件等,统称为一个组,每个组有一个唯一的组名字。
OGG 的体系图可标注以下内容以便理解:
• Manager 进程:管理所有 OGG 进程。
• 各类进程:包含 Extract、Data Pump、Collector、Replicat 及其对应的参数文件和检查点文件组成的组。
二、环境准备
| 源端 | 目的端 | |
| IP地址 | 192.168.59.251 | 192.168.59.198 |
| 操作系统 | centos7 | centos7 |
| 数据库版本 | oracle19c | mysql8.0.33 |
| OGG安装用户 | oracle | root |
| OGG数据库用户 | ogg | ogg |
| OGG安装目录 | /ogg | /ogg |
1、软件下载
下载oracle19c和mysql8所需版本的OGG,这里我用的是21版本。
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
大家也可以从网盘中进行OGG安装包的下载

链接: https://pan.baidu.com/s/11afkCMJn2atMq6iou6tq3A
提取码: q1vn

2、基础环境准备
两台机器都需设置
(1)关闭防火墙和selinux
[root@myoracle ~]#systemctl stop firewalld
[root@myoracle ~]#systemctl disable firewalld
[root@myoracle ~]#setenforce 0
(2)设置主机名并写在hosts文件
[root@myoracle ~]#cat /ect/hosts
192.168.59.251 myoracle
192.168.59.198 mysql
三、安装源端OGG
1、创建 ogg 安装目录
[root@myoracle ~]# mkdir -p /ogg #默认目录
2、上传软件到 ogg 并解压
[root@myoracle ~]# cd /ogg/
[root@myoracle ogg]# unzip 191004_fbo_ggs_Linux_x64_shiphome.zip
[root@myoracle ogg]# chown -R oracle:oinstall /ogg/ #赋予oracle权限

3、配置环境变量
[root@myoracle ogg]# su - oracle
[oracle@myoracle ~]$ vi .bash_profile
添加以下内容
export OGG_HOME=/ogg
export PATH=$PATH:$ORACLE_HOME/bin:$OGG_HOME
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
alias ggsci='cd $OGG_HOME;ggsci'
[oracle@myoracle ~]$source .bash_profile

创建PDB的监听,方便PDB数据库的连接
vi /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora
添加以下内容
pdb19c =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =(PROTOCOL = TCP)(HOST =192.168.59.251)(PORT =1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =pdb19c)
)
)
[oracle@myoracle ~]$ lsnrctl reload #重启监听

4、静默安装
[root@myoracle response]# vi /ogg/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response/oggcore.rsp
只需要修改以下内容即可
INSTALL_OPTION=ORA19c
SOFTWARE_LOCATION=/ogg

进行静默安装
[root@myoracle response]# /ogg/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/runInstaller -silent -responseFile /ogg/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response/oggcore.rsp

出现以上信息表示安装成功。
[oracle@myoracle response]$ cd /ogg/
[oracle@myoracle ogg]$ ggsci

5、配置OGG所需参数
1、检查归档日志开启情况
必须开启归档日志,并添加补充日志,打开数据库的最小附加日志(数据库级别)
[root@myoracle response]# mkdir -p /arch
[root@myoracle ~]# chown oracle:oinstall /arch
SQL> alter system set log_archive_dest_1='location=/arch';
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> archive log list;
2、检查强制日志模式及附加最小日志开启情况
开启强制日志模式和开启最小附加日志
SQL> select force_logging from v$database;#检查是否开启强制日志模式
SQL> alter database force logging;#开启
SQL>select force_logging from v$database;#再次检查
SQL>select supplemental_log_data_min from v$database;#检查是否开启附加日志
SQL> alter database add supplemental log data;#开启附加日志
SQL>select supplemental_log_data_min from v$database;#再次检查
SQL> alter system archive log current; #切换日志
3、设置 enable_ogg_replication为true
SQL> set lines 999
SQL> show parameter enable_goldengate_replication; #检查是否开启复制参数
SQL> alter system set enable_goldengate_replication=true scope=both sid='*';
SQL> show parameter enable_goldengate_replication; #查看是否开启复制参数
SQL> select name,log_mode,db_unique_name,supplemental_log_data_min,force_logging from v$database; #验证


4、创建GoldenGate管理用户
CDB执行:
创建c##ogg所需要的表空间:
[oracle@myoracle ~]$ mkdir -p /home/oracle/oradata/OGG/tablespace/
SQL>create tablespace oggtbs datafile '/home/oracle/oradata/OGG/tablespace/oggtbs01.dbf' size 500M autoextend on;
并在上面创建c##ogg用户:
SQL>create user c##ogg identified by ogg default tablespace oggtbs;
赋予权限:
SQL>grant dba ,connect, resource, unlimited tablespace to c##ogg;
SQL>exec dbms_goldengate_auth.grant_admin_privilege('c##ogg','*',TRUE);
SQL>select username,common,con_id from cdb_users where username like '%OGG%';
SQL>commit;
SQL>EXEC dbms_goldengate_auth.grant_admin_privilege('C##OGG',container=>'all');
SQL>EXEC dbms_goldengate_auth.grant_admin_privilege('C##OGG','*', grant_optional_privileges=>'*',container=>'all');
SQL>GRANT DBA TO c##ogg container=all;

PDB执行:
SQL> alter session set container=PDB19C;
SQL> show con_name;
给c##ogg用户赋权限:
SQL>grant dba ,connect, resource, unlimited tablespace to c##ogg;
创建ogg所需要的表空间:
SQL>create tablespace mytbs datafile '/home/oracle/oradata/OGG/tablespace/mytbs01.dbf' size 500M autoextend on;
并在上面创建ogg用户:
SQL>create user ogg identified by ogg default tablespace mytbs;
赋予权限:
SQL>grant dba ,connect, resource, unlimited tablespace to ogg;
SQL>exec dbms_goldengate_auth.grant_admin_privilege('ogg','*',TRUE);
SQL>select username,common,con_id from cdb_users where username like '%OGG%';
SQL>commit;

5、测试是否正常登录
[oracle@myoracle ~]$ sqlplus c##ogg/ogg@cdb19c

[oracle@myoracle ~]$ sqlplus ogg/ogg@pdb19c

6、切换到oracle用户,创建一个test_ogg用户
SQL> alter session set container=PDB19C;
SQL> create user test_ogg identified by ogg ;
SQL> grant dba ,connect, resource, unlimited tablespace to test_ogg;

7、登录PDB创建测试表并插入一条数据
[oracle@myoracle ~]$ sqlplus test_ogg/ogg@PDB19C
SQL> create table test_ogg(id int,name varchar(20),primary key(id));
SQL>insert into test_ogg values('1','zhangsan ');

8、编辑GLOBALS参数文件
[oracle@myoracle CDB19C]$ cd /ogg/
[oracle@myoracle ogg]$ggsci
GGSCI (myoracle) 1> create subdirs
GGSCI (myoracle) 1> EDIT PARAMS ./GLOBALS
添加以下内容:
ggschema ogg


利用默认的密钥,生成密文:
GGSCI (myoracle) 1> dblogin userid ogg@192.168.59.251:1521/pdb19c password ogg
GGSCI (myoracle) 2> encrypt password ogg encryptkey default

6、配置MGR管理进程
GGSCI (myoracle) 8> edit param mgr
添加
PORT 7809
DYNAMICPORTLIST 7810-7860
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 30
lagreporthours 1
laginfominutes 30
lagcriticalminutes 60
ACCESSRULE, PROG *, IPADDR 192.*.*.*, PRI 1, ALLOW
GGSCI (myoracle) 11> start mgr
GGSCI (myoracle) 12> info all

确认状态为running即正常。
GGSCI (myoracle) 1> delete credentialstore
GGSCI (myoracle) 1> add credentialstore
GGSCI (myoracle) 6> alter credentialstore add user c##ogg@192.168.59.251/cdb19c, password ogg alias ora19c #必须使用CDB
GGSCI (myoracle) 3> info credentialstore

7、源端OGG 表级补全日志(trandata)配置
GGSCI (myoracle) 10> dblogin useridalias ora19c
GGSCI (myoracle as ogg@cdb19c/PDB19C) 55> add schematrandata pdb19c.test_ogg
GGSCI (myoracle as ogg@cdb19c/PDB19C) 56> add trandata test_ogg.*
GGSCI (myoracle as ogg@cdb19c/PDB19C) 57> capture tabledef test_ogg.*
8、OGG源端抽取进程extoracle配置
GGSCI (myoracle as ogg@cdb19c/PDB19C)9> edit param extorcl
添加以下配置
extract extorcl
DDL INCLUDE ALL
SETENV (ORACLE_HOME ="/u01/app/oracle/product/19.0.0/dbhome_1")
SETENV (ORACLE_SID="cdb19c")
SETENV (NLS_LANG="american_america.AL32UTF8")
userid c##ogg@cdb19c , password ogg
exttrail /ogg/dirdat/to
table PDB19C.test_ogg.*;
GGSCI (myoracle as ogg@cdb19c/PDB19C)9> edit param extorcl #编辑
GGSCI (myoracle as ogg@cdb19c/PDB19C)9>delete extract extorcl #删除
GGSCI (myoracle as ogg@cdb19c/PDB19C)9>ADD EXTRACT extorcl,INTEGRATED TRANLOG,BEGIN NOW #核心参数
GGSCI (myoracle as ogg@cdb19c/PDB19C)9>ADD EXTTRAIL /ogg/dirdat/to,EXTRACT extorcl, MEGABYTES 100 #核心参数

9、OGG源端传输进程pumysql配置
GGSCI (myoracle as ogg@cdb19c/PDB19C) 9> edit param pumysql
添加以下配置
extract pumysql
userid c##ogg@cdb19c, password ogg
rmthost 192.168.59.198,mgrport 7809
rmttrail /ogg/dirdat/rt
table PDB19C.test_ogg.*;
GGSCI (myoracle as ogg@cdb19c/PDB19C) 9>delete extract pumysql
GGSCI (myoracle as ogg@cdb19c/PDB19C) 9>add extract pumysql, exttrailsource /ogg/dirdat/to #核心参数
GGSCI (myoracle as ogg@cdb19c/PDB19C) 9>add rmttrail /ogg/dirdat/rt, extract pumysql, megabytes 100 #核心参数

10、启动EXTORCL、pumysql和mgr进程
GGSCI (myoracle as ogg@cdb19c/PDB19C) 10>start mgr
GGSCI (myoracle as ogg@cdb19c/PDB19C) 10>start extorcl
GGSCI (myoracle as ogg@cdb19c/PDB19C) 10>start pumysql
GGSCI (myoracle as ogg@cdb19c/PDB19C) 10> info all

11、应用进程
GGSCI (myoracle as ogg@cdb19c/PDB19C) 10>edit param tab1
添加以下内容
defsfile /ogg/dirdef/ogg_test.ogg_test
userid test_ogg@PDB19C, password ogg
table test_ogg.test_ogg;
退出执行以下命令
[oracle@myoracle ogg]$./defgen paramfile dirprm/tab1.prm

这里需要注意的是要等mysql的OGG服务装完后把/ogg/dirdef/ogg_test.ogg_test文件SCP到对应的目录下
12、排错
若extoracle遇到报错需要进行注册
GGSCI (myoracle as ogg@cdb19c/PDB19C) 57>dblogin userid c##ogg@cdb19c password ogg
GGSCI (myoracle as ogg@cdb19c/PDB19C) 57>register extract extorcl database container(pdb19c)
四、安装目的端OGG:
1、创建ogg用户
root@localhost:(none)>root@localhost:mysql>GRANT SYSTEM_USER ON *.* TO 'root'@'%';
root@localhost:(none)>create user ogg@'%' identified by '123456';
root@localhost:(none)>grant all privileges on *.* to ogg@'%';
root@localhost:(none)>flush privileges;
2、创建数据库
root@localhost:(none)>create database ogg;
3、创建同步表
root@localhost:(none)>use ogg;
root@localhost:(none)>create table test_ogg(id int,name varchar(20),primary key(id));

4、添加环境变量
[root@mysql ~]# vi .bash_profile
添加以下内容
export OGG_HOME=/ogg
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'
[root@mysql ~]#source .bash_profile
5、安装mysql8 OGG 软件
[root@localhost ~]#mkdir -p /ogg
[root@localhost ~]# unzip 213000_ggs_Linux_x64_MySQL_64bit.zip
[root@localhost ~]# tar -xvf ggs_Linux_x64_MySQL_64bit.tar -C /ogg/
[root@mysql ogg]# chown -R root.root /ogg/
[root@localhost ogg]# ./ggsci
GGSCI (localhost.localdomain) 1> create subdirs

将源端oracle 19c生成的ogg_test.ogg_test文件传到到本端,也就是目的端。
[oracle@myoracle ogg]$scp /ogg/dirdef/ogg_test.ogg_test root@192.168.59.198: /ogg/dirdef/ #源端操作
6、配置MGR管理进程
#### GGSCI (localhost.localdomain) 1>edit param mgr
添加以下内容
PORT 7809
DYNAMICPORTLIST 7810-7820
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
ACCESSRULE, PROG *, IPADDR *, ALLOW
GGSCI (mysql) 2> start mgr
GGSCI (mysql) 3> info all

6、dblogin登录数据库
dblogin sourcedb ogg@192.168.59.198:3306 ,userid root, password 123456
add checkpointtable ogg.ggs_checkpoint

7、编辑目的端REPLICAT进程
GGSCI (localhost.localdomain DBLOGIN as ogg) 11>edit params r_tab1
replicat r_tab1
targetdb ogg@192.168.59.198:3306,userid root, password 123456
sourcedefs /ogg/dirdef/ogg_test.ogg_test
HANDLECOLLISIONS
MAP PDB19C.test_ogg.*,target ogg.test_ogg;

GGSCI (mysql) 22> delete replicat r_tab1 #删除
GGSCI (localhost.localdomain DBLOGIN as ogg) 11>add replicat r_tab1,exttrail /ogg/dirdat/rt,checkpointtable ogg.ggs_checkpoint
GGSCI (localhost.localdomain DBLOGIN as ogg) 11>start mgr
GGSCI (localhost.localdomain DBLOGIN as ogg) 11>start r_tab1
GGSCI (localhost.localdomain DBLOGIN as ogg) 11>info all

五、验证
1、查看两端的进程状态
GGSCI (myoracle) 5> info all


2、登录数据库进行数据比对
登录源端数据库查询数据:
[oracle@myoracle ~]$ sqlplus test_ogg/ogg@PDB19C
SQL> select * from test_ogg;

登录目的端查看数据:
[root@mysql ~]# mysql -uroot -p123456
root@localhost:(none)>use ogg;
root@localhost:ogg>select * from test_ogg;

3、新增数据后进行对比
源端:
SQL> insert into test_ogg values('2','lisi ');
SQL>commit;

目的端:
root@localhost:ogg>select * from test_ogg;

到此,Oracle19C到mysql8的数据同步基本完成。
六、日常运维命令
GGSCI (mysql)22> view report extorcl #查看运行报错
GGSCI (mysql)22> info extorcl
GGSCI (mysql)22> info extorcl,showch #查看日志捕获情况
GGSCI (mysql)22> info exttrail *#查看进程exttrail信息
GGSCI (myoracle)9> lag extract PUMYSQL #查看时延
GGSCI (myoracle)7> stats extract extract total #查看统计信息
GGSCI (mysql)22> start extorcl
GGSCI (mysql)22> stop extorcl
GGSCI (mysql)22>delete EXTRACT extorcl
参考链接:
https://blog.csdn.net/dnuiking/article/details/136975017
数据库安装链接如下:
文中的概念来源于互联网,如有侵权,请联系我删除。
欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。





