Oracle CDC
操作手册
Oracle 的增量数据处理方
案
中联新时代
1. CDC 简介
1.1. CDC 是一种数据增量处理技术
在构建数据仓库系统的 ETL 过程中,增量数据的抽取是一个非常关键的环节.对解决方
案一般有两点要求:
准确性,能够将业务系统中的数据按一定的频率准确的取到数据仓库中
性能,不能对业务系统造成太大的压力,影响现有业务
目前,最为常用的 ETL 增量数据处理方式有三种:
时间戳
日志对比(CDC)
全面数据对比
三种方式各有优劣,时间戳是目前应用比较普遍的方式。在 Oracle=中推出了两种
主要的 ETL 方案,一种是我们熟悉的物化视图(materialized view),另一种就是本文将要
介绍的 CDC 组件(Change Data Capture 改变数据捕获)。
CDC 特性是在 Oracle9i 数据库中引入的。CDC 能够帮助你识别从上次提取之后发生
变化的数据。利用 CDC,在对源表进行 INSERT、UPDATE 或 DELETE 等操作的同时就可
以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发生变化的
数据,然后利用数据库视图以一种可控的方式提供给目标系统。
1.2. CDC 与传统增量处理方式的对比分析
我们对比一下 CDC 方式与传统的全表对比与时间戳方式。
全表对比使用数据仓库中的当前表与业务系统表进行对比,取得变化了的数据,典
型是使用 minus 语句:
SELECT * FROM new_version
MINUS SELECT * FROM old_version;
使用全表对比有以下几方面的问题:
需要将业务系统中表全部转输,造成很高的网络负载
需要对两版本的表进行全表扫描,性能代价非常高
无法反映数据的历史状态,如无法捕捉库存的历史变化记录
还有一种常用的方式是时间戳, 它是以业务表中某一个字段的值,作为判断新旧数据
的标志。如,”病人费用记录”中的登记时间,每次只抽取上次抽取记录时间以后产生的
数据。时间戳方式存在以下问题:
无法捕获对时间戳以前数据的 delete 和 update 操作,在数据准确性上受到了一
定的限制。而类似于 ZLHIS 这种业务系统对已经发生的数据进行 update 和
delete 操作非常普遍(如划价记录转收费记录),应用场景受到了限制。
要求业务系统的表必须一个可以标识新旧数据的列,而某些表没有设置这种列。
1.3. CDC 的发布订立模型
CDC 体系结构基于发布者/订阅者模型。发布者捕捉变化数据并提供给订阅者。订
阅者使用从发布者那里获得的变化数据。通常,CDC 系统拥有一个发布者和多个订阅者。
发布者首先需要识别捕获变化数据所需的源表。然后,它捕捉变化的数据并将其保存在
特别创建的变化表中。它还使订阅者能够控制对变化数据的访问。订阅者需要清楚自己
感兴趣的是哪些变化数据。一个订阅者可能不会对发布者发布的所有数据都感兴趣。
订阅者需要创建一个订阅者视图来访问经发布者授权可以访问的变化数据。
CDC 有几个重要的基本概念需要先明确一下:
源表(Source Table),业务数据库的需要捕获数据的源表
变化表(Change Table) ,保存从源表捕获的变化数据(包括各种 DML 产生的数
据)
变化集(Change Set),是保证事务一致性的数据集合。一个变化集对应多个变化
表
订阅视图(Subscription View),提供给读取变化表数据的视图
订阅窗口(Subscription Window) ,定义了查看变化数据的时间范围.就象一个观
察变化数据的滑动窗口。变化数据处理完成后,可以对清除订阅窗口。
1.4. CDC 的同步与异步模式
同步模式,实时的捕获变化数据并存储到变化表中,发布者与订阅都位于同一
数据库中。下图说明了同步模式的基本架构。
异步模式,以 Oracle 流复制技术为基础,由于流复制比较复杂,本文档不涉及
异步模式的 CDC
1.5. CDC 相关的数据库对象 (Package)
包(Package)
DBMS_CDC_PUBLISH, 用于定义发布操作
DBMS_CDC_SUBSCRIBE,用于定义订阅操作
角色
EXECUTE_CATALOG_ROLE
SELECT_CATALOG_ROLE
CREATE TABLE and CREATE SESSION privileges
EXECUTE on the DBMS_CDC_PUBLISH package
视图
ALL_SOURCE_TABLES 源表
ALL_PUBLISHED_COLUMNS 发布的表列
All_Subscribed_Columns 订阅的表列
All_Subscriptions 所有订阅
All_Subscribed_Tables 已经订阅的表
2. CDC 的实施步骤
2.1. 初始化
2.1.1. 设置初始化参数
由于 CDC 需要在后台开启作业,需要将参数 JOB_QUEUE_PROCESSES 增加 2 个,
java_pool_size 至少在 50M 以上。
SQL> alter system set job_queue_processes = 14;
System altered
SQL> alter system set java_pool_size = 50m;
System altered
SQL>
2.1.2. 创建订阅、发布用户、表空间
SQL> create tablespace ts_cdcpub datafile 'E:\oracle\product\10.2.0\oradata\orc1\ts_cdcpub.dbf' size
100m;
Tablespace created
SQL> create user cdc_publisher identified by cdc_publisher default tablespace ts_cdcpub;
User created
SQL> create user cdc_subcriber identified by cdc_subcriber default tablespace ts_cdcpub;
User created
2.1.3. 授予相关权限
SQL> GRANT CREATE SESSION TO cdc_publisher;
Grant succeeded
SQL> GRANT CREATE TABLE TO cdc_publisher;
Grant succeeded
SQL> GRANT CREATE TABLESPACE TO cdc_publisher;
Grant succeeded
SQL> GRANT UNLIMITED TABLESPACE TO cdc_publisher;
评论0