标签:rap lan dba === 存储 begin ddr cin seo
以emp表为例
SYS@ prod>select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
得到文件号和块号
SYS@ prod>select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from scott.emp where rownum= 1; DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ------------------------------------ ------------------------------------ 4 151
转储块
SYS@ prod>alter system dump datafile 4 block 151; System altered.
trace文件
SYS@ prod>oradebug setmypid Statement processed. SYS@ prod>oradebug tracefile_name /u01/diag/rdbms/prod/prod/trace/prod_ora_3890.trc
分析块
Block dump from disk: buffer tsn: 4 rdba: 0x01000097 (4/151) scn: 0x0000.00104463 seq: 0x01 flg: 0x04 tail: 0x44630601 frmt: 0x02 chkval: 0x47ea type: 0x06=trans data Hex dump of block: st=0, typ_found=1
数据块头
Block header dump: 0x01000097 Object id on Block? Y seg/obj: 0x11ddd csc: 0x00.f587b itc: 2 flg: E typ: 1 - DATA brn: 0 bdba: 0x1000090 ver: 0x01 opc: 0 inc: 0 exflg: 0
事物槽
Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0001.010.00000198 0x00c15ab0.0061.12 C--- 0 scn 0x0000.000b6f31 0x02 0x000b.019.0000000a 0x0180000c.0003.23 ---- 4 fsc 0x0000.00000000
每条记录中的行级锁对应Itl条目lb,对应于Itl列表中的序号,即那个事务在该记录上产生的锁。对于Oracle来说,对于一个事务,可以是快速提交、也可以是延迟提交,目的都是为了提高提交的速度。提交以后,oracle需要对ITL事务槽、每一行的锁定标记进行清除。如果是快速提交,那么在提交的时候,会将事务表和每一个数据块的ITL槽进行清除。但是锁定标记可能没有清除,等下次用到的时候再进行清除。如果是延迟提交,那么在提交的时候,只是将事务表进行清除,并没有对ITL事务槽进行清除,每一行的锁定标记也没有清除。因此C和U的情况特别多。块清除的过程并不包括每个行的锁定标记的清除,主要指的是ITL的清除。
注意:
1、事务槽中首先记录的是Xid和Uba,只有在提交以后,当对这个数据块进行cleanout的时候,才会更新Flag和Scn。因此Oracle总是以事务表中对这个数据块的Scn以及Flag为准。
2、一个事务开始以后,在一个数据块上得到一个事务槽,那么在这个事务提交以前,这个事务槽会一直占用,直到这个事务提交释放这个事务槽。
3、只有在已经提交以后,这个itl事务槽中的scn才会有数值。
4、事务是否已经提交、事务对应的SCN,这些信息都是以回滚段事务表中的为主,事务槽中的不准确
5、事务槽中的事务id和uba地址是准确的
6、事务槽1中的事务id和回滚段中的事务id肯定不是一样的,不同回滚段中的事务id也一定不一样。
尾区储存着数据块的描述信息
bdba: 0x01000097 data_block_dump,data header at 0x4d0664 =============== tsiz: 0x1f98 hsiz: 0x2e pbl: 0x004d0664 76543210 flag=-------- ntab=1 nrow=14 frre=-1 fsbo=0x2e fseo=0x1aa7 avsp=0x1d32 tosp=0x1d32
0xe:pti[0] nrow=14 offs=0 --该块有3条记录 0x12:pri[0] offs=0x1b2a --第1条记录在偏移量为0x1b2a的地方,下边以此类推。 0x14:pri[1] offs=0x1aa7 0x16:pri[2] offs=0x1b7b 0x18:pri[3] offs=0x1ba6 0x1a:pri[4] offs=0x1bcf 0x1c:pri[5] offs=0x1bfc 0x1e:pri[6] offs=0x1c25 0x20:pri[7] offs=0x1c4e 0x22:pri[8] offs=0x1c76 0x24:pri[9] offs=0x1c9c 0x26:pri[10] offs=0x1cc7 0x28:pri[11] offs=0x1ced 0x2a:pri[12] offs=0x1d13 0x2c:pri[13] offs=0x1d3a block_row_dump: tab 0, row 0, @0x1b2a tl: 38 fb: --H-FL-- lb: 0x2 cc: 8 --lb: 0x2说明事物在该数据行上的锁还没清除,并且该锁指向02号事物槽。(此前对改行进行了更新,并且未提交) col 0: [ 3] c2 4a 46 col 1: [ 5] 53 4d 49 54 48 col 2: [ 5] 43 4c 45 52 4b col 3: [ 3] c2 50 03 col 4: [ 7] 77 b4 0c 11 01 01 01 col 5: [ 2] c2 15 col 6: *NULL* col 7: [ 2] c1 15 tab 0, row 4, @0x1bcf tl: 45 fb: --H-FL-- lb: 0x0 cc: 8 --lb: 0x0说明事物在该数据行上的锁已经被清除。(此前对该行进行了更新,并且已经提交) col 0: [ 3] c2 4d 37 col 1: [ 6] 4d 41 52 54 49 4e col 2: [ 8] 53 41 4c 45 53 4d 41 4e col 3: [ 3] c2 4d 63 col 4: [ 7] 77 b5 09 1c 01 01 01 col 5: [ 3] c2 0d 33 col 6: [ 2] c2 0f col 7: [ 2] c1 1f
tl --表示Row Size(number of bytes plus data)
fb --标志位
K- Cluster key
H- head of row piece
D- Deleted row
F- first data piece
L- last data piece
P- First column cintinues from previous row
N- Last column cintinues in next piece
当我们delete一行数据的时候,数据并不是物理的被删除,而是把该行标记为删除,这个时候fb应该是--HDFL-- 而不是原来的--H-FL-- 。
Lb --表示lock byte,表示锁定该行的这个事务在itl的入口
Cc --表示number of columns in this Row piece。
验证数据
SYS@ prod>select dump(7369,16) from dual; DUMP(7369,16) --------------------- Typ=2 Len=3: c2,4a,46 SYS@ prod>select dump(‘SMITH‘,16) from dual; DUMP(‘SMITH‘,16) ---------------------------- Typ=96 Len=5: 53,4d,49,54,48
标签:rap lan dba === 存储 begin ddr cin seo
原文地址:https://www.cnblogs.com/zhaochunyi/p/10940628.html