oracle事务内部原理

简介:
事务内部原理:概述
一个事务是当插槽分配在事务表的回滚段头上开始的,这是一个事务物理表现.事务标识符指示了这
个位置.事务标识符有以下的结构:
txid=usn.slot.wrap(回滚段编号.事务插槽ID.SCN wrap

在一个事务插入,更新或删除一个表数据时,一个事务插槽会分配在包含这些行数据的数据块中.
这个事务插槽被用来标记这些行被锁定直到事务被提交或回滚.事务插槽包含事务标识符.

当改变应用到数据块时,重做信息也会生成并存储在回滚段中.事务表插槽包含一个指针指示事务
标识符

事务内部原理:读一致性
为了支持在第一个事务还没有提交时要能让不同会话能读取相同数据块

当读取数据块(可能数据块在缓存中)会话,首先会找到打开的事务插槽.检查事务状态(通过读取
回滚段头)并找出它仍处于活动状态.这意味着会话必须通过活动事务来对数据块第一次被改变
之前的镜像创建一个视图(快照).这就叫作数据块的一致性读取副本,这个副本是通过先复制数据块
的副本然后通过从回滚段中应用重做记录来回滚上次发生的改变.
如果一致性读取要求访问数据块,回滚段头和重做记录.如果它们任何一个有错误都会影响一致性读取.


事务内部原理:锁
为了支持在第一个事务还没有提交时要能让另外的会话改变(更新或删除)被第一个事务所修改的行

新的会话当读取数据块(数据块可能在缓存中)将会找到打开的事务插槽.它将检查事务状态(通过读取
回滚段头)找到它仍处于活动状态.它会告诉会话进程在这种情况下不能继续而要等待其它事务完成(
提交或回滚)

如果必须要读取回滚段头来构建事务插槽的状态.如果回滚段头出现错误那么会影响事务锁

事务内部原理:提交

为了支持现在来提交第一个事务,这个事件会立即被标记为非活动的事务表插槽.
然而直到后来,数据块在事务提交时本身可能没有被更新.这意味着在提交后数据块中的事务插槽可能
仍然处于打开状态.

然而当数据库下次再次读该数据块时,会检查事务表,以前提交的事务会被确认,事务插槽会关闭.
这被称为延迟块清洗.如果回滚段已经被删除了,那么在undo$中的scn记录用来确认提交的事务

数据库读取回滚段头来执行延迟块清洗.如果回滚段出现故障那么会影响延迟块清洗.
目录
打赏
0
0
0
0
10
分享
相关文章
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
1187 18
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
【ORACLE】 事务 | 锁 | 约束 | 权限、角色与用户管理
134 1
Oracle数据库中的事务和锁
【4月更文挑战第19天】Oracle数据库的事务和锁是确保数据完整性和并发控制的核心机制。事务遵循ACID原则,保证操作的原子性、一致性、隔离性和持久性。通过COMMIT或ROLLBACK来管理事务更改。锁包括共享锁(读)、排他锁(写)、行级锁和表级锁,用于控制并发访问。自动锁机制在DML操作时生效,防止数据冲突。事务和锁共同维护数据库的稳定和安全。
oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读
oracle基础|什么是事务控制|事务的ACID原则|什么是不可重复读、幻影读、脏读
Oracle数据库机:让数据价值回归用户“第一性原理”
Oracle数据库机:让数据价值回归用户“第一性原理”
Oracle的视图,索引,约束,事务,数据库范式
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
131 0
Oracle的视图,索引,约束,事务,数据库范式
Oracle事务和锁机制
Oracle事务和锁机制
184 0
MySQL和Oracle的区别是什么?底层原理是什么?
MySQL和Oracle的区别是什么?底层原理是什么?
1483 0

热门文章

最新文章

相关实验场景

更多

推荐镜像

更多