一种基于redolog的Oracle数据实时同步方法与流程

文档序号:15588648发布日期:2018-10-02 18:41阅读:2988来源:国知局
本发明涉及oracle数据库
技术领域
:,具体地说是一种基于redolog的oracle数据实时同步方法。
背景技术
::传统的数据同步工具,如sqoop、kattle、datax等,均采用jdbc方式采集数据。jdbc方式简单、易上手,但这些产品都对数据质量有一定要求,无法采集一些数据质量较差的oracle数据,如存在大量重复数据、缺少主键和索引、所有列都存在空值等情况。技术实现要素:本发明的技术任务是提供一种基于redolog的oracle数据实时同步方法。本发明的技术任务是按以下方式实现的:一种基于redolog的oracle数据实时同步方法,该方法是基于oracle的redolog文件,并轮询redolog,通过redolog分析轮训内数据库的操作,实现数据同步,并将数据在其他存储系统完成同步操作。该方法的操作步骤如下:步骤1)首先查看oracle数据库当前的日志组状况,查看日志组数目、大小及存储路径,以满足功能和性能需求为目的调整oracleredolog日志大小及分组;步骤2)基于redolog实时同步oracle数据,定时轮询redolog,通过日志分析本次轮询内数据库增加、删除、修改操作,实现数据同步;步骤3)根据轮询结果,将数据在其他存储系统完成同步操作。所述的步骤1)中通过sql所示查看所述的日志组数目、大小及存储路径,包括:若默认redolog较小,创建新的redolog组,通过sql创建n个新redolog组,每个redolog组大小为m。所述的创建新的redolog组后,通过sql查询所有redolog组状态。通过所述的sql切换redolog,将redolog组1,2,3状态变为inactive。所述的切换redolog完成后,重新查询redolog组状态,当redolog组1,2,3为inactive时,将原有较小的redolog组1,2,3删除。所述的步骤2)中定时轮询redolog进行n次,第一次轮询时间点为当前系统时间t_1,第n次轮询时系统时间为t_n。所述的第n次轮询操作步骤如下:1)查询本次轮询需要查询的redolog文件路径;2)构造分析脚本,将所有分析的redolog加入到所述的分析脚本中;3)开始日志挖掘;4)查询数据变化。所述的查询数据变化,包括:查询oracle用户user的表名称为tname的表数据变化,可查询insert、update和delete全部操作或只查询其中一部分操作。所述的步骤3)中,若查询到数据库有一条delete操作及具体删除的数据内容,在同步的hbase数据库中删除对应的一条数据,采用流式框架自动完成数据同步作业。本发明的一种基于redolog的oracle数据实时同步方法和现有技术相比,该方法基于oracle自身的redolog文件,对oracle无侵入性,该方法技术简单易于实现,对数据质量无要求,具有广泛的适用场景,能够实现数据实时同步功能,支持数据增加、删除、修改等操作,软件开发人员可快速实现oracle数据实时同步功能。具体实施方式实施例1:一种基于redolog的oracle数据实时同步方法,该方法是基于oracle的redolog文件,并轮询redolog,通过redolog分析轮训内数据库的操作,实现数据同步,并将数据在其他存储系统完成同步操作。该方法的操作步骤如下:步骤1)首先查看oracle数据库当前的日志组状况,通过sql所示查看日志组数目、大小及存储路径,以满足功能和性能需求为目的调整oracleredolog日志大小及分组;sql>selectgroup#,bytes,statusfromv$log;group#bytesstatus------------------------------------1524288000inactive2524288000current3524288000inactivesql>selectgroup#,memberfromv$logfile;group#member--------------------------------------------------1/opt/oracle/oradata/test/redo01.log2/opt/oracle/oradata/test/redo02.log3/opt/oracle/oradata/test/redo03.log若默认redolog较小,创建新的redolog组,通过sql创建n个新redolog组,每个redolog组大小为m;sql>alterdatabaseaddlogfilegroup4'/opt/oracle/oradata/test/redo04.log'sizem;sql>alterdatabaseaddlogfilegroup4'/opt/oracle/oradata/test/redo04.log'sizem;…sql>alterdatabaseaddlogfilegroupn+3'/opt/oracle/oradata/test/redo(n+3).log'sizem;所述的创建新的redolog组后,通过sql查询所有redolog组状态。sql>selectgroup#,statusfromv$log;group#status-------------------------1inactive2current3inactive4unused5unused…通过所述的sql切换redolog,将redolog组1,2,3状态变为inactive。sql>altersystemswitchlogfile;sql>altersystemcheckpoint;所述的切换redolog完成后,重新查询redolog组状态,当redolog组1,2,3为inactive时,将原有较小的redolog组1,2,3删除。sql>selectgroup#,statusfromv$log;group#status--------------1inactive2inactive3inactive4inactive5current…sql>alterdatabasedroplogfilegroup1;databasealtered.sql>alterdatabasedroplogfilegroup2;databasealtered.sql>alterdatabasedroplogfilegroup3;databasealtered.步骤2)基于redolog实时同步oracle数据,定时轮询redolog,通过日志分析本次轮询内数据库增加、删除、修改操作,实现数据同步;所述的定时轮询redolog进行n次,第一次轮询时间点为当前系统时间t_1,第n次轮询时系统时间为t_n,所述的第n次轮询操作步骤如下:1)查询本次轮询需要查询的redolog文件路径;selectmemberfromv$logfilefinnerjoinv$loglonf.group#=l.group#wherecompletion_time>=to_date('starttime',t_n-1)andcompletion_time<to_date('starttime',t_n)orl.archived<>'yes';2)构造分析脚本,将所有分析的redolog加入到所述的分析脚本中;executedbms_logmnr.add_logfile(logfilename=>'redolog文件路径',options=>dbms_logmnr.new);…3)开始日志挖掘;executedbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);4)查询数据变化:查询oracle用户user的表名称为tname的表数据变化,可查询insert、update和delete全部操作或只查询其中一部分操作。select/*+parallel(4)*/count(*)fromv$logmnr_contentswhereseg_owner='user'andtable_name='tname'and(operation='insert'oroperation='update'oroperation='delete')andcommit_timestamp>=to_date('starttime',t_n-1)andcommit_timestamp<to_date('currenttime',t_n)步骤3)根据轮询结果,将数据在其他存储系统完成同步操作;若查询到数据库有一条delete操作及具体删除的数据内容,在同步的hbase数据库中删除对应的一条数据,采用流式框架自动完成数据同步作业。通过上面具体实施方式,所述
技术领域
:的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的几种具体实施方式。在公开的实施方式的基础上,所述
技术领域
:的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1