OGG实现Oracle19C到postgreSQL14的实时同步

news2024/11/28 14:36:32

📢📢📢📣📣📣
哈喽!大家好,我是【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操作系统内存/空间角色说明
ora19c172.18.12.90centos7.82c/18G 400G源端Oracle 19.3
postgres14172.18.12.50centos7.82c/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'
EOF

source /home/oracle/.bash_profile

[oracle@jemora19c ~]$ ggsci

Oracle 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 all

Program     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'
EOF

source /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(*)
----------
         0
         
jemdb=# 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 MB
 stest      | order_items          |     7341 | 1072 kB
 stest      | addresses            |     1500 | 264 kB
 stest      | card_details         |     1500 | 264 kB
 stest      | orders               |     1430 | 376 kB
 stest      | product_information  |     1000 | 400 kB
 stest      | warehouses           |     1000 | 192 kB
 stest      | customers            |     1000 | 440 kB
 stest      | product_descriptions |     1000 | 288 kB
 stest      | logon                |        0 | 16 kB
 stest      | orderentry_metadata  |       -1 | 8192 bytes
 pgogg      | test01               |       -1 | 8192 bytes
 stest      | checkpointtab        |       -1 | 32 kB
 stest      | checkpointtab_lox    |       -1 | 16 kB
(14 rows)


GGSCI (postgres14) 2> stats rep_pg,table stest.logon, total

Sending 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.00
    Total updates                              0.00
    Total deletes                           2383.00
    Total upserts                              0.00
    Total discards                             0.00
    Total operations                        2383.00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件

Composer安装 如果你尚未安装Composer&#xff0c;请先安装 Composer。Composer是PHP的依赖管理工具&#xff0c;它可以方便地安装和管理项目中的第三方库。 安装phpoffice/phpspreadsheet&#xff1a; 触发控制器里面的方法 wdjzdc() 在控制中引入 use PhpOffice\PhpSpread…

从零开始的Spring Cloud Gateway指南:构建强大微服务架构

目录 一、 什么是Gateway&#xff1f;1. 网关的由来2. 网关的作用3. 网关的技术实现 二、如何搭建一个简易网关服务1. 引入依赖2. 配置yml文件 三、进阶话题&#xff1a;过滤器和路由配置1. gateway的执行原理2. 路由断言工厂: Predicate Factory3. 网关过滤器&#xff1a;Gate…

Cannot resolve symbol ‘ActivityResultLauncher‘ 报错处理方法

修改 app/build.gradle implementation ‘androidx.appcompat:appcompat:1.2.0’ 为 implementation ‘androidx.appcompat:appcompat:1.4.0’

【模型报错记录】‘PromptForGeneration‘ object has no attribute ‘can_generate‘

通过这个连接中的方法解决&#xff1a; “PromptForGeneration”对象没有属性“can_generate” 期刊 #277 thunlp/OpenPrompt GitHub的 问题描述&#xff1a;在使用model.generate() 的时候报错&#xff1a;PromptForGeneration object has no attribute can_generate 解决方法…

在Spring Cloud中使用组件Zuul网关,并注册到Eureka中去

在上一篇中&#xff0c;我们搭建了Spring Cloud的父子模块&#xff0c;并实现了一个Eureka子模块的启动&#xff0c;可以通过浏览器地址去访问Eureka主页了&#xff0c;相信了解过的童鞋应该看到&#xff0c;主页上并未有任何服务去注册&#xff0c;那么我们就在这篇&#xff0…

【1】一文读懂PyQt简介和环境搭建

目录 1. PyQt简介 1.1. Qt 1.2. PyQt 1.3. 关于PyQt和PySide 2. 通过pip安装PyQt5 3. 无法运行处理 4. VSCode配置PYQT插件 PyQt官网:Riverbank Computing | Introduction 1. PyQt简介 PyQt是一套Python的GUI开发框架,即图形用户界面开发框架. Python中经常使用的GUI…

NXT : 十年源头代码的回溯与展望

11月28日,区块链领域的开山鼻祖之一NXT上线十周年。十年弹指一挥间,从2013年最初基于密码学证明思想构建的NXT,到今日仍在不断拓展与优化的Ardor(NXT 2.0)生态。我们不妨利用这个契机,回溯一下这个源头级公链的创新之路。 2013年,在区块链意味着复制比特币代码并调整挖矿算法的…

Verilog基础:$time、$stime和$realtime系统函数的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html $time、 $stime和$realtime这三个系统函数提供了返回当前仿真时间方法。注意&#xff0c;这里的仿真时间的最小分辨能力是由仿真时间精度决定的&#xff0c;简单来说&#xff0c;可以理解为…

在线测量大尺寸管材的测径仪有哪些?

工业高速发展的背后&#xff0c;离不开与之匹配的高端设备作为科研的支撑。品质检测仪器也在随着现代科技的发展而不断变化&#xff0c;随着科技的进步&#xff0c;各种大口径的管材、管道被生产制造出来&#xff0c;而对其外径尺寸的检测则因口径范围大而使得很少有仪器能进行…

js选中起始时间使用标准时间毫秒值计算一年后的当前少一天的日期(并考虑闰年)

js选中起始时间使用标准时间毫秒值计算一年后的当前少一天的日期 实际代码里面带入默认日期’20230301’这个特殊日期&#xff0c;因为下一年的当前日期少一天为闰年的2月会有29天&#xff0c;使用特殊值校验代码效果图 HTML部分代码 <el-button click"chengTime()&q…

多线程--11--ConcurrentHashMap

ConcurrentHashMap与HashMap等的区别 HashMap线程不安全 我们知道HashMap是线程不安全的&#xff0c;在多线程环境下&#xff0c;使用Hashmap进行put操作会引起死循环&#xff0c;导致CPU利用率接近100%&#xff0c;所以在并发情况下不能使用HashMap。 ConcurrentHashMap 主…

读书笔记-《数据结构与算法》-摘要2[冒泡排序]

冒泡排序 核心&#xff1a;冒泡&#xff0c;持续比较相邻元素&#xff0c;大的挪到后面&#xff0c;因此大的会逐步往后挪&#xff0c;故称之为冒泡。 public class BubbleSort {public static void main(String[] args) {int unsortedArray[] new int[]{6, 5, 3, 1, 8, 7, 2…

软件设计之适配器模式

类模式 我们知道插座的电压为交流电220V&#xff0c;而日常电器使用的是直流电且电压会较小&#xff0c;比如手机充电会通过插头适配器达到额定的输入电流。下面我们实现这个案例&#xff1a;将220V电压转化为5V的电压。 package Adapter.Class;public class Adapter extends …

外包干了8个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

Python实现FA萤火虫优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

通过断点调试解决node 运行js程序直接退出(没有任何报错提示)的问题

现象&#xff1a; node运行程序直接退出&#xff0c;但是从echo $?的返回值可以知道&#xff1a; 一定出现了错误&#xff0c;但是没有显示出来 解决办法&#xff1a; 1. 使用node --inspect-brk 启动程序 然后在浏览器访问chrome://inspect 然后点击inspect 进行单步调试 …

BearPi Std 板从入门到放弃 - 引气入体篇(6)(定时器TIM2)

简介 基于前面几篇, 增加定时器方面内容&#xff0c; LED定时闪动&#xff0c; 串口定时打印; 如前几篇所说&#xff0c; 使用BearPi Std板进行学习测试, 本例 开发板 &#xff1a; Bearpi Std(小熊派标准板) 主芯片: STM32L431RCT6 LED : PC13 \ 推挽输出即可 \ 高电平点亮 …

股价暴涨192%后,夏威夷控股股票还值得买入吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 这两家公司计划组建一个横跨太平洋的航空公司 阿拉斯加航空(ALK )近期宣布它已和夏威夷航空(HA)达成协议&#xff0c;将以19亿美元现金和承担债务的方式收购夏威夷控股的母公司。 但这一消息却使两家公司的股价走向了相反的…

QT 无法打开包括文件 “xxxx.h”: No such file or direcotry 提升控件后提示找不到头文件

问题复现 UI文件提升控件后&#xff0c;提示找不到头文件。 原因 Qt中的ui文件会经过moc编辑器生成ui_xxx.h头文件。 在主页面的ui文件中因为使用了提升的widget&#xff0c;所以ui的ui头文件因该包含自定义控件的头文件。但是头文件的路径可以看出已经错误了。 #include &…