• GoldenGate for Java Adapter介绍一(原理篇)


    前言

        Oracle Goldengate在很早前就推出了一个for java的版本,主要目的是方便把关系型数据实时写入到不支持的目标端,如JMS或Redis等key value数据库。在Hadoop刚出来的时候,也可以使用ogg for java adapter将数据实时投递到HDFS等平台,只是后来专门推出了一个ogg for bigdata版本,可以不用二次开发,即可将数据实时投递到hbase ,hive, kafka, mongodb等。所以,针对不支持的目标端,还是需要使用ogg for java adapter进行二次开发和投递。

    官网上的OGG for java adapter介质:

    image

    官网上ogg for bigdata介质:

    image

    架构

    针对ogg for java adapter,常用的架构如下:

    image

    OGG for java adapter可用于将增量数据实时写入到flatfile,通过ETL的Load,加载到DW中,实现实时数据仓库的加载和分析。如下架构:

    image

    配置

        针对ogg for java adapter,还是需要配置传统的source extract,目标端也需要配置replicat,但此时,是调用自己开发的java投递程序。而OGG提供有一套框架接口,开发人员只需要实现对应的接口和重载部分函数,即可完成获取增量数据,获取表结构定义,数据变更类型(Insert/update/delete等),事务控制等操作,从而实现自定义的数据投递。

    源端抽取配置

    1、oracle goldengate要求数据库日志为存档模式

    CMD> set ORACLE_SID=jxk

    CMD> sqlplus / as sysdba

    SQL> archive log list;(查看数据库日志模式)

    (1)如数据库模式为禁用存档模式,且数据库正在运行,需要先将数据库先关闭,再启动,并修改配置

    SQL> shutdown immediate;

    注:shutdown immediate可以强行结束或回滚正在执行的事务、进程就可以close DB

    SQL> startup mount;

    SQL> alter database archivelog;

    SQL> alter database open;

    SQL> alter database force logging;

    SQL> alter database add supplemental log data(primary key,unique) columns;

    SQL> alter system archive log current;

    2、oracle推荐新建专用同步用户,执行ogg操作,与业务用户做区分。

    SQL> create user ogg identified by ogg;

    SQL>grant dba to ogg;

    3、对需要同步的表生成对应的表结构信息(针对OGG12.2以下的版本)

    编辑 $OGG_HOME/def.prm

    defsfile busiuser.def --文件名

    USERID ogg, PASSWORD ogg --ogg数据库同步用户

    table busiuser.iy01; --需要同步的表

    table newuser.*;


    cd E:/ogg

    Cmd > defgen paramfile def.prm

    将生成的busiuser.def文件拷贝至目标端的$OGG_HOME/dirdef目录下

    注意:如果busiuser.def文件已存在,则需要手动删除,再执行生成命令,否则报错。原因是oracle此处不会自动删除已存在的文件。另外 table busiuser.iy01后面必须跟分号”;”,否则执行defgen的时候会报 command ‘TABLE’ not terminate ……错误。

    --抽取

    add extract ex2, tranlog, begin now

    add exttrail ./dirdat/e2, extract ex2, megabytes 100

    --传输

    add extract pu2, exttrailSource ./dirdat/e2

    add rmttrail ./dirdat/e3, extract pu2, megabytes 200

    --投递

    add replicat re2, exttrail ./dirdat/e3, nodbcheckpoint

    4、配置ogg进程

    cd E:/ogg

    E:

    ggsci

    > create subdirs

    > edit param mgr (创建管理进程)输入端口

    port 7809

    > edit param ex1

    extract ex1

    oracle_home

    setenv(oracle_sid="jxk") --设置oracle_sid

    nls_lang

    userid ogg, password ogg --设置操作ogg的用户

    rmthost 192.168.0.44, mgrport 7809 --目标端ogg的ip和端口

    rmttrail ./dirdat/ea --目标端的队列文件保存目录,相对与安装ogg目录的路径

    table busiuser.*; --需要执行同步的表,可单表配置,也支持通配 用户名.表名


    注:ex1文件发生改变,需要重启mgr和ex1进程;ex1名称自定义

    默认只支持DML,如果要支持DDL需要执行一些单独的配置。

    > add extract ex1(此名称需要与配置prm文件名一致), tranlog, begin now

    --TRANLOG 表示使用事务日志的方式

    --BEGIN NOW 表示从现在开始,你也可以指定一个具体的开始时间

    > add rmttrail ./dirdat/ea, extract ex1

    > start mgr

    > start ex1

    > info 进程名(查看进程状态)

    > info all(查看所有进程状态)

    > view report ex1(查看进程ex1运行日志)

    完成上述操作后,还需要对需要同步的表做trandata操作,否则没有主键的表同步会报错,异常信息如下:

    OGG-00730 No minimum supplemental logging is enabled. This may cause extract process to handle key update incorrectly if key column is not in first row piece.

    Cmd > set oracle_sid=orcl

    Cmd > ggsci

    > dblogin userid ogg, password ogg

    > add trandata business.iy01

    > start ex1(重启进程)

    如遇到错误:ERROR OGG-00717 Found unsupported in-memory undo record in sequence 38978, at RBA 4562448, with SCN 0.2055451476 (2055451476) ... Minimum supplemental logging must be enabled to prevent data loss. 执行如下操作

    > alter ex1, tranlog, begin now

    > start ex1

    > stats ex1(查看当前正在队列中的数据)

    目标端JDBC连接方式配置

    1、下载ogg application adapters for linux

    2、解压配置环境变量

    export JAVA_HOME=/home/gbase/jdk1.8.0_45

    export PATH=$JAVA_HOME/bin:$PATH

    export LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/amd64/server:/home/oracle/ogg:${LD_LIBRARY_PATH}

    注意:LD_LIBRARY_PATH这个配置是因为ogg中的库文件需要依赖

    3、进入安装目录执行命令

    $>./ggsci

    > create subdirs

    > edit param mgr

    Port 7809

    > start mgr

    >info all

    4、目标端启动mgr后,源端启动抽取进程才会成功,下面执行目标端进程配置

    (以下使用传统的extract模式进行投递,在ogg12.2及以后版本,可使用replicat模式)

    1)拷贝redis-jdbc驱动包和二次开发的jar包到 $OGG_HOME/ggjava目录下

    2)>edit param rejava

    Extract rejava

    -- Sample extract prm file for the Oracle GoldenGate for Java user-exit. A properties

    -- file configures the user-exit; by default named "dirprm/{extract_name}.properties"

    -- e.g., javaue.prm loads javaue.properties. The user-exit runs in a data pump extract:

    -- ggsci> add extract javaue, extTrailSource dirdat/tc

    -- ggsci> info javaue

    -- the source-def's must match the trail data

    SourceDefs ./dirdef/busiuser.def

    getEnv (JAVA_HOME)

    getEnv (PATH)

    getEnv (LD_LIBRARY_PATH)

    -- windows:

    --CUserExit ggjava_ue.dll CUSEREXIT PassThru IncludeUpdateBefores

    -- unix/linux:

    CUserExit libggjava_ue.so CUSEREXIT PassThru IncludeUpdateBefores

    GetUpdateBefores

    -- tables to be processed; as of 11.2 data may be filtered, tables/operations skipped

    Table busiuser.*;


    > edit rejava.properties

    gg.handlerlist=use_redis --随意,但下面配置必须和此名称一致

    gg.classpath=./ggjava/ogg_gbase_1.0.jar,./ggjava/gbase-connector-java-8.3.81.53-build52.8-bin.jar --引入jar包到classpath

    gg.handler.use_redis.type=sample.handler.jdbc.SimpleJDBCHandler --二次开发程序入口

    gg.handler.use_redis.driver= redis jdbc driver信息

    gg.handler.use_redis.url=redis jdbc url

    gg.handler.use_redis.user=

    gg.handler.use_redis.password=

    gg.handler.use_redis.mode=op

    gg.handler.use_redis.maxBatchSize=100

    gg.handler.use_redis.reportCount=10000

    gg.handler.use_redis.dateFormat=yyyy-MM-dd:HH:mm:ss


    配置完成后,需要关闭mgr,重启mgr

    5、增加extract进程

    > ADD EXTRACT rejava, EXTTRAILSOURCE ./dirdat/ea, BEGIN now

    > ADD RMTTRAIL ./dirdat/ea, EXTRACT rejava

    > start rejava

    > info all

    6、测试:

    在源端insert 数据,使用stats可以在源端和目标端看到数据增变量,和执行的标识语句,在目标数据库中查询数据

    总结

    1、源端和目标端部署完成后,需要两端都将mgr进程启动,然后再启动extract进程。

    2、远端和目标端的配置文件发生改变时,需要重启mgr和extract进程。

    3、如碰上目标端投递数据有问题,可先使用单独的java程序尝试手工写入数据,确保目标端是可用的,再进行ogg for java extract/replicat进程的调试。

    4、使用ogg for java adapter,可以很容易实现将关系型数据库的增量数据(其实也可以抽取存量数据),实时写入到任意目标存储平台,包括非官方直接配置支持的redis, 各种key-value db, memory db(如gemfire),mariadb, sqlite,JSON等,适合于各种场景应用。


    下一期会基于代码介绍OGG for java adapter的部分接口和函数。

  • 相关阅读:
    Elasticsearch常用命令
    Linux中使用systemctl操作服务、新建自定义服务
    Windows下安装MongoDB解压版
    Java执行cmd命令、bat脚本、linux命令,shell脚本等
    Ubuntu
    PostgreSQL删除数据库失败处理
    Ubuntu service 命令
    Ubuntu18修改/迁移mysql5.7数据存放路径
    攻防世界-web-ics-02(sql注入、ssrf、目录扫描)
    攻防世界-web-filemanager(源码泄漏、二次注入)
  • 原文地址:https://www.cnblogs.com/margiex/p/8646996.html
Copyright © 2020-2023  润新知