互联网服务CDC

CDC(Change Data Capture)增量抽取

CDCChange Data Capture)增量抽取

一、概述

XX决策支持项目中应用了Logminer读取归档日志方式,从系统级解决了数据增量的问题,但也存在缺陷,该项目中的增量方式只是获取到增量的数据标志(如:发生变化的RowID),而不是直接获取增量数据。“增量方式”目前还有很多疑问,还在进一步探究之中,可采用的方式有CDC或直接读取数据库的API获取增量数据, 下面我们只对Oracle数据库提供的获取增量的方式做简单的介绍。

CDC(Change Data Capture)是oracle在数据库级别实现的增量抽取解决方案。在一般的ETL过程中,对于增量抽取,无非是在数据上加时间截,全记录比对,关键字段比对,日志分析抽取等几种方法,要么需要修改原表结构,要么需要大量的算法,要么借助第三方的工具实现。Oracle从9i开始引入的CDC特性,使得有机会在数据库层面上直接实现增量抽取功能,在性能方面由于和数据库引擎的直接集成,比第三方工具应该具有一定的优势。

CDC有两个模式:同步和异步。两种模式的实现机制是截然不同的。同步CDC主要是采用触发器记录新增数据,基本能够做到实时增量抽取。而异步CDC则是通过分析已经commit的日志记录来得到增量数据信息,有一定的时间延迟,并且提供了到OracleStreams的接口。同步CDC在企业版或者标准版中都可以使用,异步CDC则只包含在企业版中。注意CDC在9i和10g中有了比较大的改变,异步CDC主要采用了和Streams相同的技术。

CDC中将系统分为两个角色:发布者和订阅者。发布者主要负责捕获增量数据,订阅者则将增量数据传递给实际应用。这些任务都可以通过oracle提供的PL/SQL包实现。

二、名词解析

Change Source

增量数据的抽取来源,比如同步CDC模式是通过trigger直接从database中获取的,change source就是source database。异步CDC模式则是从日志文件中获取的,则change source则表示redo logfile。

Change Set

一组逻辑上相关的增量数据,需要保证其一致性。change set必须是某个change source的成员。对于异步分布式HotLog模式,同一个change source的所有change set必须在同一个staging database中。而异步AutoLog模式中一个change source只能有一个change set。

Change Table

一个change table对应一个source table,用于保存source table中的增量数据。Change table中除了需要保存source table的增量数据,还有一些控制列用于保存相关的元数据。

三、CDC模式介绍

前面讲到同步CDC和异步CDC模式。同步的比较简单,就是通过触发器捕获增量数据,类似于物化视图的实现机制。而异步CDC根据实现的内部机制区别,又可以分为异步HotLog模式,异步分布式HotLog模式和异步AutoLog模式。

有些模式有固定的预先定义change source,有些则没有。比如同步CDC的change source是SYNC_SOURCE,异步HotLog模式则是HOTLOG_SOURCE,这是因为这两种模式都只有一个source database。而其他的,像异步分布式Hotlog模式和异步AutoLog模式,除了source database,还需要一个staging database。

同步CDC模式

同步CDC模式(SynchronousMode)通过在源库上建立trigger的方式来捕获增量数据,因此可以做到实时抽取增量数据。当源库执行commit的时候,增量数据将生成在change table中。但是同步CDC模式的缺点也是明显的,由于需要在源库创建trigger,对于源库将造成不小的压力,并且change table也必须在源库中生成,还需要占据源库一定的空间。

同步模式有一个固定的change source:SYNC_SOURCE,表示source database。该change source不能修改也不能删除。

1.jpg

                              

异步HotLog模式

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

异步HotLog模式也有一个固定的change source:HOTLOG_SOURCE,表示source database的当前连接日志文件。不能修改也不能删除。

2.jpg

异步分布式HotLog模式

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

在异步分布式HotLog模式中,change source也表示source database的当前联机日志。但是由于一个stagingdatabase可以处理多个源数据库,所以没有预先定义的change source,需要在使用的时候自定义change source。

在该模式中,需要两个发布者。一个在source database中,一个在staging database中。

3.jpg

异步Autolog模式

异步Autolog模式(Asynchronous AutoLogMode)则是先将日志文件从source database传递到staging database,然后在staging database执行日志分析。这样可以将对source database的压力减到最小。日志的传递通过Redo transportservices服务来实现,是不是对这个服务名很熟悉?在Data Guard中也是通过该服务将主库的日志传递到备库的,实际上该模式对于日志的处理和Data Guard中基本上是同样的机制。所以这里也需要在source database中设置相应的LOG_ARCHIVE_DEST_n参数来实现日志的传递。

异步AutoLog模式既可以使用联机日志,也可以使用归档日志来获得增量数据信息。

4.jpg

5.jpg

四、相关系统视图

• CHANGE_SOURCES

• CHANGE_PROPAGATIONS

• CHANGE_PROPAGATION_SETS

• CHANGE_SETS

• CHANGE_TABLES

• DBA_SOURCE_TABLES/ALL_SOURCE_TABLES/USER_SOURCE_TABLES

• DBA_PUBLISHED_COLUMNS/ALL_PUBLISHED_COLUMNS/USER_PUBLISHED_COLUMNS

• DBA_SUBSCRIPTIONS/ALL_SUBSCRIPTIONS/USER_SUBSCRIPTIONS

• DBA_SUBSCRIBED_TABLES/ALL_SUBSCRIBED_TABLES/USER_SUBSCRIBED_TABLES

• DBA_SUBSCRIBED_COLUMNS/ALL_SUBSCRIBED_COLUMNS/USER_SUBSCRIBED_COLUMNS

• 10g:BA_PUBLISHED_COLUMNS/ALL_PUBLISHED_COLUMNS/USER_PUBLISHED_COLUMNS

• 9i:BA_SOURCE_TAB_COLUMNS/ALL_SOURCE_TAB_COLUMNS/USER_SOURCE_TAB_COLUMNS

参与4

3同行回答

lsw945lsw945系统工程师tiansheng
哪里有cdc 复制db2 集群的配置文档显示全部
哪里有cdc 复制db2 集群的配置文档收起
系统集成 · 2015-07-14
浏览5709
powxpowx技术经理ZWT
谁有这个软件借用测试一下显示全部
谁有这个软件借用测试一下收起
系统集成 · 2014-12-03
浏览5733
myciciymyciciyIT顾问某金融科技公司
ibm  主推的技术显示全部
ibm  主推的技术收起
银行 · 2012-07-04
浏览5951

提问者

snowfly880123
软件开发工程师启明
擅长领域: 主机云计算虚拟化

相关问题

问题状态

  • 发布时间:2012-07-04
  • 关注会员:1 人
  • 问题浏览:15064
  • 最近回答:2015-07-14
  • X社区推广