zoukankan      html  css  js  c++  java
  • 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 数据进行查询:

      

  • 相关阅读:
    (数据科学学习手札48)Scala中的函数式编程
    Java中的集合(十三) 实现Map接口的Hashtable
    Java中的集合(十二) 实现Map接口的WeakHashMap
    Java中的集合(十一) 实现Map接口的TreeMap
    Java集合(十)实现Map接口的HashMap
    Java集合(九)哈希冲突及解决哈希冲突的4种方式
    Java集合(八)哈希表及哈希函数的实现方式
    Java中的集合(七)双列集合顶层接口------Map接口架构
    Java中的集合(六)继承Collection的Set接口
    Java中的集合(五)继承Collection的List接口
  • 原文地址:https://www.cnblogs.com/smandar/p/13996404.html
Copyright © 2011-2022 走看看