• OGG For Oracle To PostgreSQL


      本文档描述OGG(Oracle goldengate)为Oracle同步到PostgreSQL数据库配置。在目前去“IOE”潮流。PostgreSQL确实是Oracle最好的替代品之一。

    实验环境如下:

     一、软件下载

    下载OGG软件地址

     二、数据库配置

    2.1、源端(Oracle)

    2.1.1、创建 GoldenGate 操作系统用户

    专门用ogg用户来维护操作GoldenGate。

    useradd ogg
    passwd ogg

    2.1.2、创建 GoldenGate 安装目录

    mkdir -p /data/ogg
    chown -R ogg:ogg /data/ogg

    2.1.3、安装 GoldenGate

    unzip fbo_ggs_Linux_x64_ora11g_64bit.tar.zip
    tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /data/ogg

    2.1.4、配置 GoldenGate环境变量

    export GGATE=/data/ogg
    export ORACLE_BASE=/u01/app
    export ORACLE_HOME=$ORACLE_BASE/oracle
    export PATH=$PATH:$GGATE:$ORACLE_HOME/bin
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GGATE:$LD_LIBRARY_PATH
    alias sqlplus='rlwrap sqlplus'
    alias ggsci='rlwrap ggsci'

    2.1.5、配置Oracle数据库

      由于 GoldenGate 的原理是根据 Oracle 的日志进行抽取复制。为了保证日志的完整性;需要打开 Oracle 数据库归档;

    SQL> alter system set log_archive_dest_1 = 'LOCATION=/data/arch' scope = spfile;
    SQL> shutdown immediate;
    SQL> startup mount
    SQL> alter database archivelog;
    SQL> alter database open;
    # 查看归档模式 SQL
    > archive log list
    # 还需要开启 force log 和 supplemental log SQL
    > alter database force logging; SQL> alter database add SUPPLEMENTAL log data;
    # 查询结果 SQL
    > select NAME,OPEN_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN from v$database; NAME OPEN_MODE FOR SUPPLEME --------- -------------------- --- -------- ORA235 READ WRITE YES YES

    2.1.6、oracle创建复制用户ogg

    # 建议使用单独的表空间存放 GoldenGate 数据
    create tablespace tsp_ogg datafile '/data/oracle/data/ogg01.dbf' size 512M autoextend on;
    # 创建 GoldenGate 用户并赋权
    create user ogg identified by ogg default tablespace tsp_ogg;
    grant dba to ogg;
    # 严谨一些;这样赋权
    grant connect, resource TO ogg;
    grant select any dictionary, select any table TO ogg;    
    grant flashback any table TO ogg;
    grant execute on dbms_flashback TO ogg;

    2.2、目标端(PostgreSQL)

    2.2.1、创建 GoldenGate 操作系统用户

      专门用ogg用户来维护操作GoldenGate。

    useradd ogg
    passwd ogg

    2.2.2、创建 GoldenGate 安装目录

    mkdir -p /data/ogg
    chown -R ogg:ogg /data/ogg

    2.2.3、安装 GoldenGate

    unzip 122022_ggs_Linux_x64_PostgreSQL_64bit.zip 
    tar -xvf ggs_Linux_x64_PostgreSQL_64bit.tar -C /data/ogg

    2.2.4、配置 GoldenGate环境变量

    export GGATE=/data/ogg
    export PGHOME=/opt/pgsql10
    export PGDATA=/data/postgres/data1                
    export PATH=$PGHOME/bin:$HOME/bin:$GGATE:$PATH
    export LD_LIBRARY_PATH=$PGHOME/lib:$GGATE/lib:$LD_LIBRARY_PATH
    export ODBCINI=$GGATE/odbc.ini
    alias ggsci='rlwrap ggsci'

    2.2.5、创建复制用户ogg

    create user ogg superuser identified by ogg;
    c lottu ogg
    create schema ogg;

    2.2.6、创建DSN

      生成odbc.ini文件

    [ODBC Data Sources]  
    GG_Postgres=DataDirect 10 PostgreSQL Wire Protocol  
    [ODBC]  
    IANAAppCodePage=106
    InstallDir=/data/ogg
    [GG_Postgres] 
    Driver=/data/ogg/lib/GGpsql25.so
    Description=DataDirect 10 PostgreSQL Wire Protocol
    Database=lottu
    HostName=localhost
    PortNumber=5432  
    LogonID=ogg
    Password=ogg

    三、GoldenGate进程配置

    3.1、源端(Oracle)

    3.1.1、创建 GoldenGate 的工作目录 

    执行ggsci,登录GoldenGate,只需要执行create subdirs命令就可以了。

    GGSCI (oracle221) 1> create subdirs
    Creating subdirectories under current directory /data/ogg
    Parameter files                /data/ogg/dirprm: already exists
    Report files                   /data/ogg/dirrpt: created
    Checkpoint files               /data/ogg/dirchk: created
    Process status files           /data/ogg/dirpcs: created
    SQL script files               /data/ogg/dirsql: created
    Database definitions files     /data/ogg/dirdef: created
    Extract data files             /data/ogg/dirdat: created
    Temporary files                /data/ogg/dirtmp: created
    Stdout files                   /data/ogg/dirout: created

    3.1.2、配置 MGR 进程组

      负责启动GoldenGate进程,以及启动动态进程,管理trail文件,错误信息。运行ggsci程序;输入 “EDIT PARAMS MGR” 编辑参数文件:

    GGSCI (oracle221) 2> edit params mgr
    
    PORT 7809
    DYNAMICPORTLIST 7800-8000
    AUTOSTART ER *
    AUTORESTART EXTRACT *,WAITMINUTES 2, RESETMINUTES 5
    PURGEOLDEXTRACTS /data/ogg/dirdat/*,USECHECKPOINTS,MINKEEPDAYS 3
    LAGREPORTHOURS 1
    LAGINFOMINUTES 30
    LAGCRITICALMINUTES 45
    SYSLOG ERROR,WARN
    
    GGSCI (oracle221) 3> start mgr
    Manager started.
    
    GGSCI (oracle221) 4> info all
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING 
    • PORT:指定服务监听端口;默认端口为7809
    • DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口
    • AUTORESTART:自动重启参数设置:本处设置表示每2分钟尝试重新启动所有EXTRACT进程;以后5分钟清零。
    • PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除

    3.1.3、配置 Extract 进程

      负责抓取需要传输数据;下面在源端配置抽取进程。

    GGSCI (oracle221) 5> edit params EORA_1
    EXTRACT EORA_1
    SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
    SETENV (ORACLE_HOME="/u01/app/oracle")
    SETENV (ORACLE_SID="ora221")
    USERID ogg, PASSWORD ogg
    DISCARDFILE /data/ogg/dirrpt/EORA_1.dsc,APPEND,MEGABYTES 1024
    EXTTRAIL /data/ogg/dirdat/aa 
    TABLE lottu.*;
    
    # 在源端用 add extract 命令创建 extract 组;
    GGSCI (oracle221) 6> ADD EXTRACT EORA_1, TRANLOG, BEGIN NOW
    EXTRACT added.
    
    # 用add exttrail 命令创建本地 trail 文件
    GGSCI (oracle221) 7> ADD EXTTRAIL /data/ogg/dirdat/aa, EXTRACT EORA_1, MEGABYTES 5
    EXTTRAIL added.
    
    # 启动extract进程
    GGSCI (oracle221) 8> start extract eora_1
    Sending START request to MANAGER ...
    EXTRACT EORA_1 starting
    
    GGSCI (oracle221) 9> info all
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING                                           
    EXTRACT     RUNNING     EORA_1      00:00:33      00:00:0

    3.1.4、配置 Pump 进程

      extract进程负责将抓取的数据写入本地trail文件;而需要Pump进程把trail文件传输到目标端。使用 EDIT PARAMS PORA_1 添加配置文件

    GGSCI (oracle221) 10> EDIT PARAMS PORA_1
    EXTRACT PORA_1
    SETENV (NLS_LANG=AMERICAN_AMERICA.UTF8)
    PASSTHRU
    RMTHOST 192.168.1.235, MGRPORT 7809
    RMTTRAIL /data/ogg/dirdat/pa
    TABLE lottu.*;
    
    # 用 add extract 指定本地 trail 文件
    ADD EXTRACT PORA_1, EXTTRAILSOURCE /data/ogg/dirdat/aa
    
    # 用 add rmttrail 指定远程 trail 文件
    ADD RMTTRAIL /data/ogg/dirdat/pa, EXTRACT PORA_1, MEGABYTES 5
    
    # 启动Pump 进程
    START EXTRACT PORA

    3.1.5、生成define文件

      在异构的同步复制;需要生成define文件。用于数据兼容不同数据库。

    # 1. 进入ggsci命令行
    GGSCI (oracle221) 16> edit params defgen
    defsfile ./dirdef/defgen.def
    userid ogg, password ogg
    TABLE lottu.*;
    
    GGSCI (oracle221) 17> exit
    # 退出ggsci命令;生成文件 defgen paramfile .
    /dirprm/defgen.prm
    # 并传送到目标端 scp
    /data/ogg/dirdef/defgen_postgres.prm ogg@192.168.1.235:/data/ogg/dirdef

    3.2、目标端(PostgreSQL)

    3.2.1、创建GoldenGate的工作目录

    create subdirs

    3.2.2、配置MGR进程组

    # 编辑mgr
    edit param mgr
    PORT 7809
    # 启动mgr start mgr

    3.2.3、添加checkpiont表

    为了保证源和目标端在传数据的时候不会重复或者少传,在目标端添加checkpoin表

    dblogin sourcedb GG_Postgres userid ogg
    add checkpointtable ogg.checkpointtab

    3.2.4、配置Replicat 进程

    # 配置rora_1进程
    GGSCI (lottu02) 1> EDIT PARAMS RORA_1
    
    REPLICAT RORA_1
    SOURCEDEFS /data/ogg/dirdef/defgen.def
    SETENV(PGCLIENTENCODING = "UTF8" )
    SETENV(ODBCINI="/data/ogg/odbc.ini" )
    SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
    TARGETDB GG_Postgres,userid ogg,password ogg
    DISCARDFILE /data/ogg/dirrpt/RORA_aa.rpt, append
    MAP lottu.*, TARGET lottu.*;
    
    # 在目标端使用 add replicat 添加 Replicat 进程
    add replicat RORA_1,exttrail /data/ogg/dirdat/pa,begin now,checkpointtable ogg.checkpointtab
    
    # 使用 start replicat 启动 Replicat 进程
    start REPLICAT ROR

    四、验证同步

    4.1、查看GoldenGate进程状态

    # 源端
    GGSCI (oracle221) 1> info all
    
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING                                           
    EXTRACT     RUNNING     EORA_1      00:00:00      00:00:02    
    EXTRACT     RUNNING     PORA_1      00:00:00      00:00:09    
    
    # 目标端
    GGSCI (lottu02) 2> info all
    
    Program     Status      Group       Lag at Chkpt  Time Since Chkpt
    MANAGER     RUNNING                                           
    REPLICAT    RUNNING     RORA_1      00:00:00      00:00:03  

    4.2、测试同步

    # oracle
    insert into tbl_lottu values (1001,'lottu');
    # PostgreSQL
    lottu=> select * from tbl_lottu;
      id  | name  
    ------+-------
     1001 | lottu

    五、FAQ

    在目标端启动mgr进程;出现启动失败;日志如下

    2019-09-04 14:10:39  INFO    OGG-00987  Oracle GoldenGate Command Interpreter:  GGSCI command (postgres): start mgr.
    2019-09-04 14:10:40  ERROR   OGG-06551  Oracle GoldenGate Manager, mgr.prm:  Could not translate host name lottu02 into an Internet address.
    2019-09-04 14:10:40  ERROR   OGG-01668  Oracle GoldenGate Manager, mgr.prm:  PROCESS ABENDING.

    解决方案配置/etc/hosts

  • 相关阅读:
    数据存储之使用MongoDB数据库存储数据
    数据存储之使用mysql数据库存储数据
    数据存储之json文件处理和csv文件处理
    python使用PyQt5,及QtCreator,qt-unified界面设计以及逻辑实现
    Tesseract-ocr视觉学习-验证码识别及python import pytesseract使用
    ubuntu crontab设置定时任务
    nginx+django线上部署
    PHP网站从Apache转移到Nginx后产生404错误的原因和解决办法
    收集的免费API接口
    C#中字符数组,字节数组和string之间的转化
  • 原文地址:https://www.cnblogs.com/lottu/p/11466112.html
Copyright © 2020-2023  润新知