|
Re: 这种问题我当然知道
最初由 wxz75 发布
[B]一致性是可以通过isolation level解决,但这是以牺牲并发性为代价的.
DB2有四种隔离级别: 未提交读、游标稳定性(缺省)、读稳定性和可重复读. 未提交读的并发性最好,但是没有任何读一致性可言; 缺省的游标稳定性的并发性已经不如ORACLE(select 和update互相影响,ORACLE无此问题),而且读一致性也不能保证,其他两种级别应该可以保证读一致性,但并发性完全不可接受.
之所以银行可以用DB2有两个原因:
1.有些银行用的是390,机制不同
2.其他银行用UDB,但是银行和许多其他如电信等行业不同,对OLD IMAGE的要求不高,所以DB2的一致性和并发性的问题被掩盖.
这些问题我发现时也很疑惑,简直不敢相信.但我与IBM的资深工程师探讨过多次后,才一致共同确认DB2是存在此类缺陷.
这就是事情的经过,有些问题你光从DB2的角度看不出来,你如果能同时掌握DB2和ORACLE,就很容易看出来了.当然,以DB2的角度,ORACLE也不是没问题. [/B]
请说明清楚390的DB2机制不同在什么地方?
IBM网站说DB2不能保证读一致性的原文在哪里,请给出,谢谢。
按照正常理解和ITPUB的文章,对于ORACLE缺省的CR隔离级别,一样不可能避免幻象读和不可重复读的问题。
"读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。"
对于INFORMIX,也没有回滚段,只有物理日志文件,用来保证修改前的映象,其实可以理解成为他也有回滚段,但是只有一个大的。
对于DB2,我的理解在于,他的日志不是好像ORACLE这样只记录修改,而是将INFORMIX那样的逻辑日志和物理日志都放到日志文件中,包括修改前印象和修改操作。 |
|