OGG是ORACLE公司出品的数据库中间件,可以实现不同数据库之间的数据复制同步,截止目前已到21c版本。它有经典架构版和微服务版,据称经典架构版在未来将会弃用,鉴于此,作为初次接触,我们选择从微服务架构版(21c)开始。
提示: 有关经典架构的部署可以参考之前的文章 【ORACLE】OGG-命令行搭建一个简单环境(O2O)_慢工也能出细活的博客-CSDN博客
【DB宝79】使用OGG微服务快速双向同步RDS数据库 - 墨天轮
OGG用于PG数据库之间双主实时同步(RDS for PG亦可)–OGG远程捕获和投递 - 小麦苗DBA宝典 Oracle 迁移 PostgreSQL 中的OGG配置_howard_shooter的博客-CSDN博客
我们事先准备了一套供演示的环境,配置如下:
主机 | 角色 | 数据库版本 | 操作系统 | 数据库名称 | 管理员名称口令 |
192.168.0.201 | 源库 | oracle19c | Oracle Linux7.9 | PROD prod2 |
sys/Cloud_4u |
192.168.0.110 | 目标库 | postgreSQL14 | Ubuntu20.04 | postgres | postgres/postgres |
我们要实验以下两个场景
场景一:oracle-oracle(双主)同步
场景二:在场景一的基础上增加一个oracle-postgresql(双主)同步
在开始之前,先了解一下部署OGG需要做的几个步骤
OGG_HOME
, TNS_ADMIN
, JAVA_HOME
.参考以前的文章
【ORACLE】OGG-命令行搭建一个简单环境(O2O)_慢工也能出细活的博客-CSDN博客
【OGG】之图形化安装_慢工也能出细活的博客-CSDN博客
按照官方文档上的说明, 从21c开始ORACLE_HOME
, LD_LIBRARY_PATH这两个参数会自动指向OGG_HOME定义的位置,OGG_HOME在前面安装的时候我们已经设置过了;TNS_ADMIN也可以不设,JAVA_HOME也要设,不过文档种没有说明要安装何种版本的JAVA,我特意选择了jkd1.8。
# jdk上传到/home/oracle
cd /home/oracle
tar xvzf jdk-8u333-linux-x64.tar.gz
vi /etc/environment
## 添加 JAVA_HOME="/jdk1.8.0_333"
source /etc/environment
echo java -version
展示结果即正常
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
用使用oggca助手添加部署大纲:
第一步 创建一个管理服务
运行oggca
# 部署所需的服务主目录
rm -rf /u02/oggdata/smprod
mkdir /u02/oggdata/smprod
# 软件主目录
mkdir /u02/oggdata/smprod/dirdep
# 部署主目录
mkdir /u02/oggdata/smprod/dirmgr
# 度量主目录
mkdir /u02/oggdata/smprod/dirbdb
# Trail文件主目录
mkdir /u02/oggdata/smprod/dirdat
# 报告主目录
mkdir /u02/oggdata/smprod/dirrpt
cd $OGG_HOME
cd bin
. oggca.sh
进入配置界面
服务管理器部署主目录:/u02/oggdata/smprod/dirmgr,勾选【将服务管理器注册为系统服务...】
部署名称:msprod
软件主目录: $OGG_HOME
提示:软件主目录不能和管理主目录冲突,不能是OGG_HOME,所以我另外创建了一个目录
提示:部署主目录也不能和软件主目录,管理主目录,OGG_HOME冲突,所以我也另外重新建了一个目录
演示环境用到的几个参数说明如下,更多参数参考文献说明。
OGG_HOME:/u02/oggdata
提示:安装 Oracle GoldenGate 的目录。这个变量是固定的,不能改变。如果前面已经设置了软件目录,则这里会自动填充
LD_LIBRARY_PATH:默认情况下,此路径指向 Oracle GoldenGate 安装目录和底层即时客户端目录
TNS_ADMIN:${ORACLE_HOME}/network/admin
提示:仅限ORACLE数据库,指明tnsnames.ora文件的位置,如果不设将查找$OGG_HOME/.tnsnames.ora
或 /etc/tnsnames.ora,这个文件需要手动配置放到默认目录下。
ODBCINI:使用于postgreSQL上的OGG,指定用于存储数据源名称 (DSN) 以连接到 PostgreSQL 数据库的 ODBC 文件的完整路径。
JAVA_HOME:jdk的位置
提示:由于是首次接触OGG,这里我们使用非安全性模式,这样可以少配置一些东西。关于安全模式的配置,我会在之后再专门演示。
启用所有服务和监视,管理服务端口:7860,其他端口自动会填充
度量服务数据存储主目录:/u02/oggdata/smprod/dirbdb
提示:默认schema,当GLOBALS配置文件没有指定复制模式的时候将使用这个默认模式。HR是安装演示数据库时选择了示例数据库
提示:选择保存响应文件,这样可以以相同的方式快速部署到其他服务器节点。
等待配置过程...
第二步 注册管理服务
要完成配置过程还需要用root身份执行<服务管理器部署主目录>/bin/registerServiceManager.sh,执行完成后回到本界面点击确定。注册只在首次安装服务时需要,除非后面删除了所有管理服务,否则以后不用添加。
[root@host201 bin]# . registerServiceManager.sh
Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
----------------------------------------------------
Oracle GoldenGate Install As Service Script
----------------------------------------------------
OGG_HOME=/u01/stage/oggsc
OGG_CONF_HOME=/u01/oggserver/etc/conf
OGG_VAR_HOME=/u01/oggserver/var
OGG_USER=oracle
Running OracleGoldenGateInstall.sh...
Created symlink from /etc/systemd/system/multi-user.target.wants/OracleGoldenGate.service to /etc/systemd/system/OracleGoldenGate.service.
至此完成了OGG一个非安全模式的服务配置。
测试一下,用浏览器打开http://host201:7856
能正确打开首页,则说明服务已经运行正常。
提示:管理服务的启停命令
systemctl start OracleGoldenGate
systemctl status OracleGoldenGate
systemctl stop OracleGoldenGate
如果 Oracle GoldenGate 服务管理器注册为系统守护程序,则服务管理器和其他服务器会在主机(重新)启动时自动启动