OGG实现Oracle19C到postgreSQL14的实时同步
📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
文章目录
- 前言
- 📣 1.架构设计
- 📣 2.OGG下载
- 📣 3.安装OGG for Oracle
- ✨ 3.1 解压授权
- ✨ 3.2. 静默安装
- ✨ 3.3 环境变量
- ✨ 3.4 创建目录
- 📣 4.安装OGG for postgreSQL
- ✨ 4.1 解压及授权
- ✨ 4.2 修改环境变量
- ✨ 4.3 创建目录
- 📣 5.Oracle配置
- ✨ 5.1 开归档
- ✨ 5.2 打开附加日志
- 📣 6.MGR管理进程
- 📣 7.抽取进程extract
- 📣 8.传送进程pump
- 📣 9.目标端配置
- 📣 10.测试同步
前言
本文详细介绍了我的OGG旅程、从OGG实现Oracle19C到postgreSQL14的实时同步📣 1.架构设计
| 主机名 | IP | 操作系统 | 内存/空间 | 角色 | 说明 |
|---|---|---|---|---|---|
| ora19c | 172.18.12.90 | centos7.8 | 2c/18G 400G | 源端 | Oracle 19.3 |
| postgres14 | 172.18.12.50 | centos7.8 | 2c/18G 400G | 目标库 | postgreSQL 14 |
📣 2.OGG下载
1.官方下载
https://www.oracle.com/middleware/technologies/goldengate-downloads.html
1.OGG for oracle安装包
213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
2.OGG for PostgreSQL安装包
213000_ggs_Linux_x64_PostgreSQL_64bit.zip

📣 3.安装OGG for Oracle
✨ 3.1 解压授权
mkdir /ogg
mkdir /soft
chown oracle.oinstall /ogg
unzip /opt/213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /soft
cd /soft/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/
chown -R oracle.oinstall *
✨ 3.2. 静默安装
#使用oracle用户安装ogg
[root@jemora19c ~]# su - oracle
[oracle@jemora19c ~]$ cd /soft/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/
./runInstaller -silent
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v21_1_0
INSTALL_OPTION=ORA19c
SOFTWARE_LOCATION=/ogg
START_MANAGER=true
MANAGER_PORT=7809
DATABASE_LOCATION=/opt/oracle/product/19c/dbhome_1
INVENTORY_LOCATION=/opt/oracle/oraInventory
UNIX_GROUP_NAME=oinstall

✨ 3.3 环境变量
cat >> /home/oracle/.bash_profile <<"EOF"
export OGG_HOME=/ogg
export PATH=$OGG_HOME:$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OGG_HOME:$ORACLE_HOME/lib:$LD_LIBRARYPATH
alias ggsci='cd $OGG_HOME;ggsci'
EOFsource /home/oracle/.bash_profile[oracle@jemora19c ~]$ ggsciOracle GoldenGate Command Interpreter for Oracle
Version 21.3.0.0.0 OGGCORE_21.3.0.0.0_PLATFORMS_210728.1047_FBO
Oracle Linux 7, x64, 64bit (optimized), Oracle Database 21c and lower supported versions on Jul 29 2021 03:59:23
Operating system character set identified as UTF-8.Copyright (C) 1995, 2021, Oracle and/or its affiliates. All rights reserved.GGSCI (jemora19c) 1> info allProgram Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
✨ 3.4 创建目录
oracle@jemora19c ~]$ ggsci
GGSCI (jemora19c) 2> create subdirs
📣 4.安装OGG for postgreSQL
✨ 4.1 解压及授权
mkdir /ogg
unzip /opt/213000_ggs_Linux_x64_PostgreSQL_64bit.zip
tar vxf ggs_Linux_x64_PostgreSQL_64bit.tar -C /ogg
chown -R postgres.postgres /ogg
✨ 4.2 修改环境变量
cat >> /var/lib/pgsql/.bash_profile <<"EOF"
export OGG_HOME=/ogg
export PATH=$OGG_HOME:$PATH
export LD_LIBRARY_PATH=$OGG_HOME/lib:$LD_LIBRARY_PATH
alias ggsci='cd $GG_HOME;ggsci'
EOFsource /var/lib/pgsql/.bash_profile
✨ 4.3 创建目录
GGSCI (postgres14) 2> create subdirs

📣 5.Oracle配置
✨ 5.1 开归档
– mount阶段
alter database archivelog;
archive log list;
✨ 5.2 打开附加日志
lter system set enable_goldengate_replication=true;
alter database add supplemental log data;
SELECT supplemental_log_data_min min,
supplemental_log_data_pk pk,
supplemental_log_data_ui ui,
supplemental_log_data_fk fk,
supplemental_log_data_all allc
FROM v$database;

📣 6.MGR管理进程
cat > /ogg/dirprm/mgr.prm << “EOF”
PORT 7809
DYNAMICPORTLIST 7810-7830
AUTOSTART EXTRACT *
AUTORESTART EXTRACT , RETRIES 100, WAITMINUTES 2, RESETMINUTES 10
PURGEOLDEXTRACTS ./dirdat/, usecheckpoints, minkeepdays 30
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
EOF
📣 7.抽取进程extract
cat > /ogg/dirprm/ext_ora.prm << “EOF”
extract ext_ora
setenv (ORACLE_SID=oradb)
setenv (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
setenv (NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”)
userid PGOGG@oradb,password oracle
exttrail /ogg/dirdat/ex
table PGOGG.test01;
table STEST.*;
EOF
– 添加进程
add extract ext_ora, tranlog, begin now
add exttrail /ogg/dirdat/ex, extract ext_ora

📣 8.传送进程pump
cat > /ogg/dirprm/pump_ora.prm << “EOF”
extract pump_ora
setenv (ORACLE_SID=oradb)
setenv (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
setenv (NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”)
rmthost 172.18.12.50,mgrport 7809,compress
rmttrail /ogg/dirdat/ex
table PGOGG.test01;
table STEST.*;
EOF
📣 9.目标端配置
cat > /ogg/dirprm/rep_pg.prm <<“EOF”
replicat rep_pg
SOURCEDEFS ./dirdef/defgen_PG.prm
SETENV(PGCLIENTENCODING = “UTF8” )
SETENV(ODBCINI=“/ogg/odbc.ini” )
SETENV(NLS_LANG=“AMERICAN_AMERICA.AL32UTF8”)
TARGETDB PGDSN, userid stest, password post
DISCARDFILE ./discard/rep_pg.dsc, append
–ap lhrogg.test01, target lhrogg.test01;
map stest., target stest.;
EOF
📣 10.测试同步
-- oracle查询
col table_name format a30
SELECT a.table_name,a.num_rows FROM dba_tables a where a.OWNER='STEST' order by num_rows desc ;SYS@oradb> delete from STEST.LOGON;
2383 rows deleted.SYS@oradb> select count(*) from STEST.LOGON;COUNT(*)
----------0jemdb=# select count(*) from stest.LOGON;count
-------0
(1 row)-- 在pg中查询数据量
select nspname AS schemaname,relname,reltuples::numeric as rowcount,pg_size_pretty (pg_total_relation_size ( '"' || nspname || '"."' || relname || '"' )) AS SIZE
from pg_class C LEFT JOIN pg_namespace N ON ( N.oid = C.relnamespace )
where nspname NOT IN ( 'pg_catalog', 'information_schema' ) AND relkind = 'r'
ORDER by reltuples DESC
LIMIT 20;schemaname | relname | rowcount | size
------------+----------------------+----------+------------stest | inventories | 899441 | 433 MBstest | order_items | 7341 | 1072 kBstest | addresses | 1500 | 264 kBstest | card_details | 1500 | 264 kBstest | orders | 1430 | 376 kBstest | product_information | 1000 | 400 kBstest | warehouses | 1000 | 192 kBstest | customers | 1000 | 440 kBstest | product_descriptions | 1000 | 288 kBstest | logon | 0 | 16 kBstest | orderentry_metadata | -1 | 8192 bytespgogg | test01 | -1 | 8192 bytesstest | checkpointtab | -1 | 32 kBstest | checkpointtab_lox | -1 | 16 kB
(14 rows)GGSCI (postgres14) 2> stats rep_pg,table stest.logon, totalSending STATS request to Replicat group REP_PG ...Start of statistics at 2023-12-02 00:27:37.Replicating from STEST.LOGON to stest.logon:*** Total statistics since 2023-12-02 00:24:44 ***Total inserts 0.00Total updates 0.00Total deletes 2383.00Total upserts 0.00Total discards 0.00Total operations 2383.00
相关文章:
OGG实现Oracle19C到postgreSQL14的实时同步
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
windows 你的电脑不能投影到其他屏幕,请尝试重新安装驱动程序
注意 千万不要去下载什么驱动精灵,太垃圾不好用还一堆附带的软件。按以下步骤进行解决: 解决方法 可能是显卡驱动的问题,我的笔记本按照如下步骤重启一下驱动后解决了,步骤如下: 右键点击桌面的开始菜单,选择”设备…...
2023-简单点-树莓派中的硬件通讯
树莓派中的通讯方式 串口通讯什么是串口通讯?串口通讯的特点 tips并行通讯?基于网络的通讯?socket通讯 串口通讯 什么是串口通讯? 串行通信每次传输一个位元数据,并在连续进行单次过程的基础上进行通信。根据数据的传送方向&am…...
游戏反Frida注入检测方案
在游戏安全对抗过程中,有不少外挂的实现基于对游戏内存模块进行修改,这类外挂通常会使用内存修改器,除此之外,还有一种门槛相对更高、也更难检测的「注入挂」。 据FairGuard游戏安全数据统计,在游戏面临的众多安全风险…...
观海微电子---AF、AG、AR 的差别和作用
一、名称解释及原理 1.AF ---- Anti-fingerprint,中文为抗指纹。一般 SiO2AF 材料(DON,M4、道康宁 AF 材料),一般采用真空蒸发镀膜法。 原理:AF 防污防指纹玻璃是根据荷叶原理,在玻璃外表面涂制…...
颠覆性语音识别:单词级时间戳和说话人分离
vbenjs/vue-vben-admin[1] Stars: 19.7k License: MIT Vue Vben Admin 是一个免费开源的中后台模板,使用最新的 vue3、vite4 和 TypeScript 等主流技术进行开发。该项目提供了现成的中后台前端解决方案,并可用于学习参考。 使用先进的前端技术如 Vue3/…...
吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合
产品:4块55寸OLED透明拼接屏 项目地点:南宁 项目时间:2023年11月 应用场景:吉利展厅 在2023年11月的南宁,吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…...
qnx修改tcp和udp缓冲区默认大小
拷贝/home/test/qnx/qos223/target/qnx7/aarch64le/sbin/sysctl进系统中 https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/s/sysctl.html kern.sbmax 默认262144,这个限制住了发送、接收缓冲器大小 ./sysctl -w kern.sbmax10000…...
vscode的eslint检查代码格式不严谨的快速修复
问题: 原因:复制的代码,esLint检查代码格式不正确。或者写的代码位置不严谨,总是提示 解决 设置在Ctrl S保存时自动格式化代码 1、vscode设置 2、点击右上角,切换json模式 3、添加设置 "editor.codeActionsOn…...
OpenAI GPT-4 Turbo发布:开创AI新时代
🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. GPT-4 Turbo的突破1.1上下文长度和控制手段的加强:1.2多模态支持:…...
基于c 实现 FIFO
功能: 1、读和写长度不限制 2、数据操作 和 指针操作分开(如先操作数据,再操作指针) 适用场景: 单向通信模式,一方写、一方读,可用于任务间单向通信(无需锁) 如&…...
tortoisegit 报错:server refused to start a shell/command
原因:阿里云的云效不支持TortoiseGit 使用 TortoiseGitPlink,请修改为 OpenSSH。 官网修改教程:TortoiseGit 工具相关报错如何处理? 基本流程: 选择设置(Settings),选择通用&#x…...
电商平台API接口指南,京东商品详情接口,京东详情页接口,宝贝详情页接口,商品属性接口,商品信息查询,商品详细信息接口,h5实时详情页数据展示
京东商品详情API接口是京东开放平台提供的一种API接口,通过该接口,可以获取到京东商品的详细信息,如商品名称、价格、图片和描述等信息。 使用方法如下: 注册并获取API密钥:首先需要在京东开放平台上注册并获取API密…...
什么是迁移学习
1 迁移学习概述 迁移学习(Transfer Learning)是机器学习中的一种方法,它允许模型将从一个任务中学到的知识应用到另一个相关的任务中。这种方法在数据稀缺的情况下尤为有用,因为它减少了对大量标记数据的需求。迁移学习已成为深度…...
万宾科技水环境综合治理监测系统的融合与应用
随着社会经济的快速发展,我国的水环境污染问题日益凸显,这不仅对生态环境造成了严重破坏,也严重威胁到人民群众的健康和生活质量。为了解决这一问题,城市生命线与水环境综合治理监测系统应运而生,二者的结合将为水环境…...
【EI会议征稿】第三届图像,信号处理与模式识别国际学术会议(ISPP 2024)
第三届图像,信号处理与模式识别国际学术会议(ISPP 2024) 2024 3rd International Conference on Image, Signal Processing and Pattern Recognition(ISPP 2024) 第三届图像,信号处理与模式识别国际学术会议…...
继阿里云、滴滴、语雀后,腾讯视频也出现重大系统故障
昨晚,许多网友报告称腾讯视频出现了网络故障,具体表现为首页无法加载内容、VIP 用户无法观看会员视频等问题。 针对这一问题,腾讯视频回应称:目前腾讯视频遇到了暂时的技术问题,正在紧急修复中,各项功能正在…...
kotlin中sealed语句的使用
sealed 密封类是 Kotlin 中的一种特殊类别,它的主要作用是限制类的继承结构。密封类用于表示受限的类继承结构,即一个值只能有有限几种类型,而不能有任意类型。密封类通常用于表示一种有限集合的类型。 下面是密封类的主要特性和作用&#x…...
软信天成:数据泄露日趋严重 “资产”保护何去何从
随着数据应用的逐渐深入,越来越多的企业意识到:数据作为信息的载体,可以成为企业知识产权、收益流和具备竞争优势的基础资产。然而,当包含大量敏感信息的数据被视作资产时,亦将直面信息被“窃取”、“泄露”和“滥用”…...
GitHub打不开的解决方案(百试不爽法)
一、githup首先打开以下网址,搜索 DNS Resource Records 找到对应的IP地址信息 1、点击访问 GitHub.com - GitHub: Lets build from here GitHubGitHub is the best place to share code with friends, co-workers, classmates, and complete strangers. Over fo…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
