OGG 从 Oracle 到 PostgreSQL 的同步复制 json 数据

标签:goldengate postgresql oracle json

平台环境:

  源端 目标端
系统 Windows 8.1 CentOS7
IP 10.155.4.150 10.155.5.178
数据库 Oracle 12.2.0.1.0 postgresql 10.10-1
OGG版本 GoldenGate 12.3.0.1.2 for oracle Goldengate 12.2.0.1 for PostgreSQL

一、源端配置:

    (因为Oracle的数据库和OGG安装教程简单,此处不做介绍)

    1.1 Oracle 数据库配置:

SQL> sqlplus / as sysdba;

SQL>archive log list;

SQL>shutdown immediate;      

SQL>startup mount;

SQL>alter database archivelog;  //打开归档模式

SQL>alter database open;

SQL> alter database force logging;  //设置强制记录日志

SQL> alter database add supplemental log data;  //增加附加日志

SQL> alter system switch logfile;  //切换日志使附加日志生效

SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;

LOG_MODE         SUPPLEMENTAL_LOG   FORCE_LOGGING

------------------------------------------------------------------------------

ARCHIVELOG         YES                         YES

(这样就配置好了)

SQL> alter system set enable_goldengate_replication=true scope=both;(源端才有)  //把OGG绑定到ORACLE上面

SQL> create user oracle identified by oracle;  //创建源端被抽取用户

SQL> grant dba to oracle;  //赋权

SQL>conn oracle/oracle;

//创建源表

SQL>CREATE TABLE jsontest(

  id  VARCHAR2 (32) NOT NULL PRIMARY KEY,

       po_document  VARCHAR2 (3000)

       CONSTRAINT ensure_json CHECK (po_document IS JSON)

  );

    1.2 OGG配置:

进入oggs目录启动ggsci (默认port 7809,不用修改)

GGSCI (localhost) 1> dblogin userid oracle password oracle  //登陆同步用户

GGSCI (localhost) 2> add trandata oracle.jsontest  //为同步表添加trandata

  添加Extract进程

GGSCI (localhost) 3> add extract ex2 integrated tranlog, begin now

GGSCI (localhost) 4> add exttrail ./dirdat/es extract ex2

GGSCI (localhost) 5> edit params ex2

extract ex2
dynamicresolution
userid oggs,password oggs
exttrail ./dirdat/es format release 12.2  //队列文件版本需要一致
table oracle.jsontest2;

  添加Pump进程

GGSCI (localhost) 6> add extract pu2 exttrailsource ./dirdat/es, begin now

GGSCI (localhost) 7> add rmttrail ./dirdat/et extract pu2

GGSCI (localhost) 8> edit params pu2

extract pu2
rmthost 10.155.5.178, mgrport 7810
rmttrail ./dirdat/et
table oracle.jsontest2;

 

二、目标端配置

    2.1 Postgresql 数据库配置

  PostgreSQL 安装教程请参考:https://www.cnblogs.com/freeweb/p/8006639.html

  创建用于同步的数据库、用户和Schema,并创建测试表

  postgres=# create database smandar;

postgres=# create user smandar superuser password ‘smandar‘;

postgres=# c smandar smandar

smandar=# create schema smandar;

CREATE SCHEMA

smandar=# dn

  List of schemas

  Name   |  Owner 

---------+---------

  public  | smandar

 smandar | smandar

(2 rows)

smandar=# CREATE TABLE jsontest     

smandar-# (

smandar(#   id varchar primary key,

smandar(#   po_document json

smandar(# );

CREATE TABLE

smandar=# d

              List of relations

 Schema  |   Name    | Type  |  Owner 

---------+-----------+-------+---------

smandar | jsontest  | table | smandar

 (1 rows) 

 

    2.2 OGG安装与配置

  (1) 解压安装

$ cd /home/smandar/Oracle/Installation_package

$ unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip

$ cd ..

$ mkdir ogg

$ mv Installation_package /ggs_Linux_x64_PostgreSQL_64bit.tar ogg/

$ tar vxf ggs_Linux_x64_PostgreSQL_64bit.tar

  (2) 配置odbc数据源,goldengate 使用ODBC连接Postgres Database

$ cd /home/smandar/Oracle/ogg

$ vi odbc.ini

[ODBC Data Sources] 
GG_Postgres=DataDirect 10.10 PostgreSQL Wire Protocol 
[ODBC] 
IANAAppCodePage=106
InstallDir=/home/smandar/Oracle/ogg
[GG_Postgres]
Driver=/home/smandar/Oracle/ogg/lib/GGpsql25.so
Description=DataDirect 10.10 PostgreSQL Wire Protocol
Database=smandar
HostName=127.0.0.1
PortNumber=5432 
LogonID=smandar
Password=smandar

[ODBC Data Sources] 里边配置该ODBC的别名,本文件中也就是GG_Postgres 后边的配置文件中的targetdb需要与这个对应

[ODBC]:

IANAAppCodePage 指的是字符集的设置 这里的106值得是UTF8,如果是4则为ISO-8859-1,注意这个应该始终和postgres的字符集设置相同,不同字符集对应的值见附件。

InstallDir 对应ogg的安装目录

[GG_Postgres]: 这里的名称对应的是上边ODBC的别名

Driver 这里指向的是ogg安装目录下的lib/GGpsql25.so

Description 是描述

Database 填写数据库名称

HostName 填写本机的hostname,可以解析的即可。

PosrNumber 是postgres的监听端口。

LogonID 填写postgres的用户名

password 填写postgres的密码

 

(3) 修改环境变量 vi ~/.bashrc

export LD_LIBRARY_PATH=/home/smandar/Oracle/ogg/lib:$LD_LIBRARY_PATH
export PATH=$PATH:/home/smandar/Oracle/ogg
export ODBCINI=/home/smandar/Oracle/ogg/odbc.ini

 

(4) 配置OGG

$ cd /home/smandar/Oracle /ogg

$ ./ggsci

GGSCI (localhost.localdomain) 1> create subdirs  //创建子目录

  GGSCI (localhost.localdomain) 2 > edit param mgr  //配置mgr端口

port 7810

GGSCI (localhost.localdomain) 3 > dblogin sourcedb gg_postgres userid smandar  //配置replicat进程

Password:      //输入密码

GGSCI (localhost.localdomain) 4 > add replicat re2, exttrail ./dirdat/et, nodbcheckpoint

GGSCI (localhost.localdomain) 5 > edit param re2

replicat re2
targetdb gg_postgres, userid smandar, password smandar
assumetargetdefs
map oracle.jsontest2, target smandar.jsontest2;

  

 三、测试

  (1)启动OGG进程

    源端的mgr进程、ex2进程、pu2进程

    目标端的mgr,re2进程

  

 

(2)原始数据

    源端:

  

    目标端:

  

    源端插入数据:

           SQL>INSERT INTO jsontest2

                VALUES ('001',

      '{"PONumber"             : 1600,

      "Reference"            : "ABULL-20140421",

      "Requestor"            : "Alexis Bull",

      "User"                 : "ABULL"}');

           SQL>commit;

    

    目标端查询数据:

     

    (以上结果说明成功同步数据)

  附:

  Oracle 对 json 数据进行查询:

  

  Postgresql 对 json 数据进行查询:

  

原文地址:https://www.cnblogs.com/smandar/p/13996404.html