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


    参考:https://docs.oracle.com/goldengate/c1221/gg-winux/index.html

       https://blog.51cto.com/hbxztc/1880714

    环境:oracle 11.2.0.4+centos6.9,postgresql10.6+centos6.9

    1.下载OGG

    下载网址:https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html

         http://edelivery.oracle.com/

    下载安装包如下:122022_ggs_Linux_x64_PostgreSQL_64bit.zip,V861007-01.zip

    2.源端(oracle)ogg安装

    $ cd /data/
    $ mkdir ogg
    $ cd /data/software
    $ unzip V861007-01.Zip
    $ cd fbo_ggs_Linux_x64_shiphome/Disk1/
    $ export DISPLAY=xxx.xxx.xxx.xxx:0.0
    $ ./runInstaller

    执行命令后,会出现图形化界面

    选择安装对应版本oracle的ogg

    指定ogg安装路径,配置mgr参数

    报错:

    只是因为我已经安装过一次了,因此上一次OGG安装目录中已经存在于OGG的安装清单(inventory.xml)里面,解决方法如下:

    # find / -name inventory.xml
    # su - oracle
    $ vi /oracle/oraInventory/ContentsXML/inventory.xml
    #删除如下一行即可
    <HOME NAME="OraHome1" LOC="/data/ogg" TYPE="O" IDX="2"/>

    删除后,点击cancel取消,再次进入图形化界面即可。

    3.源端OGG配置

    打开归档

    alter database archivelog;

    打开允许ogg复制,打开附件日志(UPDATE更新redo会记录所有的栏位,会增加redo量)

    alter system set enable_goldengate_replication=true;
    ALTER
    DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; --全库打开附件日志,后续不需要对单独的表增加附件日志 --也可以用如下方法打开最小附加日志,之后对需要OGG的表单独增加附加日志 alter database add supplemental log data; add trandata user.table --这一句后续在OGG中执行

    修改环境变量

    $ vi .bash_Profile
    export GGATE-/data/ogg export PATH=$PATH:$GGATE export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE

    新增ogg用户并赋权

    create tablespace ggs_data datafile '/data/db/ggs_data01.dbf' size 1g;
    create user ggs_owner identified by xxxxxx default tablespace ggs_data temporary tablespace temp quota unlimited on ggs_data;
    grant connect, resource TO ggs_owner;
    GRANT select any dictionary, select any table TO ggs_owner;    
    grant flashback any table TO ggs_owner;
    grant execute on dbms_flashback TO ggs_owner;

    新增ogg抽取进程

    edit param mgr    
    add extract ext_demo,tranlog,begin now
    edit param ext_demo
    --------------------------------------------------------------------------
    extract ext_demo
    setenv (NLS_LANG="TRADITIONAL CHINESE_TAIWAN.AL32UTF8")   
    setenv (ORACLE_SID=db)
    userid ggs_owner,password xxxxxx
    exttrail /data/ogg/dirdat/ed
    table USER01.TEST01;    
    --------------------------------------------------------------------------
    add exttrail /data/ogg/dirdat/ed,extract ext_demo

    新增ogg传送进程

    add extract pup_demo exttrailsource /data/ogg/dirdat/ed 
    edit param pup_demo
    ---------------------------------------------------------        
    extract pup_demo
    setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
    setenv (ORACLE_SID=db)
    rmthost xxx.xxx.xxx.xxx,mgrport 7809,compress
    rmttrail /data/ogg/dirdat/rd
    table USER01.TEST01;
    ---------------------------------------------------------        
    add rmttrail /data/ogg/dirdat/rd,extract pup_demo

    生成源端定义文件(oracle和pg的数据类型不同,感觉是为了类型转换,没有测试如果不使用会如何)

    vi ./dirprm/defgen.prm
    DEFSFILE ./dirdef/defgen_postgres.prm;
    userid ggs_owner,password xxxxxx;
    table USER01.TEST01;
    defgen paramfile ./dirprm/defgen.prm

    4.postgresql端OGG安装与配置(以下的所有$代表postgres用户)

    解压安装

    $ cd /data/software/
    $ unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip
    $ cd /data/
    $ mkdir ogg
    $ mv software/ggs_Linux_x64_PostgreSQL_64bit.tar ogg/
    $ tar vxf ggs_Linux_x64_PostgreSQL_64bit.tar

    创建子目录

    $ cd /data/ogg
    $ ggsci
    create subdirs

    创建DSN(database source name)

    ogg for pg使用的是ODBC来连接数据库,因此需要指明ODBC dirver

    [ODBC Data Sources]:定义的数据库别名,后面的【postgre】部分与之对应
    IANAAppCodePage:字符集,应该与postgresql数据库的字符集对应,106代表的是UTF-8
    $ cd /data/ogg
    $ vi odbc.ini
    ----------------------------------------------------
    [ODBC Data Sources]
    postgre=DataDirect 10.6 PostgreSQL Wire Protocol
    
    [ODBC]
    IANAAppCodePage=106
    InstallDir=/data/ogg
    
    [postgre]
    Driver=/data/ogg/lib/GGpsql25.so
    Description=DataDirect 10.6 PostgreSQL Wire Protocol
    Database=pgdb
    HostName=xxx.xxx.xxx.xxx
    PortNumber=5432
    LogonID=ggs_owner
    Password=xxxxxx
    --------------------------------------------------

    修改postgres环境变量

    重点是动态连接库和ODBCINI的环境变量

    export GGATE=/data/ogg
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GGATE/lib
    export PATH=$PATH:$PGHOME/bin/:$GGATE
    export ODBCINI=$GGATE/odbc.ini

    进入pg数据库创建测试用户(其实应该在创建odbc.ini之前执行)

    $ psql
    create database oggtest;
    create user ggs_owner superuser password 'xxxxxx';
    c oggtest ggs_owner
    create schema ggs_owner;
    create table test01(id int primary key,name varchar(10),age int);

    修改mgr参数

    $ cd $GGATE
    $ ggsci
    edit param mgr
    ---------------------
    PORT 7089
    ---------------------

    新增checkpoint

    需要注意,sourcedb必须与odbc.ini中配置的ODBC Data source相同,这样ogg才可以找到要登录的数据库(加入一个主机上有好几个数据库),因此odbc.ini可以用来区分复制进程所属数据库

    # ogg中执行如下
    dblogin sourcedb postgre userid ggs_owner
    add checkpointtable ggs_owner.checkpointtab

    新增复制进程

    经测试,ODBCINI无需写入参数环境变量中,因为在postgres环境变量中已设定

    $ cd $GGATE
    $ mkdir dircard
    edit param rep_demo
    ----------------------------------------------------------------
    replicat rep_demo
    SOURCEDEFS ./dirdef/defgen_postgres.prm
    SETENV(PGCLIENTENCODING = "UTF8" )
    SETENV(ODBCINI="/ogg/odbc.ini" )
    SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
    TARGETDB postgre,userid ggs_owner,password xxxxxx
    DISCARDFILE ./discard/rep_demo.txt
    map user01.test01 ,target ggs_owner.test01;
    -----------------------------------------------------------
    add replicat rep_demo,exttrail /data/ogg/dirdat/rd,begin now,checkpointtable ggs_owner.checkpointtab

    将定义文件传送过来

    scp oracle@xxx.xxx.xxx.xxx:/data/ogg/dirdef/defgen_postgres.prm  /data/ogg/dirdef

    开启进程并测试

  • 相关阅读:
    Java基础加强-内部类及代理
    金额货币转换函数
    SAP ABAP exporting list to memory ...SUBMIT 程序传输屏幕参数
    得到时间戳的函数
    alv行可编辑时带出描述
    ALV编辑行内容有改变时候操作
    ALV判断修改后是否有不合法数据,有则选中错误行,高亮度显示。
    数据字典的QUAN DEC类型与ABAP P型转换
    屏幕编程 F4的帮组用法
    read table 时关键字TRANSPORTING NO FIELDS的用法
  • 原文地址:https://www.cnblogs.com/monkey6/p/11131387.html
Copyright © 2020-2023  润新知