Oracle如何保持一致读?

本文介绍了Oracle数据库中一致读的实现原理。通过SCN(System Change Number)来判断数据块的版本,确保读取到的数据是一致的。同时利用回滚段记录槽保留历史版本的数据,以支持事务的一致性读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一致读的原理,就是查询的记录由查询的这一时间点决定,后面即便变化了,也要根据回滚保持的前镜像记录,取到那个点的数据。ORACLE是如何保证的呢?首先我们要了解两个情况:

1, SCN:System Change Number。这是一个只会增加不会减少的递增的数字,存在于ORACLE的最小单位块里,但某块改变时SCN就会递增。

2,数据库的回滚段记录槽,事物槽是用来分配回滚段空间的。如果你更新了某块,事务就被写进事务槽里。如果没有提交或者回滚,该块就存在活动事务,数据库读到次块可以识别到这种情况的存在。

因此Oracle在做一致读的时候,首先是看发起的SCN是否大于当前查询块的SCN,如果小于,毫无疑问从回滚段获取前镜像数据。如果SCN确实大于当前查询块的SCN,还要确保该块没有活动事务,否则还是要去前镜像查找。

 所以ORACLE的回滚段既可以回滚数据,又可以保证一致性读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值