博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle ITL(Interested Transaction List)理解
阅读量:6801 次
发布时间:2019-06-26

本文共 3680 字,大约阅读时间需要 12 分钟。

 

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 sysdbaConnected.SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE    11.2.0.1.0      ProductionTNS for Linux: Version 11.2.0.1.0 - ProductionNLSRTL Version 11.2.0.1.0 - ProductionSQL> conn scott/tigerConnected.SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) fno,  2  dbms_rowid.rowid_block_number(rowid) block_id,  3  dbms_rowid.rowid_row_number(rowid)   4  from dept;ROWID                     FNO   BLOCK_ID DBMS_ROWID.ROWID_ROW_NUMBER(ROWID)------------------ ---------- ---------- ----------------------------------AAAR3bAAEAAAACHAAA          4        135                                  0AAAR3bAAEAAAACHAAB          4        135                                  1AAAR3bAAEAAAACHAAC          4        135                                  2AAAR3bAAEAAAACHAAD          4        135                                  3SQL> update dept set dname='development' where deptno=10;1 row updated.      --注意未提交

 

--另开一个会话

 

[oracle@std ~]$ sqlplus scott/tigerSQL*Plus: Release 11.2.0.1.0 Production on Fri Oct 16 15:24:12 2015Copyright (c) 1982, 2009, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> update dept set dname='AAAAA' where deptno=40;1 row updated.SQL> commit;Commit complete.SQL> conn /as sysdbaConnected.SQL> alter system dump datafile 4 block 135;System altered.SQL> oradebug setmypidStatement 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.105858  itc: 2  flg: E  typ: 1 - DATA     brn: 0  bdba: 0x1000080 ver: 0x01 opc: 0     inc: 0  exflg: 0  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc0x01   0x0001.010.00000198  0x00c15aac.0061.36  C---    0  scn 0x0000.000b6f310x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000bdba: 0x01000087data_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

转载于:https://www.cnblogs.com/myrunning/p/4885451.html

你可能感兴趣的文章
python的eval、exec函数使用总结
查看>>
js解析与序列化json数据(一)
查看>>
Oracle升级前备份和失败回退
查看>>
学习笔记之PostgreSQL / pgAdmin / Psycopg / PostGIS
查看>>
java设计模式-工厂方法模式
查看>>
SAP RFC通信模式
查看>>
基于jQuery+JSON的省市联动效果
查看>>
NABCD构建APP
查看>>
React 获取 url 参数 —— this.props.match
查看>>
乙佳荣第二次作业
查看>>
request请求的常用属性
查看>>
13-JS中的面向对象
查看>>
[转载]LeetCode: Gray Code
查看>>
优达学城数据分析师纳米学位——知识点总结2
查看>>
.Net 调用中国气象台Web Service
查看>>
BNU 51002 BQG's Complexity Analysis
查看>>
leetcode 7. Reverse Integer
查看>>
VC++6.0 自定义按钮,无标题对话框的拖动方法
查看>>
Ubuntu下 安装 window 虚拟机
查看>>
Urxvt最简配置
查看>>