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

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

时间: 2024-10-07 00:21:55

CDC不同模式在ODI中体现系列之一 同步模式的相关文章

CDC不同模式在ODI体现系列之二 异步模式

CDC不同模式在ODI体现系列之二 异步模式 2 异步模式需要在数据库中做一些准备工作: 改数据为归档并启用logminer: SQL> shutdown immediate 数据库已经关闭. 已经卸载数据库. ORACLE 例程已经关闭. SQL> startup mount ORACLE 例程已经启动. Total System Global Area  599785472 bytes Fixed Size                  1288820 bytes Variable S

转:[Silverlight入门系列]使用MVVM模式(9): 想在ViewModel中控制TreeView节点展开?

很多童鞋看了我的博客以后也去实践MVVM,但却发现Silverlight实践中的MVVM很难实现,比纯粹的CodeBehind难度大很多.首先是原来在xaml.cs的CodeBehind部分很容易控制界面逻辑,现在这部分逻辑移到ViewModel里面去了以后,就很难调用CodeBind的部分;其次是很多View和ViewModel.或者一个ViewModel多个View,他们之间如何通 很多童鞋看了我的博客以后也去实践MVVM,但却发现Silverlight实践中的MVVM很难实现,比纯粹的Co

仓储模式在MVC中的应用学习系列

好久没写博客了,学习的东西,还是需要记录下来,自己懂还得懂得表达出来,这才是最重要的.好了废话说多了,现在开始正题.     在这个系列中,我会把仓储模式和工作单元在MVC应用程序中的应用写出来.有不对的地方,欢迎大家指正. 目录 1.仓储模式在MVC应用程序中的使用 2.泛型仓储模式在MVC应用程序中的使用 3.MVC Code-First和仓储模式的应用 4.待续....

ODI中的CDC

ODI中的CDC是通过一组所谓的日志知识模块(Journal Knowledge Module,JKM)实现的,在项目中加在了这些模块后,就可以在接口设计时选择全量数据,还是变化数据. ODI共提供了四种针对Oracle的JKM,分别是 ODI的每个接口中只能有一个日志表(Journal Table)

设计模式总结篇系列:组合模式(Composite)

在探讨Java组合模式之前,先要明白几个概念的区别:继承.组合和聚合. 继承是is-a的关系.组合和聚合有点像,有些书上没有作区分,都称之为has-a,有些书上对其进行了较为严格区分,组合是contains-a关系,聚合是has-a关系. 组合方式中被组合的对象生命周期不能超过整体,一般写代码时是直接在整体类的构造方法中创建被组合类的对象.如人和手之间的关系,人都没了,还何来手? 聚合方式中对于对象的生命周期则没有此类限制,一般可以在聚合类的构造函数中通过外部传参以赋值给整体(或通过其他set等

[工作中的设计模式]享元模式模式FlyWeight

一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. 享元模式:主要为了在创建对象时,对共有对象以缓存的方式进行保存,对外部对象进行单独创建 模式要点: 1.享元模式中的对象分为两部分:共性部分和个性化部分,共性部分就是每个对象都一致的或者多个对象可以共享的部分,个性化部分指差异比较大,每个类均不同的部分 2.共性部分的抽象就是此模

设计模式总结篇系列:策略模式(Strategy)

前面的博文中分别介绍了Java设计模式中的创建型模式和结构型模式.从本文开始,将分别介绍设计模式中的第三大类,行为型模式.首先我们了解下分为此三大类的依据. 创建型模式:主要侧重于对象的创建过程: 结构型模式:主要侧重于处理类或对象的组合: 行为型模式:主要侧重于类或对象之间的交互以及职责分配. 首先了解下策略模式的概念:定义了多个算法,并将它们封装起来(一般的是每个算法封装成一个单独的类),让算法独立于客户端而可以单独变化. 具体可以看一下下面的例子(以计算加.减.乘为例): 1. 对加.减.

设计模式系列之工厂模式

设计模式一直是面向对象软件设计中最重要的一个领域,围绕设计模式讨论的话题也是数不胜数,其中GOF代表的23种设计模式更是经典之著.这个系列中我将会从自己的理解出发,阐述每种设计模式的思想,作用和利弊. 一. 设计模式概念 要讲解设计模式,必然先要说清楚两个问题, 1.什么是设计模式? 2.为什么需要设计模式? 对于设计模式,GOF是这么定义的:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,更特殊地,将之放到面向对象软件设计中来讲,设计模式可以被认为是实践中总结出的设计

如何在 Shell 脚本中执行语法检查调试模式

我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用shell调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. 在本系列的这一部分,我们将了解如何使用语法检查调试模式.记住我们之前在本系列的第一部分中解释了不同的调试选项,在这里,我们将使用它们来执行脚本调试. 启用 verbose 调试模式 在进入本指导的重点之前,让我们简要地探索下 verbose 模式.它可以用 -v 调试选项来启用,它会告诉 shel