【ORACLE】事務與一致性(TRN TBL 和ITL基礎),trnitl

來源:互聯網
上載者:User

【ORACLE】事務與一致性(TRN TBL 和ITL基礎),trnitl
4 事務與一致性4.1 undo segment header 事務表及事務控製表(TRN TBL and TRN ctl)

--undo header 包含事務表TRN TBL用於標示最近事務的簡單列表,

 TRN TBL::

  index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt

  ------------------------------------------------------------------------------------------------

   0x00    9    0x00  0x0146  0x002e  0x0000.000c4261  0x008000e8  0x0000.000.00000000  0x00000001   0x00000000  1422514868

   0x01    9    0x00  0x0146  0x0007  0x0000.000c43f4  0x008000e8  0x0000.000.00000000  0x00000001   0x00000000  1422515883

   0x02    9    0x00  0x0146  0x002c  0x0000.000c43d3  0x008000e8  0x0000.000.00000000  0x00000001   0x00000000  1422515883

   0x03    9    0x00  0x0146  0x0008  0x0000.000c440a  0x008000e8  0x0000.000.00000000  0x00000001   0x00000000  1422515883

 

 

--undo header包含事務控制區TRN CTL詳細描述事務表的狀態

TRN CTL:: seq: 0x00cc chd: 0x0009 ctl: 0x002f inc: 0x00000000 nfb: 0x0002

            mgc: 0x8201 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)

            uba: 0x008000b9.00cc.06 scn: 0x0000.000c3c00

Version: 0x01

  FREE BLOCK POOL::

    uba: 0x008000b9.00cc.08 ext: 0x7  spc: 0x1c7e 

    uba: 0x008000e6.00cb.13 ext: 0x6  spc: 0x1024 

    uba: 0x00000000.00c9.2f ext: 0x4  spc: 0xc7c  

    uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0    

uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0    

 

--commit指令

Commit指令也會生產一個改變向量,因為修改undo的事務表的兩個欄位state,scn;

 

--事務ID:xid

事務ID有undo段編號(1,10),事務表的index值(ox00開始)加warp#構成了事務ID。

4.2 查看事務xid

--查看xid事務號

SQL> update scott.stu set stu_id=4 where stu_id=5;

 

已更新 1 行

SQL> select xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;

    XIDUSN    XIDSLOT     XIDSQN     UBABLK     UBAFIL     UBAREC

---------- ---------- ---------- ---------- ---------- ----------

         2         43        313         31          2         52

--xidusn:undo segment number

--xidslot:slot number

--xidsqn:sequence number(wrap#)

--ubablk:undo記錄所在對的undo檔案的block號。uba block number

--UBAFILE: undo記錄所在的undo檔案號。

//資料檔案2,block 31

 

SQL> select trunc(id1/65536) usn,mod(id1,65536) slot,id2 wrap,lmode  from v$lock where type='TX';

 

       USN       SLOT       WRAP      LMODE

---------- ---------- ---------- ----------

         2         43        313          6

//lmod 為6 獨佔模式。Slot 43轉換為16進位,0x2b:

 

--擷取undo欄位2 header中事務表 的slot ox2b資訊。

index  state cflags  wrap#    uel         scn            dba            parent-xid    nub        stmt_num    cmt

0x2b   10    0x80  0x0139  0x0000  0x0000.000c44bc  0x0080001f  0x0000.000.00000000  0x00000001   0x00000000  0

//state為10,活動狀態

//cflags為0x80表示活動事務,ox00表示無事務,0x10表示死事務。

//uel為ox0000 記錄下一個可用的事務槽為資訊

//dba,事務寫undo時候,最後一個undo塊數

    //nub為1,當前事務使用一個undo資料區塊。

//block 31

4.3 通過事務號XID事務的undo記錄

--dump事務對應的undo記錄的資訊。

ALTER SYSTEM DUMP UNDO BLOCK '_SYSSMU2$' XID 2 43 313

--查看undo記錄dump資訊

Undo Segment:  _SYSSMU2$ (2)

xid: 0x0002.02b.00000139

UNDO BLK:  Extent: 0   Block: 5   dba (file#, block#): 2,0x0000001f(10進位31)

KDO undo record:

KTB Redo

op: 0x03  ver: 0x01 

op: Z

KDO Op code: URP row dependencies Disabled

  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x010000cc  hdba: 0x010000cb

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 0(0x0) flag: 0x2c lock: 0 ckix: 161

ncol: 4 nnew: 1 size: 0

Vector content:

col  0: [ 2]  c1 06

4.4 通過x$ktuxe表可以同時擷取事務xid資訊(段號,slot號)及事務所在地址(資料檔案號,及block號)

--x$ktuxe的使用

SQL> select indx,ktuxesqn wrap#,ktuxerdbf dba_file,ktuxerdbb dba_block from x$ktuxe

  2  where ktuxesta='ACTIVE';

 

      INDX      WRAP#   DBA_FILE  DBA_BLOCK

---------- ---------- ---------- ----------

       189        313          2         31

 

4.5 並發動作的測試

1. 查看測試table head所在地址。

 (1)Create table t1 (id number, n1 number)

(2)

select HEADER_FILE, HEADER_BLOCK,BYTES,BLOCKS,INITIAL_EXTENT,EXTENTS,NEXT_EXTENT

from dba_segments where segment_type='TABLE' and owner='SCOTT' and segment_name='T1';

 

HEADER_FILE HEADER_BLOCK      BYTES     BLOCKS INITIAL_EXTENT    EXTENTS NEXT_EXTENT

----------- ------------ ---------- ---------- -------------- ---------- -----------

          4       251           65536          8          65536          1

2. 三個進程update t1 3條記錄。

3. table t1  dump檔案:

SQL> alter system dump datafile 4 block min 251 block max 258;

4. 讀取 table dump檔案:

   (1)t1表頭(segment_header):

buffer tsn: 4 rdba: 0x010000fb (4/251)

scn: 0x0000.000c6195 seq: 0x02 flg: 0x04 tail: 0x61952302

 

    (4) buffer tsn: 4 rdba: 0x010000fe (4/254)

Itl           Xid                 Uba         Flag  Lck        Scn/Fsc

0x01   0x0001.00b.00000147  0x0080000d.00ce.1b  ----    1  fsc 0x0000.00000000

0x02   0x0005.025.0000013b  0x00800a05.010f.14  ----    1  fsc 0x0000.00000000

0x03   0x0009.01e.00000150  0x0080015f.00a8.33  ----    1  fsc 0x0000.00000000

         block_row_dump:

tab 0, row 0, @0x1f76

tl: 10 fb: --H-FL-- lb: 0x2  cc: 2

col  0: [ 2]  c1 02

col  1: [ 3]  c2 02 02

tab 0, row 1, @0x1f6c

tl: 10 fb: --H-FL-- lb: 0x1  cc: 2

col  0: [ 2]  c1 03

col  1: [ 3]  c2 03 02

tab 0, row 2, @0x1f62

tl: 10 fb: --H-FL-- lb: 0x3  cc: 2

col  0: [ 2]  c1 04

col  1: [ 3]  c2 04 02

end_of_block_dump

 

5. 讀取undo header記錄:

查看undo的TRN tab事務

SQL> select xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;

 

    XIDUSN    XIDSLOT     XIDSQN     UBABLK     UBAFIL     UBAREC

---------- ---------- ---------- ---------- ---------- ----------

         1         11        327         13          2         27

         9         30        336        351          2         51

         5         37        315       2565          2         20

//三個事務的undo記錄,在三個undo欄位中,表頭中slot記錄事務列表資訊。資料檔案2中一些資料區塊儲存了undo的記錄。

SQL> select trunc(id1/65536) usn,mod(id1,65536) slot,id2 wrap,lmode  from v$lock where type='TX';

 

       USN       SLOT       WRAP      LMODE

---------- ---------- ---------- ----------

         1         11        327          6

         9         30        336          6

         5         37        315          6

通過xid擷取相應事務對於undo段的undo header資訊

alter system dump undo header '_SYSSMU9$';

alter system dump undo header '_SYSSMU1$';

alter system dump undo header '_SYSSMU5$';

 

Undo Segment:  _SYSSMU9$ (9)

index  state cflags  wrap#    uel         scn           dba            parent-xid    nub     stmt_num    cmt

  ------------------------------------------------------------------------------------------------

0x1e   10    0x80  0x0150  0x0002  0x0000.000c6202  0x0080015f  0x0000.000.00000000  0x00000001   0x00000000  0

 

Undo Segment:  _SYSSMU1$ (1)

index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt

  ------------------------------------------------------------------------------------------------

0x0b   10    0x80  0x0147  0x0000  0x0000.000c61c3  0x0080000d  0x0000.000.00000000  0x00000001   0x00000000  0

 

Undo Segment:  _SYSSMU5$ (5)

index  state cflags  wrap#    uel        scn            dba            parent-xid    nub     stmt_num    cmt

  ------------------------------------------------------------------------------------------------

0x25   10    0x80  0x013b  0x0002  0x0000.000c61b8  0x00800a05  0x0000.000.00000000  0x00000001   0x00000000  0

4.5.1 資料區塊地址

1. DBA

DBA(Data Block Address)一般指絕對資料區塊地址

如Undo資料區塊地址:

 dba (file#, block#): 2,0x0000001f(10進位31)

 

如ITL表中XID對應undo資料區塊地址

v$transaction表中ubablk=351

 

TRN table中相應事務ID對應dba(0x0080015f)換算為10進位:351;

2. rdba

Rdba(Tablespace relative database block address)是相對資料區塊地址,

rdba: 0x010000fb (4/251)  fb換算為10進位為251

如果資料檔案超過>=1024即2的10次方的話,僅用絕對dba在內部沒辦法表示的,內部一般是用rdba來表示,它限定了某個資料檔案。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.