转储数据块玩玩

关于快转储我们需要注意的区域主要是:块转储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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值