设为首页 收藏本站
查看: 670|回复: 0

[经验分享] oracle 数据库双向复制(解析redolog实现)

[复制链接]

尚未签到

发表于 2016-8-5 06:49:41 | 显示全部楼层 |阅读模式
  纵观当前的数据复制产品,为shareplex为最牛,它自己捕捉了oracle redolog的文件内容的变化,然后将数据的变化传输于对方,通过tcp/ip协议和socket技术,仅仅依赖于数据库的redolog文件,不通过数据库本身,节省了数据库的资源.
  由于我们无法监视redo log文件的变化,所以我们无法获得redo log的内容,而且redo log文件内容加密,我们无法解密,所以我的想法是通过logminer来解析oracle的redo log,利用logminer的优点是:
1.我们可以传入当前的redo log解析,准实时的获得DML语句.
2.我们再解析redo log的时候可以加上时间和SCN的约束,使logminer的解析加快.
3.获得SQL语句,使放在SGA区的,随着下一次的解析或者程序的退出,动态表的数据也会丢失,也就是基于session级,因此不必害怕数据的不正确.
缺点:
1.logminer安装包仅仅再oracle8i以后才有,所以以前的,必须手动copy安装.
2.获得sql的时间是准实时的,速度比shareplex较慢.
3.依赖于数据库,需要对数据库的初始话参数修改.
既然说道了logminer,我就列出其安装过程:
要安装LogMiner工具,必须首先要运行下面这样两个脚本,
l $ORACLE_HOME/rdbms/admin/dbmslm.sql
2 $ORACLE_HOME/rdbms/admin/dbmslmd.sql.
创建数据字典的目的就是让LogMiner引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。
  首先在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:
  UTL_FILE_DIR = (e:\Oracle\logs)

   重新启动数据库,使新加的参数生效,然后创建数据字典文件:
  SQL> CONNECT SYS
  SQL> EXECUTE dbms_logmnr_d.build(
  dictionary_filename => ' v816dict.ora',
  dictionary_location => 'e:\oracle\logs');
2、创建要分析的日志文件列表
  >  Oracle的重作日志分为两种,在线(online)和离线(offline)归档日志文件,下面就分别来讨论这两种不同日志文件的列表创建。
  (1)分析在线重作日志文件
  A. 创建列表
  SQL> EXECUTE dbms_logmnr.add_logfile(
  LogFileName=>' e:\Oracle\oradata\sxf\redo01.log',
  Options=>dbms_logmnr.new);
  B. 添加其他日志文件到列表
  SQL> EXECUTE dbms_logmnr.add_logfile(
  LogFileName=>' e:\Oracle\oradata\sxf\redo02.log',
  Options=>dbms_logmnr.addfile);(2)分析离线日志文件
  A.创建列表
  SQL> EXECUTE dbms_logmnr.add_logfile(
  LogFileName=>' E:\Oracle\oradata\sxf\archive\ARCARC09108.001',
  Options=>dbms_logmnr.new);
  B.添加另外的日志文件到列表
  SQL> EXECUTE dbms_logmnr.add_logfile(
  LogFileName=>' E:\Oracle\oradata\sxf\archive\ARCARC09109.001',
  Options=>dbms_logmnr.addfile);关于这个日志文件列表中需要分析日志文件的个数完全由你自己决定,但这里建议最好是每次只添加一个需要分析的日志文件,在对该文件分析完毕后,再添加另外的文件。
  和添加日志分析列表相对应,使用过程 'dbms_logmnr.removefile' 也可以从列表中移去一个日志文件。下面的例子移去上面添加的日志文件e:\Oracle\oradata\sxf\redo02.log。
  SQL> EXECUTE dbms_logmnr.add_logfile(
  LogFileName=>' e:\Oracle\oradata\sxf\redo02.log',
  Options=>dbms_logmnr. REMOVEFILE);
  创建了要分析的日志文件列表,下面就可以对其进行分析了。
3、使用LogMiner进行日志分析
  (1)无限制条件
  SQL> EXECUTE dbms_logmnr.start_logmnr(
  DictFileName=>' e:\oracle\logs\ v816dict.ora ');
  (2)有限制条件
  通过对过程DBMS_LOGMNR.START_LOGMNR中几个不同参数的设置(参数含义见表1),可以缩小要分析日志文件的范围。通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。如下面的例子,我们仅仅分析2001年9月18日的日志,:
  SQL> EXECUTE dbms_logmnr.start_logmnr(
  DictFileName => ' e:\oracle\logs\ v816dict.ora ',
  StartTime => to_date('2001-9-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
  EndTime => to_date(''2001-9-18 23:59:59','YYYY-MM-DD HH24:MI:SS '));
  也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:
  SQL> EXECUTE dbms_logmnr.start_logmnr(
  DictFileName => ' e:\oracle\logs\ v816dict.ora ',
  StartScn => 20,
  EndScn => 50);
4、观察分析结果(v$logmnr_conte
nts)
  到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
  SELECT sql_redo FROM v$logmnr_contents;
  如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户DB_ZGXT对表SB_DJJL所作的一切工作。
  SQL> SELECT sql_redo FROM v$logmnr_contents WHERE username='DB_ZGXT' AND tablename='SB_DJJL';

安装完logminer,我们就可以获得变化的DML SQL语句,那么我们就可以通过occi或者proc去获得变化的sql语句,通过unix c解析config的文件,congfig文件中记载了表名和数据库的源端和目标端信息以及解析的其他条件.
使用occi或proc的目的是加快速度,利用unxi c解析配置文件也是提高速度.
到此为止,一个数据复制的工具产生.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252997-1-1.html 上篇帖子: oracle笔记 (创建、更改、删除[table,constraint,index,view,sequence]) 下篇帖子: Oracle千万条记录插入与查询小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表