回复 7# 欧阳峰 还是不太一样,DB2的cur_commit特性主要在默认隔离级别CS下发挥作用,实现读写互不阻塞的功能。在更高一级的RS下作用很小,到了最高的RR级别就无效了。而ORACLE从undo空间读before image的设计在任何隔离级别下都可用。而且DB2的cur_commit是只适用于读操作的,...
显示全部回复 7# 欧阳峰 还是不太一样,DB2的cur_commit特性主要在默认隔离级别CS下发挥作用,实现读写互不阻塞的功能。在更高一级的RS下作用很小,到了最高的RR级别就无效了。而ORACLE从undo空间读before image的设计在任何隔离级别下都可用。
而且DB2的cur_commit是只适用于读操作的,写操作定位目标行时没用。所以DB2中会出现两个事务更新同一张表中不同记录(filter字段上无索引)时互相阻塞的现象。ORACLE因为对写操作也会读取before image,故无此现象。
至于DB2为什么不设计成ORACLE那种方式,应该不是技术上的问题,主要是严格遵守ANSI-SQL的需要,并发性再提升就该出现一致性问题了。(严格来说ORACLE的隔离级别都没有满足ANSI-SQL标准的要求,想了解ORACLE的实现方式到底有何问题,可以参考我发的这篇帖子:
http://www.itpub.net/thread-1914632-1-1.html )
收起