`

oracle 数据库双向复制(解析redolog实现)

阅读更多

      纵观当前的数据复制产品,为shareplex为最牛,它自己捕捉了oracle redo log的文件内容的变化,然后将数据的变化传输于对方,通过tcp/ip协议和socket技术,仅仅依赖于数据库的redo log文件,不通过数据库本身,节省了数据库的资源.

      由于我们无法监视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解析配置文件也是提高速度.
到此为止,一个数据复制的工具产生.

分享到:
评论

相关推荐

    ORACLE 10G 数据库 通过STREAM实现数据库双向同步

    ORACLE 10G 数据库通过STREAM技术实现的双向同步,为数据一致性与高可用性提供了强有力的支持。以下是对这一技术的深入解析: ### ORACLE 10G 数据库与STREAM技术 ORACLE 10G作为Oracle公司推出的第十代数据库产品...

    Oracle STREAMS数据同步复制技术应用.pdf

    该技术基于Oracle数据库的日志处理能力,通过解析数据库重做日志(Redo Log)来捕获数据变化,并将这些变化传播到其他目标数据库。 在Oracle数据库中,日志挖掘(LOGMINER)是一项关键的技术,它允许用户分析重做...

    浅谈ORACLE GoldenGate在企业数据库中的应用.pdf

    数据同步的基本原理是捕获进程解析源数据库的redo log或archivelog,提取DML(数据操纵语言)和DDL(数据定义语言)操作,转换为GoldenGate的trail文件格式,然后由数据泵进程通过网络发送到目标数据库,交付进程再...

    基于Oracle GoldenGate的异构数据库实时同步研究与应用.pdf

    Extract在源端数据库读取在线日志(Online Redo Log)或归档日志(Archive Log)并进行解析,提取其中与数据变化相关的如增、删、改等操作,并将相关信息转换为Oracle GoldenGate自定义格式数据。 三、实施过程 ...

    大牛出品Oracle Golden Gate知识点总结

    Oracle GoldenGate是一款强大的数据复制工具,它用于实现数据库间的实时或准实时的数据同步。这款解决方案在企业级数据集成、灾难恢复、数据迁移等场景中扮演着重要角色。Oracle GoldenGate支持多种数据库平台,包括...

    双向复制配置.txt

    通过以上步骤,可以完成Oracle GoldenGate软件中双向复制的基本配置,实现两个数据库间的同步复制。需要注意的是,在实际操作中还需要考虑更多的细节,如网络配置、日志文件管理以及故障恢复等。

    知名机构Oracle GoldenGate 培训课件

    1. 数据捕获:EXTRACT 进程读取源数据库的redo log或archive log,解析日志中的变更事件。 2. 数据传输:变更事件写入trail文件,通过网络或直接在本地进行传输。 3. 数据处理:REPLICAT 进程读取trail文件,根据预...

    otter分布式数据库同步系统 v4.2.18.zip

    Node是实际执行数据同步的工作节点,它监听数据库的binlog(或者Oracle的redo log),并将变更事件转化为可传输的消息;Channel则表示数据流动的路径,每个Channel对应一个数据库同步任务。 三、特性解析 1. **高...

    ogg112101_fbo_ggs_Linux_x64_ora11g_64bit

    2. **数据复制技术**:Golden Gate采用日志解析技术,直接读取数据库的日志文件(redo log files),提取其中的数据变化,然后将这些变化复制到目标数据库。这种基于日志的复制方式确保了数据的一致性和完整性。 3....

    构建生态化分布式数据库架构体系.pdf

    Erosa/Eromanga通过解析数据库的日志(如Oracle的redo log和MySQL的binlog)来实时捕获数据变更,然后通过对称集群和ZooKeeper协调的数据cursor,保证了数据的实时性和事务顺序,降低了延迟,通常在高峰期延迟小于1...

    GoldenGate安装部署及解决方案.pdf

    GoldenGate是一款由Oracle公司推出的基于日志的结构化数据复制软件,其核心功能在于能够解析源数据库的在线重做日志(Online Redo Log)或归档日志(Archive Log),从中识别出数据的增加、删除和修改(即DML操作)...

    OGG基础知识整理

    1. **Extract**:这是在源数据库端运行的进程,负责读取在线重做日志(Online Redo Log)或归档日志(Archive Log),解析其中的数据变化信息,特别是DML操作(INSERT、UPDATE、DELETE)。Extract将这些变化转换为...

Global site tag (gtag.js) - Google Analytics