基于ORACLE CDC技术实现数据自动同步

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:cwsyydr01
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:当前信息化的时代,数据成为了最重要的资源,如何能消化信息孤岛,更好地完成同一组织内部、上下级、不同组织间的数据汇总、统计、分析等问题就凸显出来;只有很好地完成了数据的整合,才能更进一步地支撑起上层数据的挖掘、分析,能对企事业单位的未来发展战略提供有效的数据依据。在这种如何消化信息孤岛的背景下,数据集成应运而生。在实施数据集成的过程中,ETL是实现数据集成的主要技术,其主要提供数据抽取、数据转换、数据加载功能,数据抽取的方式常见的有触发器、日志比对、CDC等。该文主要介绍基于CDC技术实现数据自动同步。
  关键词:ORACLE;CDC;数据同步
  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)27-0008-02
  当前信息化的时代,数据成为了最重要的资源,如何能消化信息孤岛,更好地完成同一组织内部、同一组织上下级、不同组织间的数据汇总、分析等问题就凸显出来;只有很好地完成了数据的整合,才能更进一步地支撑起上层数据的挖掘、分析,才能对企事业单位的未来发展战略提供有效的数据依据。
  在这种背景下,数据集成应运而生。在实施数据集成的过程中,由于不同用户提供的数据可能来自不同的途径,其数据内容、数据格式和数据质量千差万别,有时甚至会遇到数据格式不能转换或数据转换格式后丢失信息等棘手问题,严重阻碍了数据在各部门和各应用系统中的流动与共享。因此,如何对数据进行有效的集成管理已成为增强企业商业竞争力的必然选择。ETL是实现数据集成的主要技术。数据抽取即从源数据抽取目的数据源系统需要的数据,数据抽取的方式常见的有触发器、全面数据对比、日志比对、状态位、时间戳、CDC等。本文主要介绍以CDC技术为基础实现源与目标数据的自动同步。
  1 CDC简介
  CDC是Oracle数据库的特性。CDC能够帮助你识别从上次提取之后发生变化的数据,包括对源表进行增、删、改等操作。而且,变化数据保存在变化表中,这样就可以捕获发生变化的数据。CDC技术主要设计的对象包括:源表、变化表、变化集、订阅视图、订阅窗口。
  CDC同步模式分为两种:同步模式和异步模式,本文主要采用同步模式实现变化数据的抽取。
  2 CDC的配置步骤
  2.1 创建订阅、发布用户
  在ORACLE中创建订阅cdc_dy_test、发布用户cdc_fb_test,并给cdc_fb_test授予select_catalog_role、execute_ catalog_role、dbms_cdc_publish等权限;给cdc_dy_test授予create any procedure、create any job等权限。
  2.2 创建源、目标用户
  在ORACLE中创建源用户test、目标用户target,并给用户授权。
  目标用户下创建表student_test (id,name ,sex ),并授所有权限给cdc_dy_test。
  源用户下创建表student_test (id,name ,sex ),并授所有权限给cdc_fb_test和cdc_dy_test。
  2.3 发布数据
  2.3.1 创建改变集
  登录cdc_fb_test,利用dbms_cdc_publish.create_change_set创建改变集student_test_change_set。
  2.3.2 创建改变表
  登录cdc_fb_test,利用dbms_cdc_publish.create_change_table创建改变表student_test_ct、改变集参数为student_test_change_set,并且把改变表查询权限授权给订阅用户cdc_dy_test。
  2.4 订阅数据
  2.4.1 创建订阅
  以订阅者(cdc_dy_test)登录,使用dbms_cdc_subscribe.create_subscription创建订阅student_test_cdc_sub。
  2.4.2 订阅表
  登录cdc_dy_test,针对发布表建立订阅视图,将来订阅时从这些视图读取数据,使用dbms_cdc_subscribe.subscribe创建订阅student_test_cdc_sub对应的订阅表cdc_student_test_sub_v。
  2.4.3 激活订阅
  订阅需要激活,才能生效,使用dbms_cdc_subscribe.activate_subscription激活订阅student_test_cdc_sub,激活后CDC就开始捕获改变数据。
  至此,发布、订阅的管理工作完成。接下来基于CDC获取变化数据并同步至目标表。
  3 基于CDC技术实现数据同步
  基于CDC实现数据同步,主要思路是:创建存储过程,在存储过程中借助之前已经完成的工作,读取变化数据,并向目标同步数据;之后,创建作业定时调度该存储过程,从而实现数据自动同步。
  3.1 创建数据同步存储过程
  通过存储过程同步处理源表test.student_test与目标表target.student_test的数据。
  create or replace procedure proc_cdc
  is
  v_rowcount number;
  v_rowcount1 number;
  begin
  --目标表有没有数据
  select count(1) into v_rowcount from target.student_test;   --获得下一组变更数据
  dbms_cdc_subscribe.extend_window(subscription_name => ’student_test_cdc_sub’);
  --源表数据是否变化
  select count(1) into v_rowcount1 from cdc_student_test_sub_v;
  if v_rowcount=0 then
  insert into target.student_test(id ,name,sex)
  select id ,name,sex from test.student_test;
  commit;
  elsif v_rowcount1>0 then
  --同步删除
  delete from target.student_test a
  where a.id in (select b.id from cdc_student_test_sub_v b where trim(b.operation$)=’d’);
  --同步更新
  update target.student_test a
  set id=(select id from cdc_student_test_sub_v b
  where a.id=b.id and trim(b.operation$)=’un’),
  name=(select name from cdc_student_test_sub_v b
  where a.id=b.id and trim(b.operation$)=’un’),
  sex=(select sex from cdc_student_test_sub_v b
  where a.id=b.id and trim(b.operation$)=’un’);
  --同步插入
  insert into target.student_test
  select id,name,sex from cdc_student_test_sub_v b where trim(b.operation$)=’i’;
  commit;
  dbms_cdc_subscribe.purge_window(subscription_name => ’student_test_cdc_sub’);
  end if;
  end proc_cdc;
  3.2 创建作业
  通过创建ORACLE作业,定时执行存储过程来实现数据自动同步。作业创建可以借助工具,作业名称为cdc_job,作业执行周期为1分钟。
  4 结束语
  综上所述,ORACLE CDC与存储过程、作业等技术结合即可实现数据的同步,而无需开发应用软件,为数据的同步提供了一种数据库层面的技术手段。当然,本文只介绍了基本的CDC数据同步方式,但掌握了CDC的基础技能后,就可以在此基础上进行扩展,实现更多、更强的功能。
  参考文献:
  [1] 邹先霞.基于数据库日志的变化数据捕获研究,2012.
  [2] Oracle CDC部署流程.http://blog.itpub.net/24930246/viewspace-1069835/.
  [3] ORACLE_CDC.http://my.oschina.net/u/140663/blog/307967.
  [4] 王冰.基于ETL的数据管理方法的分析和实现,2008.
  [5] 顾云锋.Oracle数据库中存储过程开发研究,2011.
  [6] 王忠民.解析Oracle存储过程的使用,2009.
  [7] 肖慧.王鲁珊.用Oracle的DBMS_JOB来实现任务计划管理,2004.
其他文献
创新精神和能力的培养是管理专业教育的灵魂和目标,本文从明确案例教学在管理专业教育中的地位入手,通过分析国外和知商学院案例教学的发展过程及在我国的应用现状,提出建立培养
教育管理的价值取向是教育管理研究中一个重要的哲学问题.不同的教育管理者有不同的价值取向,不同的价值取向就会有不同的管理风格和管理模式.本文在对科学主义和人本主义两
【正】 今人阅读古籍,由于时间的时隔、语言的发展和汉字的演变,常有种种障碍横互眼前,字多通假而语义难明,便是其一。清王念孙曾明确指出:“训诂之旨存乎声音,字之声同声近
探究拖拉机在农田作业工况下的动力性及经济性对有效提高农用拖拉机动力传动系统匹配的合理性具有重要意义。首先,定义了拖拉机农田作业工况下的性能评价指标。然后,应用Crui
从美与创造的关系来看,高等学校必须加强美育.美育在激发大学生的创造动机、培养大学生的创造性思维方面具有其他教育无法替代的作用.而美育的情感性、自由性特征决定了其可
【正】 吴敬梓出身于官僚地主家庭,青年时代曾经热衷于科举功名,而晚年却写了尖锐批判科举制度、揭露封建社会腐朽黑暗的《儒林外史》。有的同志说:“吴敬梓晚年的思想和他早
本文阐述了建立我国高等教育法学这门新兴交叉学科的必要性及与相关学科的关系.明确提出高等教育法的调整对象是高等教育的管理、协调和监督关系.
外语教学应与注重创新的时代特征相结合,赋予外语教学以新的内涵.本文讨论了三个问题:即坚持以注重创新的时代特征为主导的外语教学的主题,确立以注重创新的时代特征为基础的
即将到来的21世纪,将是一个国际竞争日益激烈、知识不断膨胀、信息高度发达、空间距离日渐“缩短”和各类组织机构的社会综合功能显著增强的知识经济时代。作为促进社会进步与时
云计算是计算模式的新发展,我国大力推进信息化'云'建设,各地都有特色'云',新疆的'天山云'计划、上海的'云海'计划,北京的'祥云'计