讲到ITL(事务槽)必定先说数据块,那么什么是数据块呢?先给大家上一个数据块结构图

数据块分别由块头、ITL(事务槽)、表信息区、行信息区、块空闲区、行数据区组成,其中ITL用来记录在数据块发生的所有业务,简单通俗的讲你在数据库对一张表进行操作,都会记录在数据块中,表与数据块是一一对应的关系。

在行数据区是从下到上执行的,当执行DML语句时候,行数据区会在下方建立一个新的数据区,事务提交的时候,原先的数据会被unused。然后新数据块替换旧数据块。

ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,用来记录该块所有发生的事务,一个itl可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫itl槽位。如果一个事务一直没有提交,那么,这个事务将一直占用一个itl槽位,itl里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,那么,itl槽位中还保存的有这个事务提交时候的SCN号。

如需看具体的ITL文件信息,定位到udump文件进行查看数据块头文件的变化。

ITL知识点对于一个初学dba只要记住两点。

一、ITL重用后如何实现前ITL读一致性:

ORACLE通过ITL条目中记录的回滚段地址找到回滚段,实现读一致性,如果事务已提交,ITL就可以被重用,但是若前一个ITL被重用,前一个ITL的读一致性是如何实现的呢?

假定block只有一个itl,假定第一个事务的时候产生了 ITL-0

第二个事务来了,产生了 ITL-1 ,ITL-1 里面的UBA 可以找到回滚段地址,回滚段中除了记录了 block用户数据的 before image 外还记录了 ITL-0 的信息。

第三个事务来了,产生了 ITL-2 , ITL-2 中 UBA 指向回滚段,回滚段中 也记录了 ITL-1 的信息。

这样当一个查询若需要ITL-0时候的信息,则找到当前block,发现是 ITL-2 ,根据UBA找到回滚段进行 roll 得到 变化前 block ,这个时候发现block中是 ITL-1 . 还不能满足需求。 于是再根据 ITL-1 中的 UBA 又去回滚段中找到数据来进行roll,得到一个block 数据,这个时候block中就有了 ITL-0。

通过根据当前ITL进行递归的方式找到数据,实现之前ITL的独一致性。

二、行锁原理

Oracle的锁机制是一种轻量级的锁定机制,不是通过构建锁列表来进行数据的锁定管理,而是直接将锁作为数据块的属性,存储在数据块首部。这个是通过ITL来实现的,一个事务要修改块中的数据,必须获得该块中的一个itl(通过initrans预先分配的或者是通过free space构建的)。通过itl和undo segment header中的transaction table,可以知道事务处于活动阶段,还是已经完成。事务在修改块时(其实就是在修改行)会检查行中row header中的标志位,如果该标志位为0(该行没有被活动的事务锁住,这是可能要进行deferred block cleanout等工作),就把该标志位修改为事务在该块获得的itl的序号,这样当前事务就获得了对记录的锁定,然后就可以修改行数据了,这也就是oracle行锁实现的原理。

了解更多锁知识点:https://www.cnblogs.com/xmao/p/12099592.html

参考资料:https://blog.csdn.net/gyb2013/article/details/6893639

https://www.cnblogs.com/myrunning/p/4885451.html

oracle itl 故障,ORACLE ITL事务槽相关推荐

  1. oracle断电故障,ORACLE服务器异常断电,控制文件故障的处理步骤

    这里只是简单的记录操作步骤,以做备忘.本步骤由同事邹启健(问心)完成 一.版本 SQL> select * from v$version; BANNER -------------------- ...

  2. oracle 常用故障,Oracle常见问题解决方案汇总

    1.Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务 数据库服务器崩了,而且尝试重启服务和重启机器都解决不了问题 打开cmd窗口 C:\Users\hxt& ...

  3. oracle itl解析,oracle数据块dump文件中ITL详解

    oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...

  4. Oracle: 三、Oracle的隐藏事务与视图的创建

    内容简介 1,Oracle的隐藏事务.2,视图(View)的创建. 技术与环境 操作系统: windows 语言类别: SQL之PL/SQL thankyou: sunshine, 谢谢你的默默付出 ...

  5. PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁

    PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁 作者 digoal 日期 2016-11-04 标签 PostgreSQL ...

  6. 事务,Oracle,MySQL及Spring事务隔离级别

    一.什么是事务:  事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种):  原子性 (atomicity):强调事务的不可分割: 一致性 (consi ...

  7. Oracle 不同故障的恢复方案

    之前在Blog中对RMAN 的备份和恢复做了说明,刚看了下,在恢复这块还有知识点遗漏了. 而且恢复这块很重要,如果DB 真要出了什么问题,就要掌握对应的恢复方法. 所以把DB的恢复这块单独拿出来说明一 ...

  8. 从Oracle数据库故障到AIX内存管理

    墨墨导读:本文来自墨天轮用户"你好我是李白"的投稿,详细介绍数据库告警最核心的一套数据库1节点hang的处理过程.墨天轮主页:https://www.modb.pro/u/3997 ...

  9. 分享一次生产应用无法连接Oracle数据库故障

    故障简介 今天一个应用运维同事微信联系我,说有一个应用日志,显示连接Oracle数据库报错,我问了一下是什么应用,对方回答是报表应用,这下心里有谱了. 第一:报表应用重要性不高 第二:一般这种情况,都 ...

最新文章

  1. SpringBoot+zxing+Vue实现前端请求后台二维码图片
  2. Java黑皮书课后题第6章:**6.31(金融应用:信用卡号的合法性验证)和**6.32 编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的
  3. last modified php,lastModified属性_用法示例-javascript词典-js编程词典-php中文网
  4. 【Nginx那些事】nginx配置实例(一)反向代理
  5. android 跳转系统通知,android 跳转到应用通知设置界面
  6. sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”...
  7. JAVA学习笔记-this隐式参数
  8. 放弃吧,Hibernate 4直到4.3.0 Beta1还没有解决Proxool连接池不可用的问题
  9. String的replaceAll方法中的正则表达式用法
  10. 解决无法ping通 127.0.0.1
  11. ipad为什么会闪退?有哪些办法可以修复ipad闪退问题?
  12. STM32F407单片机移植ADS1115驱动程序
  13. 国外广告联盟骗局汇总(持续更新中)
  14. 科技云报道:都想当中国VMware,但用户体验拉平了吗?
  15. 比亚迪DiLink深体验:让科幻般的车生活都成为实现,智能网联集大成者张这样?...
  16. 最透彻的分析!NTC热敏电阻与浪涌电流,热启动不会失效?
  17. 用于光波导耦合的倾斜光栅分析
  18. storyboard搭建项目_用Storyboard实例化控制器:
  19. 未来的搜索大战:生态能力成为胜负手
  20. markdown使用方法大全

热门文章

  1. 网友自曝:编程从入门到放弃!方法比选择更重要!
  2. 无名师的Unix心传
  3. NUCLEO-F767ZI以太网功能实现笔记本电脑不开盖开机
  4. 【大数据开发】Python基础——Python序列
  5. 瑞幸咖啡CMO杨飞:一切产品皆可裂变,一切创意皆可分享
  6. SQL SERVER中的OLEDB等待事件
  7. 用Python爬取并分析Box Office Mojo网站2019年每日票房数据
  8. 【mysql知识点整理】 --- 准确理解 in 和 exists
  9. MAC OS X 问题库
  10. linux 内网环境搭建 maven 私库