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

最新文章

  1. 辛巴学院-Unity-剑英的c#提高篇(一)主循环
  2. 怎样给WordPress分配更多的内存
  3. JavaScript Patterns 4.5 Immediate Functions
  4. 安卓应用运营知识:VersionCode和VersionName
  5. JOSN对象与JSON字符串的相互转化
  6. C#方法同步 [MethodImpl(MethodImplOptions.Synchronized)]
  7. FOJ 2206 函数求解
  8. 使用Dreamweaver格式化HTML代码
  9. 杭电ACM2022--发工资咯:)
  10. Connector for Python
  11. JMeter关联(正则表达式提取器)
  12. jmeter(十六)配置元件之计数器
  13. HDOJ 2013 蟠桃记
  14. 一道区间DP的水题 -- luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows
  15. 【Spring】3、BeanFactory 和 ApplicationContext的区别
  16. vue实现按需加载(懒加载)
  17. Android LayoutCast 初探
  18. 20 多继承 MRO 算法 深度优先遍历 super
  19. 《剑指offer》— JavaScript(10)矩形覆盖
  20. android 使用AChartEngine 饼图的实现

热门文章

  1. WindowsForm 公共控件 菜单和工具栏
  2. poj2752Seek the Name, Seek the Fame
  3. 安装ConEmu
  4. nginx解决502错误
  5. 解决jquery zclip 插件点击无效的问题
  6. Java 中类与类之间的关系
  7. 论山寨手机与Android联姻 【2】手机OS成为核心
  8. DirectUI实现原理
  9. C# 分析搜索引擎url 得到搜索关键字
  10. Android studio 安装,JDK 出错解决方案