关于快转储我们需要注意的区域主要是:块转储ITL,FLAG区域和数据区域
下面我们就这个做个实验:
SQL> insert into emp values(5236,'weibin',563220,to_date('2009-05-04 12:20:24','yyyy-mm-dd hh24:mi:ss'));
已创建 1 行。
SQL> insert into emp values(236,'weibin',2530,to_date('2012-05-04 12:20:24','yyyy-mm-dd hh24:mi:ss'));
已创建 1 行。
查询对象在内存中存储的数据块
SQL> select a.object_name, a.object_type, b.FILE#,b.BLOCK# from v$bh b, all_objects a where a.owner = 'SYS' and a.object_name = 'EMP' and a.object_id = b.OBJD;
OBJECT_NAME OBJECT_TYPE FILE# BLOCK#
------------------------------ ------------------- ---------- ----------
EMP TABLE 5 1234
EMP TABLE 5 1233
也可以通过dba_extents来查找
SQL> select header_file,header_block,blocks from dba_segments where wner = 'SYS' and segment_name = 'EMP';
HEADER_FILE HEADER_BLOCK BLOCKS
----------- ------------ ----------
5 1233 8
转储数据块信息
SQL> alter system dump datafile 5 block min 1233 block max 1234;
系统已更改。
SQL> select spid from v$process where addr = (
2 select paddr from v$session where sid = (
3 select distinct sid from v$mystat));
SPID
------------
2896
然后查看跟踪日志如下:
alter system dump datafile 5 minblock 1233 maxblock 1234
KGX cleanup...
KGX Atomic Operation Log 2EF16FA0
Mutex 2EE69554(140, 0) idn 0 oper EXAM
Cursor Parent uid 140 efd 5 whr 26 slp 0
oper=DEFAULT pt1=00000000 pt2=00000000 pt3=00000000
pt4=00000000 u41=0 stt=0
**********************************************************
Block header dump: 0x014004d2
Object id on Block? Y
seg/obj: 0xe040 csc: 0x00.75d123 itc: 2 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.02e.0000169e 0x018003e3.04cc.04 ---- 2 fsc 0x0000.00000000
0x02 0x0006.00a.00001620 0x01800103.02fd.2a --U- 2 fsc 0x0000.007ec96c
data_block_dump,data header at 0x8ee225c
===============
tsiz: 0x1fa0
hsiz: 0x1e
pbl: 0x08ee225c
bdba: 0x014004d2
76543210
flag=--------
ntab=1
nrow=6
frre=-1
fsbo=0x1e
fseo=0x1e75
avsp=0x1f11
tosp=0x1f11
0xe:pti[0] nrow=6 offs=0
0x12:pri[0] offs=0x1f31
0x14:pri[1] offs=0x1f52
0x16:pri[2] offs=0x1f23
0x18:pri[3] offs=0x1f14
0x1a:pri[4] offs=0x1e8f
0x1c:pri[5] offs=0x1e75
block_row_dump:
tab 0, row 0, @0x1f31
tl: 16 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 03
col 1: [ 6] 78 7a 78 7a 78 7a
col 2: [ 2] c2 29
tab 0, row 1, @0x1f52
tl: 15 fb: --H-FL-- lb: 0x0 cc: 3
col 0: [ 2] c1 04
col 1: [ 5] 64 78 7a 61 61
col 2: [ 2] c2 15
tab 0, row 2, @0x1f23
tl: 14 fb: --H-FL-- lb: 0x2 cc: 3
col 0: [ 2] c1 02
col 1: [ 4] 64 61 64 61
col 2: [ 2] c2 33
tab 0, row 3, @0x1f14
tl: 15 fb: --H-FL-- lb: 0x2 cc: 3
col 0: [ 2] c1 02
col 1: [ 5] 64 78 78 78 78
col 2: [ 2] c2 0b
tab 0, row 4, @0x1e8f
tl: 27 fb: --H-FL-- lb: 0x1 cc: 4
col 0: [ 3] c2 35 25
col 1: [ 6] 77 65 69 62 69 6e
col 2: [ 4] c3 39 21 15
col 3: [ 7] 78 6d 05 04 0d 15 19
tab 0, row 5, @0x1e75
tl: 26 fb: --H-FL-- lb: 0x1 cc: 4
col 0: [ 3] c2 03 25
col 1: [ 6] 77 65 69 62 69 6e
col 2: [ 3] c2 1a 1f
col 3: [ 7] 78 70 05 04 0d 15 19
end_of_block_dump
End dump data blocks tsn: 0 file#: 5 minblk 1233 maxblk 1234
查看跟踪日志详细介绍下块转储的3个重点区域
1、ITL区域
块转储的一个关键区域是事务列表(ITL),以下显示2个ITL槽,XID是事务ID,UBA是撤销块地址,LOCK表示锁定的记录数(这个示例中两个事务槽都锁定了2条记录),Scn/Fsc指的是提交信息的SCN或SFC(Free Space Credit),FSC指的是事务提交之后在块中恢复的字节总数,是用16进制表示的。
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.02e.0000169e 0x018003e3.04cc.04 ---- 2 fsc 0x0000.00000000
0x02 0x0006.00a.00001620 0x01800103.02fd.2a --U- 2 fsc 0x0000.007ec96c
2、FLAG区域
FLAG区域是一个数据位,说明了事务的状态(CBUT)
---- 事务是活动的,或者在块清除前提交了事务。
C--- 事务已经被提交并且清除了行锁定。
B--- 撤销块地址(UBA)包含块的撤消。
--U- 事务已经提交(SCN是最大值),但是没有发生块清除(快速提交)。
---T 当块清除的SCN被记录时,该事务仍然是活动的。
C-U- 块被延迟清除,回滚段的信息已经被改写。SCN将显示为最小的SCN,由回滚段重新生成。
3、数据区域
数据区域的第一个部分(头区域)
tab 0, row 4, @0x1e8f
tl: 27 fb: --H-FL-- lb: 0x1 cc: 4
数据部分如下:
col 0: [ 3] c2 35 25
col 1: [ 6] 77 65 69 62 69 6e
col 2: [ 4] c3 39 21 15
col 3: [ 7] 78 6d 05 04 0d 15 19
快转储区域EMP.ID输出
col 0: [ 3] c2 35 25
前面我们插入的ID是5236,数据部分均是16进制表示
35转换成十进制为53 - 1 = 52
25转换成十进制为37 - 1 = 36
C2:number in the thousands(c2 is exponent)
col 1: [ 6] 77 65 69 62 69 6e表示的是emp.name值,通过以下查询我们就可以知道。
SQL> select dump(name,16), id, name from emp
2 where dump(name,16) like '%77,65,69,62,69,6e';
DUMP(NAME,16)
------------------------------------------------------------
ID NAME
---------- --------------------
Typ=1 Len=6: 77,65,69,62,69,6e
5236 weibin
Typ=1 Len=6: 77,65,69,62,69,6e
236 weibin
COL2也是number型,和COL一样,不再重复解释。
col 3: [ 7] 78 6d 05 04 0d 15 19
这里表示的是我们插入ID为5236行的hr_date,下面就date类型的字段做个详解:
我们插入的hr_date值为2009-05-04 12:20:24
78转换成十进制为120 - 100 = 20
6d转换成十进制为109 - 100 = 09
05转换成十进制为5 (month)
04转换成十进制为4 (day)
0d 15 19这是时 分 秒,转换成十进制在减去1即得到的时间
0d转换成十进制为13 - 1 = 12
15转换成十进制为21 - 1 = 20
19转换成十进制为25 - 1 = 24
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25964700/viewspace-708297/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25964700/viewspace-708297/