




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle CDC操作手册Oracle的增量数据处理方案中联新时代1. CDC简介1.1. CDC是一种数据增量处理技术 在构建数据仓库系统的ETL过程中,增量数据的抽取是一个非常关键的环节.对解决方案一般有两点要求:l 准确性,能够将业务系统中的数据按一定的频率准确的取到数据仓库中l 性能,不能对业务系统造成太大的压力,影响现有业务 目前,最为常用的ETL增量数据处理方式有三种:l 时间戳l 日志对比(CDC)l 全面数据对比三种方式各有优劣,时间戳是目前应用比较普遍的方式。在Oracle=中推出了两种主要的ETL方案,一种是我们熟悉的物化视图(materialized view),另一种就是本文将要介绍的CDC组件(Change Data Capture 改变数据捕获)。CDC 特性是在Oracle9i数据库中引入的。CDC能够帮助你识别从上次提取之后发生变化的数据。利用CDC,在对源表进行INSERT、UPDATE或 DELETE等操作的同时就可以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发生变化的数据,然后利用数据库视图以一种可控的方式提供给目标系统。1.2. CDC与传统增量处理方式的对比分析我们对比一下CDC方式与传统的全表对比与时间戳方式。全表对比使用数据仓库中的当前表与业务系统表进行对比,取得变化了的数据,典型是使用minus语句: SELECT * FROM new_versionMINUS SELECT * FROM old_version;使用全表对比有以下几方面的问题:l 需要将业务系统中表全部转输,造成很高的网络负载l 需要对两版本的表进行全表扫描,性能代价非常高l 无法反映数据的历史状态,如无法捕捉库存的历史变化记录还有一种常用的方式是时间戳,它是以业务表中某一个字段的值,作为判断新旧数据的标志。如,”病人费用记录”中的登记时间,每次只抽取上次抽取记录时间以后产生的数据。时间戳方式存在以下问题:l 无法捕获对时间戳以前数据的delete和update操作,在数据准确性上受到了一定的限制。而类似于ZLHIS这种业务系统对已经发生的数据进行update和delete操作非常普遍(如划价记录转收费记录),应用场景受到了限制。l 要求业务系统的表必须一个可以标识新旧数据的列,而某些表没有设置这种列。1.3. CDC的发布订立模型CDC体系结构基于发布者/订阅者模型。发布者捕捉变化数据并提供给订阅者。订阅者使用从发布者那里获得的变化数据。通常,CDC系统拥有一个发布者和多个订阅者。发布者首先需要识别捕获变化数据所需的源表。然后,它捕捉变化的数据并将其保存在特别创建的变化表中。它还使订阅者能够控制对变化数据的访问。订阅者需要清楚自己感兴趣的是哪些变化数据。一个订阅者可能不会对发布者发布的所有数据都感兴趣。 订阅者需要创建一个订阅者视图来访问经发布者授权可以访问的变化数据。CDC有几个重要的基本概念需要先明确一下:l 源表(Source Table),业务数据库的需要捕获数据的源表l 变化表(Change Table) ,保存从源表捕获的变化数据(包括各种DML产生的数据)l 变化集(Change Set),是保证事务一致性的数据集合。一个变化集对应多个变化表l 订阅视图(Subscription View),提供给读取变化表数据的视图l 订阅窗口(Subscription Window) ,定义了查看变化数据的时间范围.就象一个观察变化数据的滑动窗口。变化数据处理完成后,可以对清除订阅窗口。1.4. CDC的同步与异步模式l 同步模式,实时的捕获变化数据并存储到变化表中,发布者与订阅都位于同一数据库中。下图说明了同步模式的基本架构。l 异步模式,以Oracle流复制技术为基础,由于流复制比较复杂,本文档不涉及异步模式的CDC1.5. CDC相关的数据库对象 (Package)l 包(Package)n DBMS_CDC_PUBLISH, 用于定义发布操作n DBMS_CDC_SUBSCRIBE,用于定义订阅操作l 角色n EXECUTE_CATALOG_ROLEn SELECT_CATALOG_ROLEn CREATE TABLE and CREATE SESSION privilegesn EXECUTE on the DBMS_CDC_PUBLISH packagel 视图n ALL_SOURCE_TABLES 源表n ALL_PUBLISHED_COLUMNS 发布的表列n All_Subscribed_Columns 订阅的表列n All_Subscriptions 所有订阅n 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 alteredSQL alter system set java_pool_size = 50m;System alteredSQL2.1.2. 创建订阅、发布用户、表空间SQL create tablespace ts_cdcpub datafile E:oracleproduct10.2.0oradataorc1ts_cdcpub.dbf size 100m;Tablespace createdSQL create user cdc_publisher identified by cdc_publisher default tablespace ts_cdcpub;User createdSQL create user cdc_subcriber identified by cdc_subcriber default tablespace ts_cdcpub;User created2.1.3. 授予相关权限SQL GRANT CREATE SESSION TO cdc_publisher;Grant succeededSQL GRANT CREATE TABLE TO cdc_publisher;Grant succeededSQL GRANT CREATE TABLESPACE TO cdc_publisher;Grant succeededSQL GRANT UNLIMITED TABLESPACE TO cdc_publisher;Grant succeededSQL GRANT SELECT_CATALOG_ROLE TO cdc_publisher;Grant succeededSQL GRANT EXECUTE_CATALOG_ROLE TO cdc_publisher;Grant succeededSQL GRANT EXECUTE ON DBMS_CDC_PUBLISH TO cdc_publisher;Grant succeededSQL grant create session to cdc_subcriber;授权成功。2.1.4. 在ZLHIS用户下,创建测试表SQL Create Table person (id Number,Name Varchar(10),sex Varchar(2);Table createdSQL insert into person values(0,毛泽东,男);1 row insertedSQL insert into person values(0,彭德怀,男);1 row insertedSQL insert into person values(0,邓颖操,女);1 row insertedSQL commit;Commit completeSQL grant all on person to cdc_publisher;Grant succeededSQL grant all on person to cdc_subscriber;Grant succeeded 2.2. 发布数据2.2.1. 创建改变集在同步方式的CDC中,change_source_name参数必须使用默认的改变源, SYNC_SOURCESQL BEGIN 2 DBMS_CDC_PUBLISH.CREATE_CHANGE_SET( 3 change_set_name = person_change_set, -改变集 4 description = Change set for person info, 5 change_source_name = SYNC_SOURCE); 6 END; 7 /PL/SQL procedure successfully completedSQL2.2.2. 创建改变表 指定源table,和源模式,注意区别owner与source_schema,owner是指发布用户,而不是源表的所有者 SQL BEGIN 2 DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE( 3 owner = cdc_publisher, 4 change_table_name = person_ct, 5 change_set_name = person_change_set, 6 source_schema = zlhis, 7 source_table = person, 8 column_type_list = ID number,NAME VARCHAR2(10),sex varchar2(2), 9 capture_values = both, 10 rs_id = y, 11 row_id = n, 12 user_id = n, 13 timestamp = n, 14 object_id = n, 15 source_colmap = y, 16 target_colmap = y, 17 options_string = TABLESPACE TS_CDCPUB); 18 END; 19 /PL/SQL procedure successfully completedSQL options_string,指定改变表的存储参数。options_string参数可以使用除partition以外的所有create table中指定的存储参数,如tablespace、pctfree等。2.2.3. 将改变表(Change Table)的权限授权给订阅者SQL grant select on person_ct to cdc_subscriber;Grant succeeded2.3. 订阅数据2.3.1. 查看发布信息当发布者,发布了相关的改变表后,会生成一个惟一的 发布id( publication ID),可以查阅视图ALL_PUBLISHED_COLUMNS 以获取已经发布的表及字段信息SQL select change_set_name,pub_id,source_table_name from ALL_PUBLISHED_COLUMNS ;CHANGE_SET_NAME PUB_ID SOURCE_TABLE_NAME- - - PERSON_CHANGE_SET 70403 PERSONPERSON_CHANGE_SET 70403 PERSONPERSON_CHANGE_SET 70403 PERSON6rows selectedSQL2.3.2. 创建订阅 -以下操作以订阅者用户执行使用DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION创建订阅操作,一次订阅与改变集对应,由于改变集与源表之间是一对多的关系,所以一次订阅就可以订阅多张表.SQL BEGIN 2 DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION( 3 change_set_name = PERSON_CHANGE_SET, 4 description = Change data for person, 5 subscription_name = PERSON_SUB); 6 END; 7 /PL/SQL procedure successfully completed2.3.3. 订阅表,如果改变集中有多个表,需要操作多次SQL BEGIN 2 DBMS_CDC_SUBSCRIBE.SUBSCRIBE( 3 subscription_name = PERSON_SUB, 4 source_schema = zlhis, 5 source_table = person, 6 column_list = id,name,sex, 7 subscriber_view = PERSON_VIEW); 8 END; 9 /PL/SQL procedure successfully completedSQL2.4. 激活订阅订阅需要使用DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION进行激活,才能生生效,激活订阅后CDC就开始捕获改变数据.SQL Begin 2 dbms_cdc_subscribe.activate_subscription(subscription_name = PERSON_SUB); 3 END; 4 /PL/SQL procedure successfully completed2.5. 扩展窗口的应用(查看增量的数据)在源表数据变化后,变化的数据在订阅端需要执行extend_window后才能看见,订阅都调用DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW过程取得改变数据的集合,如果第一次执行,就取得激活订阅后所有改变数据.每次执行DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW后,扩展窗口只看到上次执行DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW至今的数据.SQL BEGIN 2 DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW( 3 subscription_name = PERSON_SUB); 4 END; 5 /PL/SQL procedure successfully completed2.6. 测试及查看改变数据-以zlhis登录,改变测试表数据SQL connect zlhis/his117orc1;Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as zlhisSQL select * from person; ID NAME SEX- - - 0 毛泽东 男 0 彭德怀 男 0 邓颖操 女SQL insert into person values(1,刘少奇,男);1 row insertedSQL update person set name=毛主席 where name=毛泽东;1 row updatedSQL delete from person where name =刘少奇;1 row deletedSQL commit;Commit complete-以订立用户查看改变数据SQL connect cdc_subscriber/cdc_subscriber117orc1;Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as cdc_subscriber-直接查看改变数据视图是看不到的,必须执行dbms_cdc_subscribe.extend_window(PERSON_SUB),以确定扩展窗口SQL select * from person_view;OPERATION$ CSCN$ COMMIT_TIMESTAMP$ RSID$ SOURCE_COLMAP$ TARGET_COLMAP$ ID NAME SEX- - - - -SQL begin 2 dbms_cdc_subscribe.extend_window(PERSON_SUB); 3 end; 4 /PL/SQL procedure successfully completed-捕获的改变数据SQL select * from person_view;OPERATION$ CSCN$ COMMIT_TIMESTAMP$ RSID$ SOURCE_COLMAP$ TARGET_COLMAP$ ID NAME SEX- - - - - - - -I 10588077 2007-6-12 上午 11 1 0E000000000000000 FE03000000000000000000000 1 刘少奇 男UU 10588077 2007-6-12 上午 11 2 04000000000000000 7E00000000000000000000000 0 毛泽东 男UN 10588077 2007-6-12 上午 11 2 04000000000000000 7E01000000000000000000000 0 毛主席 男D 10588077 2007-6-12 上午 11 3 00000000000000000 7E00000000000000000000000 1 刘少奇 男SQL可以看到订阅视图中包括了改变数据、操作类型(update、delete或insert),操作时间,我们可以根据自己的需要提取改变数据进行处理。2.7. 清空扩展窗口使用扩展窗口的数据可以进行清空操作,避免改变数据过多带来的系统负载。SQL BEGIN 2 DBMS_CDC_SUBSCRIBE.PURGE_WINDOW( 3 subscription_name = PERSON_SUB); 4 END; 5 /PL/SQL procedure successfully completedSQL总结一下,同步模式下的CDC配置还是比较简单的:l 修改初始化参数l 创建订阅、发布用户和存储的表空间l 授予相关权限l 创建改变集l 建立改变表l 订阅发布数据,创建订阅l 订阅发布的表l 扩展窗口,以查阅改变数据3. CDC的性能测试我们使用sql_trace工具对比应用了CDC捕获改变表数据与未设置CDC的表插入同样的数据进行性能对比。-创建与测试表结构相同的表SQL create table person_temp as select * from person;表已创建。SQL alter session set sql_trace = true;会话已更改。-开启sql-trace,分别插入相同的数据SQL insert into person select object_id,substr(object_name,1,0),s from dba_objects;已创建57674行。统计信息- 0 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 0 bytes sent via SQL*Net to client 0 bytes received via SQL*Net from client 0 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 57674 rows processed SQL insert into person_temp select object_id,substr(object_name,1,0),s from dba_objects;已创建57674行。统计信息- 0 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 0 bytes sent via SQL*Net to client 0 bytes received via SQL*Net from client 0 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 如何进行有效的SWOT分析试题及答案
- 风险监测与控制措施试题及答案
- 认识网络管理的基本架构试题及答案
- 软件工程中的用户参与的重要性试题及答案
- 提升艺术素养的班级活动设计计划
- 软件设计师未来趋势2025年试题及答案
- 完善信息化管理系统的工作计划
- 未来企业战略挑战试题及答案
- 2025届北京市怀柔区八下数学期末考试试题含解析
- 2025年网络管理模拟试题及答案
- 15D503 利用建筑物金属体做防雷及接地装置安装
- (完整版)中国书法英文版
- XX医院远程医疗服务信息系统运行维护记录(B1)
- 川教版二年级《生命.生态.安全》下册第10课《面对学习困难》课件
- 端午节趣味谜语及答案
- 天府国际生物城C7-1实验室项目环境影响报告
- 家校携手决战中考-九年级家长会课件
- 苏州昆山鹿城村镇银行2023年招聘人员笔试历年难、易错考点试题含答案附详解
- 2023年高考英语模拟卷(天津专用)(解析版)
- 山西煤炭运销集团锦瑞煤业有限公司煤炭资源开发利用、地质环境保护与土地复垦方案
- 教育公共基础知识整理版
评论
0/150
提交评论