日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Oracle ITL(Interested Transaction List)理解

發(fā)布時(shí)間:2023/12/31 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 Oracle ITL(Interested Transaction List)理解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ITL(Interested Transaction List)

ITL是位于數(shù)據(jù)塊頭部的事物槽列表,它是由一系列的ITS(Interested Transaction Slot,事物槽)組成,其初始的ITL Slot數(shù)量由INITRANS決定的,如果有足夠的剩余空間,oracle也會(huì)根據(jù)需要?jiǎng)討B(tài)的分配這些slot,直到受到空間限制或者達(dá)到MAXTRANS,注意10g以后MAXTRANS被廢棄,默認(rèn)為255。

ITL里的信息包括了xid,uba,flag,lck和scn/fsc,它是用來(lái)記錄數(shù)據(jù)塊上發(fā)生的事務(wù)相關(guān)信息,其中xid表示事物的id,uba表示對(duì)應(yīng)到undo塊上的地址,flag用來(lái)表示該條事務(wù)的狀態(tài),lck是塊上的鎖標(biāo)記等。

我們使用dump命令來(lái)認(rèn)識(shí)一下itl里的內(nèi)容:

SQL> conn /as sysdba
Connected.
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> conn scott/tiger
Connected.
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                                  0
AAAR3bAAEAAAACHAAB          4        135                                  1
AAAR3bAAEAAAACHAAC          4        135                                  2
AAAR3bAAEAAAACHAAD          4        135                                  3


SQL> update dept set dname='development' where deptno=10;

1 row updated.      --注意未提交

--另開一個(gè)會(huì)話

[oracle@std ~]$ sqlplus scott/tiger

SQL*Plus: Release 11.2.0.1.0 Production on Fri Oct 16 15:24:12 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> update dept set dname='AAAAA' where deptno=40;

1 row updated.

SQL> commit;

Commit complete.

SQL> conn /as sysdba
Connected.

SQL> alter system dump datafile 4 block 135;

System altered.

SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u02/app/diag/rdbms/orcl/ORCL/trace/ORCL_ora_7978.trc

查看一下dump出來(lái)的內(nèi)容:

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/Fsc
0x01   0x0001.010.00000198  0x00c15aac.0061.36  C---    0  scn 0x0000.000b6f31
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
bdba: 0x01000087
data_block_dump,data header at 0xcac664

可以看到dump出來(lái)的內(nèi)容包括了事務(wù)id,對(duì)應(yīng)的undo地址,事務(wù)的狀態(tài),鎖信息等,通過這些信息就可以標(biāo)識(shí)當(dāng)前數(shù)據(jù)塊的DML情況。

理解flg標(biāo)識(shí)位含義:

---- = 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中的使用

當(dāng)發(fā)出一條sql語(yǔ)句時(shí),ORACLE會(huì)記錄下這個(gè)時(shí)刻(SCN),然后在buffer cache中查找需要的BLOCK,或者從磁盤上讀。當(dāng)別的會(huì)話修改了數(shù)據(jù),或者正在修改數(shù)據(jù),就會(huì)在相應(yīng)的block上記錄ITL,此時(shí)ORACLE發(fā)現(xiàn)ITL中記錄的SCN(Scn/Fsc)大于SELECT時(shí)刻的SCN,那么ORACLE就會(huì)根據(jù)ITL中的Uba找到UNDO信息獲得該block的前鏡像,然后在buffer cache 中構(gòu)造出CR(consistent read)塊,此時(shí)ORALCE也會(huì)檢查構(gòu)造出來(lái)的BLOCK中ITL記錄的SCN(Scn/Fsc),如果SCN(Scn/Fsc)還大于select時(shí)刻的SCN,那么一直重復(fù)構(gòu)造前鏡像,然后ORACLE找到前鏡像BLOCK中的ITL的SCN是否小于select的SCN,同時(shí)檢查這個(gè)事物有沒有提交或者回滾,如果沒有,那么繼續(xù)構(gòu)造前鏡像,直到找到需要的BLOCK,如果在構(gòu)造前鏡像的過程中所需的UNDO信息被覆蓋了,就會(huì)報(bào)ORA-01555快照過舊的錯(cuò)誤。

參考:http://wenku.baidu.com/link?url=Pp9XTyF_4rYzhdNOeewFhmp_YAoVS1Pq8FJYvOy1_DS10DWIWreYDSLDpGwLhibjFO6SYGunPcvZ_aTP1P5fZzFCbw0m7qwXCT4EMYMSBpK

總結(jié)

以上是生活随笔為你收集整理的Oracle ITL(Interested Transaction List)理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。