zoukankan      html  css  js  c++  java
  • 使用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程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/monkey6/p/11131387.html
Copyright © 2011-2022 走看看