mvcc oracle

MVCC,全称为Multi-Version Concurrency Control,即多版本并发控制,是数据库管理系统中的一个重要概念。MVCC是根据每个事务启动时的时间戳来管理数据的,通过在数据行版本之间进行身份验证以实现并发。

Oracle数据库采用MVCC来提高数据库的并发性能。当一个事务读取数据时,Oracle数据库会为读取当前快照时所存在的所有数据行建立一个当前版本。在MVCC模型的实现中,一个事务可以看到数据库中在开始时刻之前提交的任何事务的数据,但是看不到任何未提交事务的内容。

例如,如果用户A在晚上8点提交了一个读自己银行账户的事务,与此同时,用户B在晚上8点提交了一个转账事务,那么在用户A事务执行期间,用户A只能看到连同自己在内所有在晚上8点之前提交的事务中账户金额的数据。因此,用户A永远不可能操作包括用户B在内的晚上8点之后提交的转账事务,除非对其进行“脏读取”。

Oracle数据库使用undo表来支持MVCC。每次对一行数据进行修改时,Oracle数据库会将修改前的数据(称为重做日志)存储到undo表中。当需要回滚或撤销时,数据库会使用undo表中的信息重新构建修改前的数据。

除此之外,Oracle数据库还将可重复读(Repeatable Read)作为MVCC的默认隔离级别。该隔离级别保证了在同一事务内的所有查询都将看到启动时所存在的数据快照,即不会受到其他事务的影响。这样可以避免数据库中出现不可重复读或幻读的情况。

--将数据表的隔离级别设为repeatable read ALTER SESSION SET ISOLATION_LEVEL=REPEATABLE READ;