今日早上, 在网上看到一篇贴子, 问了如下两个问题:
数据仓库中有2007年之前的数据
问题一:
如何保持erp与数据仓库中2007年数据一致而数据仓库中2007年之前数据不变(以前通过dbms_mview.refresh('xxx','fast'))?问题二:
我对x物化视图做了一个全部刷新,但是x物化视图中的数据全部变成2007年的数据,以前数据丢失?如阿恢复到刷新前的状态
其中第一个问题是个难题, 现在很多公司都在想这样的一个解决方案, 其实就是一个实时复制方案, 从在的角度来说, 这方面可以用的方案有: 1, Quest公司的SharePlex; 2, DSG公司的RealSync(没有一点印象); 3, Oracle公司的Stream. 前两者都是比较贵的解决方案, Oracle的Stream懂的人少, 而且在9i中还不够稳定. 物化视图并不适合用来归档生产库的数据到历史库, 原来就象第二点所说的那样, 如果进行全部刷新, Oracle会先在目标数据库上运行一个DELETE命令来删除所有的数据(你可以SQL_TRACE一把), 估计这位老兄也是查了资料或翻了贴子后, 觉得物化视图可以做到这一点, 所以这样做了一把, 结果就是数据被删除了.
最近我也一直在想这样的一个解决的方法, 在物化视图中, 用物化视图日志来捕获对表的变更, 是一个比较好的方法(对于负荷不是很高的数据库), 完全可以利用这一点, 自已编程来实现和物化视图刷新这样的功能, 最近我写的refresh_mysql角本就是用来做这个的. 当然当初考虑的是从Oracle中将数据比较实时地同步到MySQL或其他数据库中, 从角本的名字也可以猜出来. 但后来发现数据源也未必一定要是Oracle了, 其他的库可以用触发器来实现Oracle中的物化视图日志的功能, 目标数据也可以是Oracle.
如何高效地维护一个表的逻辑拷贝, 其实是一个比较难的问题, 象SharePlex是Quest公司的最主要的拳头产品.
留言 (11)
我订阅了您的日志,今天看到这篇文章的时候,马上就想到了我去年搞的一个数据集中方案。当是受到物化视图的启发,用触发器记录表的变化,在业务空闲时间(晚上)由一台服务器收集各服务器上发生变化的数据,并将其集中在一台服务器上,以达到集中数据的目的。目前还在运行,但经常会因为网络的原因,导致到DBLINK的连接挂起,一直没有找到好的解决方案。因为是个实验性方案,所以客户没有太高要求。但我一直希望解决这个问题,使其成熟一些。国内的环境,可能这种情况很多。希望能进一步讨论。谢谢!我留了邮箱jianpingan@gmail.com。
Posted by xenos an | Mar 29, 2007 6:45 PM
为了支持异种数据库, 一般会选择用Perl等语言来完成这个功能, 也可以解决DB Link带来的问题. 我最早想到实化视图日志的这种作用是在03年, 不过那时没有这样的需求, 要不可能会早一些写出这样的比较通用的角本.
Posted by anysql | Mar 29, 2007 11:50 PM
题外话, Perl 处理文本文件的性能咋样? 能赶上C (Pro*C)吗?
Posted by 木匠 | Mar 30, 2007 1:35 AM
很大程度上取决于编程, 而不是取决于语言.
Posted by anysql | Mar 30, 2007 9:23 AM
我记的物化视图complete刷新的话,是做truncate操作,而不是做Delete操作。
Posted by logzgh | Mar 30, 2007 3:55 PM
太高深了。
就易用性(开发效率) 和 可维护性而言,你推荐哪个?
Posted by 木匠 | Apr 2, 2007 2:13 PM
如果都是Oracle, 并且物化视图能满足你的需要, 那就用物化视图吧.
Posted by anysql | Apr 2, 2007 3:07 PM
继续题外话, Perl 处理文本文件的性能咋样? 能赶上C (Pro*C)吗?
太高深了。
就易用性(开发效率) 和 可维护性而言,你推荐哪个?
Posted by 木匠 | Apr 3, 2007 6:42 AM
Perl处理文本主要是高效,方便.
Posted by anysql | Apr 3, 2007 8:06 AM
问个问题 db2中是否有类似物化视图日志的机制 谢谢
Posted by lfy | May 31, 2007 6:42 PM
DB2应当可以用Trigger来模拟吧.
Posted by anysql | Jun 1, 2007 9:12 AM