本文档描述OGG(Oracle goldengate)为Oracle同步到PostgreSQL数据库配置。在目前去“IOE”潮流。PostgreSQL确实是Oracle最好的替代品之一。

实验环境如下:

一、软件下载

下载OGG软件地址

二、数据库配置

2.1、源端(Oracle)

2.1.1、创建 GoldenGate 操作系统用户

专门用ogg用户来维护操作GoldenGate。

  1. useradd ogg
  2. passwd ogg

2.1.2、创建 GoldenGate 安装目录

  1. mkdir -p /data/ogg
  2. chown -R ogg:ogg /data/ogg

2.1.3、安装 GoldenGate

  1. unzip fbo_ggs_Linux_x64_ora11g_64bit.tar.zip
  2. tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /data/ogg

2.1.4、配置 GoldenGate环境变量

  1. export GGATE=/data/ogg
  2. export ORACLE_BASE=/u01/app
  3. export ORACLE_HOME=$ORACLE_BASE/oracle
  4. export PATH=$PATH:$GGATE:$ORACLE_HOME/bin
  5. export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE:$LD_LIBRARY_PATH
  6. alias sqlplus='rlwrap sqlplus'
  7. alias ggsci='rlwrap ggsci'

2.1.5、配置Oracle数据库

  由于 GoldenGate 的原理是根据 Oracle 的日志进行抽取复制。为了保证日志的完整性;需要打开 Oracle 数据库归档;

  1. SQL> alter system set log_archive_dest_1 = 'LOCATION=/data/arch' scope = spfile;
  2. SQL> shutdown immediate;
  3. SQL> startup mount
  4. SQL> alter database archivelog;
  5. SQL> alter database open;
  6. # 查看归档模式
  7. SQL> archive log list
  8. # 还需要开启 force log 和 supplemental log
  9. SQL> alter database force logging;
  10. SQL> alter database add SUPPLEMENTAL log data;
  11. # 查询结果
  12. SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
  13. NAME OPEN_MODE FOR SUPPLEME
  14. --------- -------------------- --- --------
  15. ORA235 READ WRITE YES YES

2.1.6、oracle创建复制用户ogg

  1. # 建议使用单独的表空间存放 GoldenGate 数据
  2. create tablespace tsp_ogg datafile '/data/oracle/data/ogg01.dbf' size 512M autoextend on;
  3. # 创建 GoldenGate 用户并赋权
  4. create user ogg identified by ogg default tablespace tsp_ogg;
  5. grant dba to ogg;
  6. # 严谨一些;这样赋权
  7. grant connect, resource TO ogg;
  8. grant select any dictionary, select any table TO ogg;
  9. grant flashback any table TO ogg;
  10. grant execute on dbms_flashback TO ogg;

2.2、目标端(PostgreSQL)

2.2.1、创建 GoldenGate 操作系统用户

  专门用ogg用户来维护操作GoldenGate。

  1. useradd ogg
  2. passwd ogg

2.2.2、创建 GoldenGate 安装目录

  1. mkdir -p /data/ogg
  2. chown -R ogg:ogg /data/ogg

2.2.3、安装 GoldenGate

  1. unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip
  2. tar -xvf ggs_Linux_x64_PostgreSQL_64bit.tar -C /data/ogg

2.2.4、配置 GoldenGate环境变量

  1. export GGATE=/data/ogg
  2. export PGHOME=/opt/pgsql10
  3. export PGDATA=/data/postgres/data1
  4. export PATH=$PGHOME/bin:$HOME/bin:$GGATE:$PATH
  5. export LD_LIBRARY_PATH=$PGHOME/lib:$GGATE/lib:$LD_LIBRARY_PATH
  6. export ODBCINI=$GGATE/odbc.ini
  7. alias ggsci='rlwrap ggsci'

2.2.5、创建复制用户ogg

  1. create user ogg superuser identified by ogg;
  2. \c lottu ogg
  3. create schema ogg;

2.2.6、创建DSN

  生成odbc.ini文件

  1. [ODBC Data Sources]
  2. GG_Postgres=DataDirect PostgreSQL Wire Protocol
  3. [ODBC]
  4. IANAAppCodePage=
  5. InstallDir=/data/ogg
  6. [GG_Postgres]
  7. Driver=/data/ogg/lib/GGpsql25.so
  8. Description=DataDirect PostgreSQL Wire Protocol
  9. Database=lottu
  10. HostName=localhost
  11. PortNumber=
  12. LogonID=ogg
  13. Password=ogg

三、GoldenGate进程配置

3.1、源端(Oracle)

3.1.1、创建 GoldenGate 的工作目录

执行ggsci,登录GoldenGate,只需要执行create subdirs命令就可以了。

  1. GGSCI (oracle221) > create subdirs
  2. Creating subdirectories under current directory /data/ogg
  3. Parameter files /data/ogg/dirprm: already exists
  4. Report files /data/ogg/dirrpt: created
  5. Checkpoint files /data/ogg/dirchk: created
  6. Process status files /data/ogg/dirpcs: created
  7. SQL script files /data/ogg/dirsql: created
  8. Database definitions files /data/ogg/dirdef: created
  9. Extract data files /data/ogg/dirdat: created
  10. Temporary files /data/ogg/dirtmp: created
  11. Stdout files /data/ogg/dirout: created

3.1.2、配置 MGR 进程组

  负责启动GoldenGate进程,以及启动动态进程,管理trail文件,错误信息。运行ggsci程序;输入 “EDIT PARAMS MGR” 编辑参数文件:

  1. GGSCI (oracle221) > edit params mgr
  2.  
  3. PORT
  4. DYNAMICPORTLIST -
  5. AUTOSTART ER *
  6. AUTORESTART EXTRACT *,WAITMINUTES , RESETMINUTES
  7. PURGEOLDEXTRACTS /data/ogg/dirdat/*,USECHECKPOINTS,MINKEEPDAYS 3
  8. LAGREPORTHOURS 1
  9. LAGINFOMINUTES 30
  10. LAGCRITICALMINUTES 45
  11. SYSLOG ERROR,WARN
  12.  
  13. GGSCI (oracle221) 3> start mgr
  14. Manager started.
  15.  
  16. GGSCI (oracle221) 4> info all
  17. Program Status Group Lag at Chkpt Time Since Chkpt
  18. MANAGER RUNNING
  • PORT:指定服务监听端口;默认端口为7809
  • DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口
  • AUTORESTART:自动重启参数设置:本处设置表示每2分钟尝试重新启动所有EXTRACT进程;以后5分钟清零。
  • PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除

3.1.3、配置 Extract 进程

  负责抓取需要传输数据;下面在源端配置抽取进程。

  1. GGSCI (oracle221) > edit params EORA_1
  2. EXTRACT EORA_1
  3. SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
  4. SETENV (ORACLE_HOME="/u01/app/oracle")
  5. SETENV (ORACLE_SID="ora221")
  6. USERID ogg, PASSWORD ogg
  7. DISCARDFILE /data/ogg/dirrpt/EORA_1.dsc,APPEND,MEGABYTES
  8. EXTTRAIL /data/ogg/dirdat/aa
  9. TABLE lottu.*;
  10.  
  11. # 在源端用 add extract 命令创建 extract 组;
  12. GGSCI (oracle221) > ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW
  13. EXTRACT added.
  14.  
  15. # 用add exttrail 命令创建本地 trail 文件
  16. GGSCI (oracle221) > ADD EXTTRAIL /data/ogg/dirdat/aa, EXTRACT EORA_1, MEGABYTES
  17. EXTTRAIL added.
  18.  
  19. # 启动extract进程
  20. GGSCI (oracle221) > start extract eora_1
  21. Sending START request to MANAGER ...
  22. EXTRACT EORA_1 starting
  23.  
  24. GGSCI (oracle221) > info all
  25. Program Status Group Lag at Chkpt Time Since Chkpt
  26. MANAGER RUNNING
  27. EXTRACT RUNNING EORA_1 :: ::

3.1.4、配置 Pump 进程

  extract进程负责将抓取的数据写入本地trail文件;而需要Pump进程把trail文件传输到目标端。使用 EDIT PARAMS PORA_1 添加配置文件

  1. GGSCI (oracle221) > EDIT PARAMS PORA_1
  2. EXTRACT PORA_1
  3. SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
  4. PASSTHRU
  5. RMTHOST 192.168.1.235, MGRPORT
  6. RMTTRAIL /data/ogg/dirdat/pa
  7. TABLE lottu.*;
  8.  
  9. # 用 add extract 指定本地 trail 文件
  10. ADD EXTRACT PORA_1, EXTTRAILSOURCE /data/ogg/dirdat/aa
  11.  
  12. # 用 add rmttrail 指定远程 trail 文件
  13. ADD RMTTRAIL /data/ogg/dirdat/pa, EXTRACT PORA_1, MEGABYTES
  14.  
  15. # 启动Pump 进程
  16. START EXTRACT PORA

3.1.5、生成define文件

  在异构的同步复制;需要生成define文件。用于数据兼容不同数据库。

  1. # . 进入ggsci命令行
  2. GGSCI (oracle221) > edit params defgen
  3. defsfile ./dirdef/defgen.def
  4. userid ogg, password ogg
  5. TABLE lottu.*;
  6.  
  7. GGSCI (oracle221) > exit
  8. # 退出ggsci命令;生成文件
  9. defgen paramfile ./dirprm/defgen.prm
  10. # 并传送到目标端
  11. scp /data/ogg/dirdef/defgen_postgres.prm ogg@192.168.1.235:/data/ogg/dirdef

3.2、目标端(PostgreSQL)

3.2.1、创建GoldenGate的工作目录

  1. create subdirs

3.2.2、配置MGR进程组

  1. # 编辑mgr
  2. edit param mgr
  3. PORT 7809
  4. # 启动mgr
  5. start mgr

3.2.3、添加checkpiont表

为了保证源和目标端在传数据的时候不会重复或者少传,在目标端添加checkpoin表

  1. dblogin sourcedb GG_Postgres userid ogg
  2. add checkpointtable ogg.checkpointtab

3.2.4、配置Replicat 进程

  1. # 配置rora_1进程
  2. GGSCI (lottu02) > EDIT PARAMS RORA_1
  3.  
  4. REPLICAT RORA_1
  5. SOURCEDEFS /data/ogg/dirdef/defgen.def
  6. SETENV(PGCLIENTENCODING = "UTF8" )
  7. SETENV(ODBCINI="/data/ogg/odbc.ini" )
  8. SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
  9. TARGETDB GG_Postgres,userid ogg,password ogg
  10. DISCARDFILE /data/ogg/dirrpt/RORA_aa.rpt, append
  11. MAP lottu.*, TARGET lottu.*;
  12.  
  13. # 在目标端使用 add replicat 添加 Replicat 进程
  14. add replicat RORA_1,exttrail /data/ogg/dirdat/pa,begin now,checkpointtable ogg.checkpointtab
  15.  
  16. # 使用 start replicat 启动 Replicat 进程
  17. start REPLICAT ROR

四、验证同步

4.1、查看GoldenGate进程状态

  1. # 源端
  2. GGSCI (oracle221) > info all
  3.  
  4. Program Status Group Lag at Chkpt Time Since Chkpt
  5. MANAGER RUNNING
  6. EXTRACT RUNNING EORA_1 :: ::
  7. EXTRACT RUNNING PORA_1 :: ::
  8.  
  9. # 目标端
  10. GGSCI (lottu02) > info all
  11.  
  12. Program Status Group Lag at Chkpt Time Since Chkpt
  13. MANAGER RUNNING
  14. REPLICAT RUNNING RORA_1 :: ::

4.2、测试同步

  1. # oracle
  2. insert into tbl_lottu values (,'lottu');
  3. # PostgreSQL
  4. lottu=> select * from tbl_lottu;
  5. id | name
  6. ------+-------
  7. | lottu

五、FAQ

在目标端启动mgr进程;出现启动失败;日志如下

  1. -- :: INFO OGG- Oracle GoldenGate Command Interpreter: GGSCI command (postgres): start mgr.
  2. -- :: ERROR OGG- Oracle GoldenGate Manager, mgr.prm: Could not translate host name lottu02 into an Internet address.
  3. -- :: ERROR OGG- Oracle GoldenGate Manager, mgr.prm: PROCESS ABENDING.

解决方案:配置/etc/hosts

OGG For Oracle To PostgreSQL的更多相关文章

  1. 配置ogg从Oracle到PostgreSQL的同步复制json数据

    标签:goldengate postgresql oracle json 测试环境说明 Oracle:Windows 8.1 + Oracle 12.2.0.1.0 + GoldenGate 12.3 ...

  2. 使用ogg实现oracle到postgresql表的实时同步

    参考:https://docs.oracle.com/goldengate/c1221/gg-winux/index.html https://blog.51cto.com/hbxztc/188071 ...

  3. oracle VS postgresql系列-行列转换

    [需求]例如先有数据为 id | name ------+--------- | lottu | xuan | rax | ak | vincent 现在需要转换为 id | names ------ ...

  4. 基于OGG的Oracle与Hadoop集群准实时同步介绍

    版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/220 来源:腾云阁 https://www.qclou ...

  5. MySQL,Oracle,PostgreSQL 数据库web维护客户端管理工具

    TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能包 ...

  6. MySQL,Oracle,PostgreSQL通过web方式管理维护, 提高开发及运维效率

    在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询 ...

  7. MySQL,Oracle,PostgreSQL,mongoDB,Hive, SAP HANA 数据库web维护客户端管理工具

    TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL,mongoDB ,Hive, SA ...

  8. MySQL,Oracle,PostgreSQL,mongoDB 通过web方式管理维护, 提高开发及运维效率

    在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询 ...

  9. 【Oracle】OGG(Oracle GoldenGate)简介及搭建过程

    GoldenGate公司简介 GoldenGate公司专注于数据同步领域,是实现数据同步技术的领导者.至2007年,在全球35个国家售出超过2000个许可证,客户分布在政府.银行.电信.证券.传媒.医 ...

随机推荐

  1. zabbix监控系统系列

    来自网站:http://www.361way.com/zabbix-summarize/3335.html 一.zabbix的特点 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能 ...

  2. F#周报2019年第50期

    新闻 Azure Functions 3.0系统上线 GC性能架构--第1部分 ConfigureAwait问题解答 介绍System.Threading.Channels Windows Serve ...

  3. [权限管理系统(四)]-spring boot +spring security短信认证+redis整合

    [权限管理系统]spring boot +spring security短信认证+redis整合   现在主流的登录方式主要有 3 种:账号密码登录.短信验证码登录和第三方授权登录,前面一节Sprin ...

  4. 上次阿里面试问到Redis主从复制原理,这次终于搞明白了!

    1.前言 Redis单节点存在单点故障,为解决单点问题,需要对Redis节点配置从节点.使用哨兵来监听主节点存活状态,若主节点挂掉,从节点能继续提供缓存功能.从节点怎样和主节点间完成数据传递?就是Re ...

  5. django基础之day09,手机号校验的规则和代码编写

    通过re模块实现手机号码校验的脚本--json老师 import re 通过re模块实现手机号码校验的脚本--json老师 def mobile_validate(value): mobile_re ...

  6. 《Java基础知识》动态代理(InvocationHandler)详解

    1. 什么是动态代理 对象的执行方法,交给代理来负责.比如user.get() 方法,是User对象亲自去执行.而使用代理则是由proxy去执行get方法. 举例:投资商找明星拍广告,投资商是通过经纪 ...

  7. JS中原始值和引用值分析

    JS中变量中两种类型的值:原始值,引用值 原始值是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置. var x = 1; //1就是一个原始值,变量x中存放的就是原始 ...

  8. SpringBoot IoC启动流程、初始化过程及Bean生命周期各个阶段的作用

    目录 SpringBoot IoC启动流程.初始化过程及Bean生命周期各个阶段的作用 简述 首先明确IoC容器是啥 准备-SpringApplication的实例化 启动-SpringApplica ...

  9. 基于Vue的前后端分离项目实践

    一.为什么需要前后端分离 1.1什么是前后端分离  前后端分离这个词刚在毕业(15年)那会就听说过,但是直到17年前都没有接触过前后端分离的项目.怎么理解前后端分离?直观的感觉就是前后端分开去做,即功 ...

  10. ArcGIS JS 4加载第三方矢量切片

        现在矢量切片越来越普及,对于地图渲染能更轻更快.ArcGIS JS 4.13可以实现加载第三方矢量切片,以下为代码示例,最下方是我之前切的建筑物数据.     当切片大小在1M左右,加载效果还 ...