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


    标签:goldengate postgresql oracle json

    测试环境说明

    Oracle:Windows 8.1 + Oracle 12.2.0.1.0 + GoldenGate 12.3.0.1.2 for oracle

    IP:10.155.4.150

    PostgreSQL:CentOS7 + postgresql 10.10-1 + Goldengate 12.2.0.1 for PostgreSQL

    IP: 10.155.5.178

    源端

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

    数据库配置

    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;(源端才有)

    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));

    OGG配置

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

    //登陆同步用户

    GGSCI (localhost) 1> dblogin userid oracle password oracle

    //为同步表添加trandata

    add trandata oracle.jsontest

    ------添加Extract进程

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

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

    GGSCI (localhost) 4> edit params ex2

    EXTRACT ex2

    extract ex2

    dynamicresolution

    userid oggs,password oggs

    exttrail ./dirdat/es format release 12.2 //队列文件版本需要与目标端一致

    table oracle.jsontest2;

    ------添加Pump进程

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

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

    GGSCI (localhost) 7> edit params pu2

    extract pu2

    RMTHOST 10.155.5.178, MGRPORT 7810

    RMTTRAIL ./dirdat/et

    TABLE oracle.jsontest2;

    目标端

    数据库配置

    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)

    OGG安装

    (以下的所有$代表smandar用户)

    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

    Odbc配置

    投递到postgresql需要使用odbc方式

    配置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

    配置OGG参数

    $ cd /home/smandar/Oracle /ogg

    $ ./ggsci

    ------创建子目录:

    GGSCI (localhost.localdomain) 1>create subdirs

    ------配置mgr端口(与源端端口不能相同)

    GGSCI (localhost.localdomain) 2> edit param mgr

    PORT 7810

    ------配置replicat进程

    GGSCI (localhost.localdomain) 3> dblogin sourcedb gg_postgres userid smandar

    Password: //输入密码

    GGSCI (localhost.localdomain) 4>add 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;

    启动测试

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

    clip_image002

    启动目标端的mgr,re2进程

    clip_image004

    源端原始数据

    clip_image005

    目标端原始数据:

    clip_image007

    源端插入数据:

    SQL>INSERT INTO jsontest2

    VALUES ('001',

    '{"PONumber" : 1600,

    "Reference" : "ABULL-20140421",

    "Requestor" : "Alexis Bull",

    "User" : "ABULL"}');

    SQL>commit;

    clip_image008

    目标端查询数据:

    clip_image010

    对json数据进行查询

    clip_image011

    clip_image013

    小结

        可以看到,使用OGG,除了标准的数据类型同步外,还可以将oracle db中的json实时同步到 postgresql db中。

  • 相关阅读:
    A. Ivan the Fool and the Probability Theory
    关于消除“输出中最后的一个空格”问题
    半文件式输入中一种常见的输入方式
    持续输入问题
    汉诺塔问题
    给定两个正整数,求它们的最大公约数。
    第三届全国高校绿色计算机大赛(初赛题目)
    第三届全国高校绿色计算机大赛(初赛题目)
    C++中的输入及其原理简析
    流感传染
  • 原文地址:https://www.cnblogs.com/margiex/p/11538056.html
Copyright © 2020-2023  润新知