Oracle ITL(Interested Transaction List)理解
ITL(Interested Transaction List)
ITL是位于数据块头部的事物槽列表,它是由一系列的ITS(Interested Transaction Slot,事物槽)组成,其初始的ITL Slot数量由INITRANS决定的,如果有足够的剩余空间,oracle也会根据需要动态的分配这些slot,直到受到空间限制或者达到MAXTRANS,注意10g以后MAXTRANS被废弃,默认为255。
ITL里的信息包括了xid,uba,flag,lck和scn/fsc,它是用来记录数据块上发生的事务相关信息,其中xid表示事物的id,uba表示对应到undo块上的地址,flag用来表示该条事务的状态,lck是块上的锁标记等。
我们使用dump命令来认识一下itl里的内容:
SQL> conn /as sysdba
Connected.
SQL> select * from v$version; BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1. - Production
PL/SQL Release 11.2.0.1. - Production
CORE 11.2.0.1. Production
TNS for Linux: Version 11.2.0.1. - Production
NLSRTL Version 11.2.0.1. - Production SQL> conn scott/tiger
Connected.
SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) fno,
dbms_rowid.rowid_block_number(rowid) block_id,
dbms_rowid.rowid_row_number(rowid)
from dept; ROWID FNO BLOCK_ID DBMS_ROWID.ROWID_ROW_NUMBER(ROWID)
------------------ ---------- ---------- ----------------------------------
AAAR3bAAEAAAACHAAA
AAAR3bAAEAAAACHAAB
AAAR3bAAEAAAACHAAC
AAAR3bAAEAAAACHAAD SQL> update dept set dname='development' where deptno=; row updated. --注意未提交
--另开一个会话
[oracle@std ~]$ sqlplus scott/tiger SQL*Plus: Release 11.2.0.1. Production on Fri Oct :: Copyright (c) , , Oracle. All rights reserved. Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1. - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> update dept set dname='AAAAA' where deptno=; row updated. SQL> commit; Commit complete. SQL> conn /as sysdba
Connected. SQL> alter system dump datafile block ; System altered. SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u02/app/diag/rdbms/orcl/ORCL/trace/ORCL_ora_7978.trc
查看一下dump出来的内容:
more /u02/app/diag/rdbms/orcl/ORCL/trace/ORCL_ora_7978.trc
......
Block header dump: 0x01000087
Object id on Block? Y
seg/obj: 0x11ddb csc: 0x00. itc: flg: E typ: - DATA
brn: bdba: 0x1000080 ver: 0x01 opc:
inc: exflg: Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.010.00000198 0x00c15aac.0061.36 C--- scn 0x0000.000b6f31
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- fsc 0x0000.
bdba: 0x01000087
data_block_dump,data header at 0xcac664
可以看到dump出来的内容包括了事务id,对应的undo地址,事务的状态,锁信息等,通过这些信息就可以标识当前数据块的DML情况。
理解flg标识位含义:
---- = transaction is active, or committed pending cleanout
C--- = transaction has been committed and locks cleaned out
-B-- = this undo record contains the undo for this ITL entry
--U- = transaction committed (maybe long ago); SCN is an upper bound
---T = transaction was still active at block cleanout SCN
------ITL在ORACLE中的使用
当发出一条sql语句时,ORACLE会记录下这个时刻(SCN),然后在buffer cache中查找需要的BLOCK,或者从磁盘上读。当别的会话修改了数据,或者正在修改数据,就会在相应的block上记录ITL,此时ORACLE发现ITL中记录的SCN(Scn/Fsc)大于SELECT时刻的SCN,那么ORACLE就会根据ITL中的Uba找到UNDO信息获得该block的前镜像,然后在buffer cache 中构造出CR(consistent read)块,此时ORALCE也会检查构造出来的BLOCK中ITL记录的SCN(Scn/Fsc),如果SCN(Scn/Fsc)还大于select时刻的SCN,那么一直重复构造前镜像,然后ORACLE找到前镜像BLOCK中的ITL的SCN是否小于select的SCN,同时检查这个事物有没有提交或者回滚,如果没有,那么继续构造前镜像,直到找到需要的BLOCK,如果在构造前镜像的过程中所需的UNDO信息被覆盖了,就会报ORA-01555快照过旧的错误。
参考:http://wenku.baidu.com/link?url=Pp9XTyF_4rYzhdNOeewFhmp_YAoVS1Pq8FJYvOy1_DS10DWIWreYDSLDpGwLhibjFO6SYGunPcvZ_aTP1P5fZzFCbw0m7qwXCT4EMYMSBpK
Oracle ITL(Interested Transaction List)理解的更多相关文章
- ITL(Interested Transaction List)理解
一.ITL描述: ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,l ...
- oracle ITL(事务槽)的理解
一.ITL描述: ITL(Interested Transaction List)是Oracle数 据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag, ...
- ORACLE ITL事务槽
讲到ITL(事务槽)必定先说数据块,那么什么是数据块呢?先给大家上一个数据块结构图 数据块分别由块头.ITL(事务槽).表信息区.行信息区.块空闲区.行数据区组成,其中ITL用来记录在数据块发生的所有 ...
- ORACLE时间函数(SYSDATE)深入理解
ORACLE时间函数(SYSDATE)深入理解 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add ...
- Transaction的理解
Transaction的理解 待完善......
- oracle关于sequence的个人理解
oracle关于sequence的个人理解 1. sequence在多用户使用时的同步问题 个人感觉sequence是以连接(会话)为基础,类似于java中使用mysql的一个connection 网 ...
- 对Oracle数据库坏块的理解
1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...
- 对oracle中SQL优化的理解
Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择:1.降低目标SQL语句的资源消耗.2.并行执行目标SQL语句.3.平衡系统 ...
- oracle聚簇表的理解 (转自:https://blog.csdn.net/gumengkai/article/details/51009345 )
Oracle支持两种类型的聚簇:索引聚簇和哈希聚簇 一.索引聚簇表的原理 聚簇:如果一些表有一些共同的列,则将这样一组表存储在相同的数据块中 聚簇还表示把相关的数据存储在同一个块上.利用聚簇,一个块可 ...
随机推荐
- VS2008 Debug与Release的本质区别(转)
如何设置:工具栏“生成”→“配置管理器”→“活动解决方案配置” 对于VS2008的初次使用者来说,常会遇到的编译问题时,Debug版本运行正常,但在Release版本则不稳定或无法运行.以下是对Deb ...
- css浏览器兼容问题
https://www.douban.com/group/topic/4629864/
- Windows 7个性化配置,关闭Win7动画效果,设置窗口背景为“ 豆绿色”
减少眼睛疲劳配色(豆绿色): RGB:, , ,颜色名称:#C7EDCC 1.任务栏设置 2.关闭Win7动画效果 控制面板 -> 轻松访问 -> 优化视频显示 3.去掉窗口阴影 右键单击 ...
- python解析git log后生成页面显示git更新日志信息
使用git log可以查到git上项目的更新日志. 如下两个git项目,我想把git的日志信息解析成一个便于在浏览器上查看的页面. https://github.com/gityf/lua https ...
- 2.3属性在 ASP.NET Web API 2 路由
路由是 Web API 如何匹配 URI 的行动.Web API 2 支持一种新型的路由,称为属性路由.顾名思义,属性路由使用属性来定义路由.属性路由给你更多的控制 Uri 在您的 web API.例 ...
- mysql、mysqli、PDO一句话概括比较
mysql.mysqli.PDO一句话概括比较 1 mysql扩展 (注:原始的,较差) 2 mysqli扩展(面向过程式) (注:比上面多了更多功能) 3 mysqli扩展(面向对象式) (注:比上 ...
- 【Python基础学习三】数字(Number)
Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. Python 四种数值类型: 整型(Int) - 通常 ...
- TCP/IP三次握手和HTTP过程
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在"无差别&qu ...
- HTTPS Web配置举例
http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Representat ...
- 各大安卓应用市场APP上传提交与收录
360 提交网址 应用宝 提交网址 百度 提交网址 91 提交网址 安卓 提交网址 PP助手 提交网址 小米 提交网址 华为 提交网址 OPPO 提交网址 魅族 提交网址 乐视 提交网址 豌豆荚 提交 ...