• CDC不同模式在ODI中体现系列之一 同步模式


    Oracle Database Change Data Capture feature

     

    变化数据捕获是一个通称,是用来描述捕捉增量变化应用到数据存储。随着数据量的不断增长和数据存储日益变化,数据捕获是数据仓库一个重要功能,特别是要求实时或近实时的数据仓库。

    在Oracle数据库概念中,数据采集的变化数据库功能,能够在Oracle数据库上捕捉增量。传统上你会必须修改源代码的应用,以捕获增量变化。

    Oracle的变化数据捕获使增量变化捕获而不对源程序做任何更改。

    Oracle数据库10g第2版介绍异步分布式CDC,比原有9i数据库第2版有了更大的提高。这食谱介绍如何设置这样一个异步变化数据捕获环境。

     

     

    模式分类对比:

     

    同步CDC模式(Synchronous Mode)通过在源库上建立trigger的方式来捕获增量数据,因此可以做到实时抽取增量数据.

     

     

    异步HotLog模式(Asynchronous HotLog Mode)直接从source database的online redo log file中抽取增量数据,由于需要解析日志文件,会有一定的时间延迟。change table也必须在源库中生成。该模式由于是在源数据库中解析日志,对源数据库也会造成一定的压力,但是比同步CDC模式的压力要小一些。

     

    异步分布式HotLog模式(Asynchronous Distributed HotLog Mode)和异步HotLog模式相比,主要是将多个source database的当前联机日志中解析出增量数据,然后传递一个staging database中处理,便于集中式数据管理。

     

    异步AutoLog模式(Asynchronous AutoLog Mode)则是先将日志文件从source database传递到staging database,然后在staging database执行日志分析。这样可以将对source database的压力减到最小

    Publishers and Subscribers (发布用户和订阅用户)

     

    publisher 就是发布变化数据捕捉的数据库用户.所以在ODI需要先创建一个发布者.

    subscriber 就是通过所谓的订购,利用这个捕捉的变化数据的数据库用户,也可以理解为订阅者.

    出于安全原因,发布者和订阅用户不应该是相同的数据库用户。一个 Publisher可以支持许多subscriber用户。

     

    CDC利用变化表和用户视图。数据变化写入变化表为使用CDC提供了一个可扩展的基础架构.用户针对变化表的数据可以获得一致数据变化集的视图。用户可以扩展和清除订阅窗户,通过数据库视图,隐式地改变数据集。如果没有任何用户订阅变化数据,变化表中的数据可以被清除。CDC 通过PL/SQL包进行调用.

     

     

    CDC有两种捕捉数据方式 同步CDC和异步CDC.

    异步CDC又分3种模式: 异步HotLog模式,异步分布式HotLog模式,异步AutoLog模式.

     

    同步CDC模式创建方式:

     

    1.创建Publisher用户,在sys用户中创建变化表集(change set),然后在变化集中创建相应的变化表

    (change table),一个change set可以对应多个change table.

     

    2.创建Subscriber用户,publisher用户把change table访问权限授予subscriber用户.

     

    3.Subscriber可以创建subscription(订阅),通过创建subscribe可以订阅change set中多个source table,

    这个table是change table的源表.

     

    4.激活订阅 activate subscription

     

    5.扩展窗口 extend_windows,扩展窗口以后才能看到数据变化.如果想每次都看到数据的变化,必须每次扩展窗口.

    上面的5个步骤,是在Oracle数据库中实施的步骤,那么在ODI中如何体现呢?下面我们来具体的实施方法.

    因为同步模式CDC是通过触发器的方式来实现,所以数据库可以运行在非归档的模式下.

    1.在ODI中CDC是通过日志知识模块来实施的,所以我们首先要引入知识模块

    在ODI项目中选择日记JKM,然后选择右键,导入知识模块,因为我们是用同步模式CDC,选择"JKM Oracle Simple"知识KM就可以,我们还可以看到JKM Oracle Consistent,再后面的异步CDC,我们会引用进来,呵呵.

    2.

    在模型属性中选择日志记录TAB页,然后选择简单,选择日志记录KM时,可以看到刚才我们添加的KM,JKM Oracle Simple.CDC, 这个KM下面有说明,不适合频繁的操作,不会对生产系统带来价值,反而影响性能.因为这个JKM是触发器的形式.

    这个时候,我们在模型中也已经定义好了JKM,下面就可以在模型的Data Store中进行添加到CDC,我们也可以针对整个模式做CDC,这里我们选择单独的Data Store.

    我们先查看系统已有的触发器:

     

    SQL> conn odi_tmp/odi_tmp

    已连接。

    SQL> select * from user_triggers;

     

    未选定行

     

    SQL>

    可以看到目前开发用户下面是没有触发器的.

      

    选择JKM以后,点击应用.

    后面,我们可以通过数据库确认ODI在数据库中建立了触发器.

    3.开始添加Data Store到数据源

    添加数据源到CDC以后,会看到CDC左上角出现一个表的橙色图标,表示已经加到CDC,但是还没有启动.

    4.启动日志

    启动日志以后,我们需要定义ODI的订阅者,也就是需要捕捉这个日志数据的用户.

    启动日志会弹出执行对话框,选择相应的上下文,如果切换到生产库,切换上下文就可以.

    5.开始订阅日志,选择订阅用户

    订阅时,因为我们用SUPERVISOR用户登录,所以系统会默认用

    SUNOPSIS用户

    点击确定以后,可以看到Data Store的左上角有个绿色时钟的图标,表示已经成功启动CDC

    6.查看CDC的订阅状态

    绿色图标表示已经成功订阅.

    7.确认数据库中是否也用相应的触发器

    这个时候,再次查看ODI_TMP下面的触发器,为什么要查看ODI_TMP下面:

     

    因为我们在Topology Manager当中定义ORACLE连接的时候,就已定义了工作架构的用户,

    默认是和架构用户一样,所以我们可以看到选择工作架构用户的好处.

    这时可以看到触发器已经成功被ODI创建:

    SQL>select trigger_name,trigger_type,table_name,status,action_type from user_triggers;

     

    TRIGGER_NA TRIGGER_TYPE     TABLE_NA STATUS           ACTION_TYPE

    ---------- ---------------- -------- ---------------- ----------------------

    T$CUSTOMER AFTER EACH ROW   CUSTOMER ENABLED          PL/SQL

     

     

    8.我们来测试CDC同步模式的数据

     

    我们右键选择数据模型以后,点击数据,进行数据的编辑

    点击+号,我们添入一条数据

    点击应用以后,我们可以看到数据已经加入

    点击日志数据,查看CDC是否已经成功捕捉数据库表的数据

     

    9.查看ODI是否捕捉数据

    我们在接口把同步CDC加入到接口中

    我们点击源数据源下面有个”仅已记录日记记录的数据”前面的方框,点击以后,就把CDC成功添加到接口了.

    1.jpg

    2.jpg

    3.jpg

    4.jpg

    5.jpg

    6.jpg

    7.jpg

    8.jpg

    9.jpg

    10.jpg

    11.jpg

    12.jpg

    13.jpg

    14.jpg

  • 相关阅读:
    HttpMessageNotWritableException: Could not write JSON: No serializer found for class ****
    处理【Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operatio】
    java 日历类Calendar用法
    linux配置nginx
    linux 重命名文件和文件夹
    CentOS 6.7 配置 yum 安装 Nginx
    maven打包时跳过单元测试
    Eclipse 保存文件时自动格式化代码
    mybatis大于号,小于号,去地址符,单引号,双引号转义说明
    玩转Eclipse — 自动代码生成的Java Code Template
  • 原文地址:https://www.cnblogs.com/lcword/p/5508308.html
Copyright © 2020-2023  润新知