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

实验环境如下:

一、软件下载

下载OGG软件地址

二、数据库配置

2.1、源端(Oracle)

2.1.1、创建 GoldenGate 操作系统用户

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

useradd ogg
passwd ogg

2.1.2、创建 GoldenGate 安装目录

mkdir -p /data/ogg
chown -R ogg:ogg /data/ogg

2.1.3、安装 GoldenGate

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

2.1.4、配置 GoldenGate环境变量

export GGATE=/data/ogg
export ORACLE_BASE=/u01/app
export ORACLE_HOME=$ORACLE_BASE/oracle
export PATH=$PATH:$GGATE:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE:$LD_LIBRARY_PATH
alias sqlplus='rlwrap sqlplus'
alias ggsci='rlwrap ggsci'

2.1.5、配置Oracle数据库

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

SQL> alter system set log_archive_dest_1 = 'LOCATION=/data/arch' scope = spfile;
SQL> shutdown immediate;
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
# 查看归档模式
SQL> archive log list
# 还需要开启 force log 和 supplemental log
SQL> alter database force logging;
SQL> alter database add SUPPLEMENTAL log data;
# 查询结果
SQL> select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database;
NAME OPEN_MODE FOR SUPPLEME
--------- -------------------- --- --------
ORA235 READ WRITE YES YES

2.1.6、oracle创建复制用户ogg

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

2.2、目标端(PostgreSQL)

2.2.1、创建 GoldenGate 操作系统用户

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

useradd ogg
passwd ogg

2.2.2、创建 GoldenGate 安装目录

mkdir -p /data/ogg
chown -R ogg:ogg /data/ogg

2.2.3、安装 GoldenGate

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

2.2.4、配置 GoldenGate环境变量

export GGATE=/data/ogg
export PGHOME=/opt/pgsql10
export PGDATA=/data/postgres/data1
export PATH=$PGHOME/bin:$HOME/bin:$GGATE:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$GGATE/lib:$LD_LIBRARY_PATH
export ODBCINI=$GGATE/odbc.ini
alias ggsci='rlwrap ggsci'

2.2.5、创建复制用户ogg

create user ogg superuser identified by ogg;
\c lottu ogg
create schema ogg;

2.2.6、创建DSN

  生成odbc.ini文件

[ODBC Data Sources]
GG_Postgres=DataDirect PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=
InstallDir=/data/ogg
[GG_Postgres]
Driver=/data/ogg/lib/GGpsql25.so
Description=DataDirect PostgreSQL Wire Protocol
Database=lottu
HostName=localhost
PortNumber=
LogonID=ogg
Password=ogg

三、GoldenGate进程配置

3.1、源端(Oracle)

3.1.1、创建 GoldenGate 的工作目录

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

GGSCI (oracle221) > create subdirs
Creating subdirectories under current directory /data/ogg
Parameter files /data/ogg/dirprm: already exists
Report files /data/ogg/dirrpt: created
Checkpoint files /data/ogg/dirchk: created
Process status files /data/ogg/dirpcs: created
SQL script files /data/ogg/dirsql: created
Database definitions files /data/ogg/dirdef: created
Extract data files /data/ogg/dirdat: created
Temporary files /data/ogg/dirtmp: created
Stdout files /data/ogg/dirout: created

3.1.2、配置 MGR 进程组

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

GGSCI (oracle221) > edit params mgr

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

3.1.3、配置 Extract 进程

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

GGSCI (oracle221) > edit params EORA_1
EXTRACT EORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
SETENV (ORACLE_HOME="/u01/app/oracle")
SETENV (ORACLE_SID="ora221")
USERID ogg, PASSWORD ogg
DISCARDFILE /data/ogg/dirrpt/EORA_1.dsc,APPEND,MEGABYTES
EXTTRAIL /data/ogg/dirdat/aa
TABLE lottu.*; # 在源端用 add extract 命令创建 extract 组;
GGSCI (oracle221) > ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW
EXTRACT added. # 用add exttrail 命令创建本地 trail 文件
GGSCI (oracle221) > ADD EXTTRAIL /data/ogg/dirdat/aa, EXTRACT EORA_1, MEGABYTES
EXTTRAIL added. # 启动extract进程
GGSCI (oracle221) > start extract eora_1
Sending START request to MANAGER ...
EXTRACT EORA_1 starting GGSCI (oracle221) > info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA_1 :: ::

3.1.4、配置 Pump 进程

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

GGSCI (oracle221) > EDIT PARAMS PORA_1
EXTRACT PORA_1
SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
PASSTHRU
RMTHOST 192.168.1.235, MGRPORT
RMTTRAIL /data/ogg/dirdat/pa
TABLE lottu.*; # 用 add extract 指定本地 trail 文件
ADD EXTRACT PORA_1, EXTTRAILSOURCE /data/ogg/dirdat/aa # 用 add rmttrail 指定远程 trail 文件
ADD RMTTRAIL /data/ogg/dirdat/pa, EXTRACT PORA_1, MEGABYTES # 启动Pump 进程
START EXTRACT PORA

3.1.5、生成define文件

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

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

3.2、目标端(PostgreSQL)

3.2.1、创建GoldenGate的工作目录

create subdirs

3.2.2、配置MGR进程组

# 编辑mgr
edit param mgr
PORT 7809
# 启动mgr
start mgr

3.2.3、添加checkpiont表

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

dblogin sourcedb GG_Postgres userid ogg
add checkpointtable ogg.checkpointtab

3.2.4、配置Replicat 进程

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

四、验证同步

4.1、查看GoldenGate进程状态

# 源端
GGSCI (oracle221) > info all Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EORA_1 :: ::
EXTRACT RUNNING PORA_1 :: :: # 目标端
GGSCI (lottu02) > info all Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING RORA_1 :: ::

4.2、测试同步

# oracle
insert into tbl_lottu values (,'lottu');
# PostgreSQL
lottu=> select * from tbl_lottu;
id | name
------+-------
| lottu

五、FAQ

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

-- ::  INFO    OGG-  Oracle GoldenGate Command Interpreter:  GGSCI command (postgres): start mgr.
-- :: ERROR OGG- Oracle GoldenGate Manager, mgr.prm: Could not translate host name lottu02 into an Internet address.
-- :: 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. 压缩感知重构算法之CoSaMP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  2. Cesium专栏-大量gltf三维模型加载

    Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以 ...

  3. 2017 ACM/ICPC 沈阳 G题 Infinite Fraction Path

    The ant Welly now dedicates himself to urban infrastructure. He came to the kingdom of numbers and s ...

  4. HDU-3727 Jewel

    Jimmy wants to make a special necklace for his girlfriend. He bought many beads with various sizes, ...

  5. nfs服务的讲解

    第4章 nfs存储服务的搭建 4.1 nfs服务的介绍 4.1.1 nfs的作用 nfs服务器是一种远程网络传输的共享文件系统 节省web服务器的本地存储空间 用户存储在web服务器上面的资源,会通过 ...

  6. ARTS-S python把非汉语和非字母的字符替换成空格

    # coding: utf-8 import re text = "aa[bb,aa#cWc中a国" FILTER_PUNTS = re.compile("[^\u4E0 ...

  7. latex常用技巧

    画表格 \usepackage{multirow} \begin{tabular}{cccc} \hline \multicolumn{4}{c}{学生信息}\\ \hline 班级& 姓名& ...

  8. 【搞定Jvm面试】 JVM 垃圾回收揭秘附常见面试题解析

    JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好 ...

  9. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  10. 常见的 由于未调整服务器 ulimit 而引起的内存溢出问题

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/e3bb62c9-9 ...