关于redolog解析的介绍

作者:fanxin | 分类: 大话技术 | 标签: | 日期:2009-04-02

1. 什么是redolog解析

redolog 解析是我们自主研发的,通过分析oracle 的redo log ,然后根据oracle的log 还原出sql 的一种技术。功能类似于oralce 的logminer,不过比它更强大。

2. redolog 解析项目背景

做这个项目源自于我们自己主站和镜像站的数据同步需求。至于为什么不使用oracle自带的工具 ,我就不多说了 , 如果oracle做的好,也不会有sharePlex 和 DSG 公司的
软件了。我们为什么不使用商业软件? 第一是价格太贵; 第二个是它不能满足我们众多的小需求。

3. redolog 解析各个版本功能

整个redolog 格式的解析我共花了4个月不到的时间 ,并且写了一个包含事务的demo 版C 程序。 接下来架构部门介入,我便把整个程序的后续开发交给了他们。进过几个月的努力,顺利的完成
了交接工作 ,并且写出了C++ 版本的解析程序 。 接下来的一个事情就是如何验证程序的正确性 ,正好数据仓库部门有一个需求 ,他们需要抽取一个表每天变化的数据,而我们的redolog 解析
正好可以做这个事情,分析归档并提取出某段时间变化某个表变化的数据。经过一个月的试运行,利用解析程序提取出每天的变化数据和他们原先方法抽取的变化数据完全吻合 ,这使我们增强了
格式解析正确性的信心。 解析程序经历的版本如下:

v1.0

数据库版本支持: oracle 9i
可以解析的操作: 正常行的insert ,update ,delete 操作, 支持行迁移/行链接操作 ,支持 batch insert (insert ..select ..) ,batch delete 操作
可以解析的数据类型 :char ,nchar ,nvarchar2,varchar2,varchar,number,date,timestamp,rowid ,raw 类型

主要功能: 分析归档并提取出某段时间内一张或多张表变化的主键信息,并以文本方式输出。 前提要求是在数据库级别或表级别加supplement log;

v1.1

数据库版本支持: oracle 9i
可以解析的操作: 正常行的insert ,update ,delete 操作, 支持行迁移/行链接操作 ,支持 batch insert (insert ..select ..) ,batch delete 操作
可以解析的数据类型 :char ,nchar ,nvarchar2,varchar2,varchar,number,date,timestamp,rowid ,raw 类型
支持online redelog 解析,v1.0 版本是解析的归档
支持事务的过滤 ,避免手工数据订正引起的不必要同步

主要功能: 分析归档并提取出指定表的变化记录(主要指insert ,update ,delete )的主键 ,根据主键到源数据库中 select 出来 ,然后插入到目标数据库.源表和目标表均可以配置。

上面两个版本的功能均是解析出变化记录的主键,然后根据主键进行一系列的操作 。 当然也是可以根据redo log 解析出的sql,然后去更新目标表 ,但是现在缺乏测试资源,虽然线下
测试都没问题 ,但是还不敢贸然用到生产系统中。

4. redolog 解析的下一阶段目标

1) 支持DDL 操作 ,我们需要捕获DDL 操作以便及时更新我们内存中的数据字典
2) 支持 oracle 10G 或 更高的版本
3) 支持lob,long,object 字段类型的解析
4) 现在解析程序只是做了格式的解析 ,离数据库同步软件还有很多工作要做 ,包括传输部分和应用部分,大概还有60%的工作量。

5. redolog 解析的最终目标

1) 可配置、定制化。 比如可配置只同步某个schema,某几个表,某几个表的某些字段,过滤某个事物,从某个时间点开始同步 或同步到某个时间点 等。
2) 强大的容错功能 。当遇到各种故障,如主机,网络,软件本身的故障时 ,能快速从断点恢复。
3) 快速高效的进行数据复制。目前可能遇到的问题一个是长事务,还有一个是目标段的应用速度,最终将做成可配置的并发进行应用。
4) 实现多点之间互相复制。比如解决国际站目前的三角复制。

总之,我们要做的不仅仅局限在一个同步软件 ,我们将做的是一套基于日志解析进行数据同步的完整解决方案。数据同步将不仅仅局限于oracle-oracle ,需要把所有数据库之间都流都
打通 ,数据能像水一样流通于各个数据库之间 。

总结: 引用老娄(DCBA)的一句话: 这项工作很有挑战性。

8人发表了评论  ↓发表评论↓
  • 顶,这个帖子在内部已经炸开锅了 ,吼吼!!!!!!

    八神 @ April 3, 2009 |

  • Oracle的redo log在范大牛面前, 就像脱光了(^_-)的美女.

    奶妈来了 @ April 3, 2009 |

  • 省了不少钱。佩服

    yumianfeilong @ April 3, 2009 |

  • 如果你们从一开始就用源代码公开的数据库系统,何必这样耗费成本开发一个不可靠的同步应用?oracle也未必有他们的名声那样优秀,其中各种机制,数据类型也不是每个应用都需要的,一个以数据为核心的在线公司应该建一套自己的定制系统。Google连磁盘的文件系统都是定制的……

    恼惭 @ April 5, 2009 |

  • 以前实现过一个!花了大概三个月时间完成的,只实现了Oracle9i的,改天也整理一下发个版本。

    实现了 logminer 同样功能,发现logminer解析出来的内容少,数据丢了很多。

    通过解析归档日志 和 数据字典就够了。

    不过在开发过程中因为对归档日志的解析都是黑盒只能通过二进制文件和结合dump来完成,不知道你们是通过什么方式来完成的,有机会可以好好交流交流

    yidishui @ April 26, 2009 |

  • 我们也是通过 分析 二进制 文件 和 dump 来解析日志文件的 。 主要的精力和时间都花在 行链接的处理上 ,以及supplement log 上面 。目前在我们的生产系统中经过了比较长时间的测试 , 修复了部分bug , 现在 解析部分已经趋于稳定

    fanxin @ April 29, 2009 |

  • (⊙ˍ⊙)

    smw工法 @ December 25, 2009 |

  • 问一下,这个解析代码,我能参考吗?我试过几次,可是都没有成功啊。呵呵。。
    这是我的邮箱 shenzhou6@163.com
    可以吗?
    谢谢啊。

    paul @ June 3, 2010 |

表情:<( ̄︶ ̄)> | (⊙ˍ⊙) | >﹏< | b( ̄▽ ̄)d | (─.─||) | (^_-)

[ Ctrl+Enter提交 ]

阿里巴巴DBA出品