暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用OGG 21版本完成Oracle19C到MySQL8的实时同步

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,希望大家能够喜欢,并提出宝贵地意见,我们一起提升,守住自己的饭碗。


一、OGG入门小知识

1、OGG介绍

Oracle Golden Gate (OGG) 通过解析日志获取数据变化并同步到目标数据库。支持一对一、广播、聚合、双向等多种拓扑结构,适用于应急系统、在线报表、容灾等多个场景。

2、ogg架构

在一个典型的 Oracle Golden Gate (OGG) 环境中,涉及两个数据库和两个 OGG 实例,有四个核心对象和五个主要进程:

核心对象

  • • 源数据

  • • 目标数据

  • • 源OGG

  • • 目标OGG

主要进程

  • • Capture:捕获进程

  • • Trail:跟踪进程

  • • Delivery:分发进程

工作流程

  1. 1. 源OGG端

    • • Extract:从源数据库的联机日志挖掘数据并记录到 Source Trail 文件。

    • • Data Pump:从 Source Trail 文件读取数据,通过网络发送给目标OGG的 Collector 进程。

  2. 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.251192.168.59.198
操作系统centos7centos7
数据库版本oracle19cmysql8.0.33
OGG安装用户oracleroot
OGG数据库用户oggogg
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

数据库安装链接如下:

Oracle 19c单机一键安装脚本分享

MySQL数据库一键安装脚本,适合任何版本

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。


文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论