|
看了大家的帖子,我也想说点东西,一直以来做的就是容灾和备份的事情。
目前的所谓的容灾可能包含两种方式:
1.真正的容灾,目的就是为了防止在灾难发生的时候能减少下线时间。这个过程没有一个能做到零下线的。
2.”假“容灾,即所谓的ods,数据复制。出来的数据不单单能达到容灾的目的,而且目的端数据可以实时被使用。
第一种方式可能是鸡肋,因为花那么大的投资使用当前的硬件容灾方式去达到一个可能领导在任期间都不能发生的灾难,实在让人觉得不太值得,除非厂商给了这个领导很大一笔钱,不过当前许多电信行业都说要建容灾中心。
第二种方式确实是一种很诱人的方式,也是我现在做的产品。这种方式主要采用两种方式实现:
a.使用我们现在的同步工作实现首次同步(逻辑上的导出,也是一种鬼才写出了这个东西,当然他是我们老总),然后直接转入监控online redolog进行日志监控分析转化,然后传送到目标端装载。
b.使用类似于bcv/ca/flashcopy这些快照类软件在磁盘存储级做成首次同步,然后使用我现在的产品做日志监控,加载到目的端。
这个产品作了1年多,应该说比quest的shareplex强大的多了,但是我并非在此宣传产品,所以我要说的是公平话。
通过oracle内部方式去达到实时同步可能本身就是一个错误,类似于oracle本身的advance replication以及data guard也是日志分析方式的,他的主要缺点在于效率上存在问题,就是装载数据量很大的时候,根本不能应付,这也是shareplex的毛病。因此我现在的产品在这个上面是克服了这些缺点,效率绝对的高。我和oracle的stream,quest的shareplex,以及非用于容灾方式的data guard等对比过,大家互有长短。
关键就是,采用基于这种精确分析的复制方式,如何保证数据是完全准确的:
1.没有有效的检验方式,检查数据是否一致,有类似于select minus select的方式,但是对于超过100M的表,除非你有足够的耐心,我经常见到表最大是92G,没有分区,很变态。
2.就算你知道了丢失数据,如何把这个数据补回来。现在的类似于我们的软件,都采用了rowidmap的方式去做精确定位,所以如果丢失了,你如何补回来。我知道quest 是重新同步,我们是把整个表重新同步,因为我们的逻辑到处快。
这些都是基于oracle精确复制需要解决的最大的问题。
呵呵,当然了关于这个里面处理很多oracle的特殊操作的时候还有很多需要做的事情,quest做了8年多了吧,到5年后才支持chained row,不能不说这是一个悲剧。还有许多的操作类型怎么办:ddl
,truncate,rollback savepoint,nologging等等,当然日志了没有的时候,你如何做。
我个人的观点,基于oracle的精确分析复制方式,除了oracle以后能做好,其他人不要轻易尝试。 |
|