数据库

数据库并发

2018-07-05 14:54:13 | 来源:中培企业IT培训网

(5)数据库并发

Oracle在日志中记录修改后数据,而将修改前的数据记录到“回滚段”(ROLLBACKSEGMENT)中。UNDO信息也会记录在REDO中,也就是说Oracle会把修改前的数据及其修改后的数据都记录在REDO中,以便实例失效的时候进行recovery。

当一个应用程序对表以Insert、Update和Delete操作进行修改时,另外一个应用程序在读取该表时,会从回滚段中读取该表修改前的数据。Oracle利用数据行上的标志位来实现锁机制。Oracle同一时刻不同的应用程序有读不一致的现象,这是因为Oracle认为一致性指的是在开始读的时候的断片应该保持一致,也就是说一直到TRANSACTION的生命周期里,总是能读到一致的内容。Oracle缺省的隔离级别类似DB2的UR,读取数据和更新不会互锁(如果提高Oracle的隔离级别,也会产生互锁问题),但只能读到已提交的数据,无法得到最近修改(但暂时未提交)的版本。Oracle在其所有的隔离级别(即read committed、serializable以及read-only隔离级别)下都不会读取脏数据(在read committed级别下,会从回滚段中直接读取修改前的曾经提交过的数据)。在一些应用里,需要读到最新的数据,也就是脏数据。

在1日的DB2里(DB2 9.7以前)是靠锁来解决并发问题的,这是一个阵营。而Oracle在另一个阵营,使用MVCC。Oracle叫UNDO。实践检验,MVCC胜出。读脏数据没有太大用处。对于并发控制,无论是DB2还是Oracle,都有自己的特色,只要合理地设计应用并配置好数据库参数,就能够满足绝大多数的需求。

标签: 数据库并发

猜你喜欢