最近花了几天时间更深入地研究了一上实体化视图(Materialized View), 接下来就要利用研究的所得去练习一下了, 想做什么呢? 利用实体化视图日志(Materialized View Log)来跟踪Oracle数据库中表的变化, 然后写Perl程序去将变化过的数据刷新到MySQL数据库中, 充分防照实体化视图增量刷新(Fast Refresh)的原理, 可以高效地实现这一功能, 足以应对一般的业务需求了. 下面强调最主要的几点:
1, 每一个表必需要有主键.
2, 用With Primary Key, Sequence选项创建实体化视图日志, 以支持增量刷新.
3, 在实化化视图日志上可以建一个CREATE_DATE列, 默认值SYSDATE.
4, 在实化化视图日志上为SEQUENCE$$列创建一个索引.
5, 现在只考虑简单的记录复制.
Oracle的增量刷新有些小问题, 当实体化视图日志中有很多的记录时, 刷新过程很容易失败, 因此我在这儿对这个过程作些改进, 根据SEQUENCE$$的值来进行刷新, 每次最多刷新1000条记录, 小批量地做, 可以提高刷新频率.
程序原型已经出来了, 要保证一次刷新过程的事务一致性, 是个难题, 因为没办法用DB-Link了, 所以正在思考要不要用分布式事务处理的编程. 你有什么建议和想法, 就回复吧!
留言 (7)
老兄, 你reinvent the wheel 了吧,大忌.
Oracle CDC (Change Data Capture)是专门开发用来作增量数据跟踪的,效率一定比MV log高.
I'm still working on CDC protype benchmark and proof of concept.
Posted by zhu1 (木匠) | Mar 13, 2007 6:08 AM
To zhu1, 你也不介绍一下, 或搞一个演示程序?
Posted by anysql | Mar 13, 2007 8:53 AM
也没什么大忌的。我觉的挺好的。
mv log与cdc都可以用。
我有一种想法,目前市面上可以跨平台进行数据迁移的软件太少。除了exp/imp外,据我所知只有dsg的realsync可以做到。
而对业务要求较高的系统exp/imp不太现实,而realsync又较贵。所以我想组织写一个数据迁移软件。
d.c.b.a可以往这方面发展。
Posted by logzgh | Mar 13, 2007 10:59 AM
肯定很多公司想过的, 做成功比较难啊, 没什么简单的思路啊.
Posted by anysql | Mar 13, 2007 12:38 PM
请再等一个月 很快.
接下来好几个Data Mart项目都会用到CDC,
现在临时用database trigger捕捉新更改数据.
最近忙着处理库存系统 将XML转换成relation data.
以满足每天100百万行的数据更新.
Posted by zhu1 (木匠) | Mar 13, 2007 1:47 PM
那你用CDC搞一个从Oracle复制到MySQL的演示先, 两个表的Delay不要很长. 看看是不是比较复杂.
Posted by anysql | Mar 13, 2007 2:02 PM
请教一下:在数据同步时,CDC和LogMiner那种方法的实时性更高
Posted by davidhealth | Jun 4, 2007 4:47 PM