ITPub博客

首页 > 数据库 > Oracle > dump表的数据块

dump表的数据块

原创 Oracle 作者:lllllcheng 时间:2016-03-04 17:42:35 0 删除 编辑
dump表的数据
dump一个表的数据块要知道这个块所在的位置(数据文件的编号和数据块的编号)

TEST@PROD2>select dbms_rowid.rowid_relative_fno(rowid) fno,dbms_rowid.rowid_block_number(rowid) bno,id,name from t1;  

       FNO      BNO          ID NAME
---------- ---------- ---------- ----------
     4      539           1 cheng
     4      539           1 zhuo

TEST@PROD2>alter system dump datafile 4 block 539;

System altered.


TEST@PROD2>select value from v$diag_info where name like '%Default Trace%';

VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/prod2/PROD2/trace/PROD2_ora_23959.trc

[oracle@enmo ~]$ more /u01/app/oracle/diag/rdbms/prod2/PROD2/trace/PROD2_ora_23959.trc

Trace file /u01/app/oracle/diag/rdbms/prod2/PROD2/trace/PROD2_ora_23959.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1
System name:    Linux
Node name:    enmo
Release:    3.8.13-16.2.1.el6uek.x86_64
Version:    #1 SMP Thu Nov 7 17:01:44 PST 2013
Machine:    x86_64
Instance name: PROD2
Redo thread mounted by this instance: 1
Oracle process number: 25
Unix process pid: 23959, image: oracle@enmo (TNS V1-V3)


*** 2016-03-04 17:22:57.841
*** SESSION ID:(40.419) 2016-03-04 17:22:57.841
*** CLIENT ID:() 2016-03-04 17:22:57.841
*** SERVICE NAME:(SYS$USERS) 2016-03-04 17:22:57.841
*** MODULE NAME:(SQL*Plus) 2016-03-04 17:22:57.841
*** ACTION NAME:() 2016-03-04 17:22:57.841
 
Start dump data blocks tsn: 4 file#:4 minblk 539 maxblk 539
可以看到我们dump的是文件编号是4,开始的block号为539(minblk),结束的block号为53(maxblk)。
可以从这里看出来


下面这部分主要是 buffer cache 里面的buffer的一些状态 比如在什么链表上之类的信息

Block dump from cache:
Dump of buffer cache at level 4 for tsn=4 rdba=16777755
BH (0x67fe3a40) file#: 4 rdba: 0x0100021b (4/539) class: 1 ba: 0x67d68000
  set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25
  dbwrid: 0 obj: 88633 objn: 88633 tsn: 4 afn: 4 hint: f
  hash: [0x687e5490,0x83d4e160] lru: [0x67fe3c68,0x67fe39f8]
  ckptq: [NULL] fileq: [NULL] objq: [0x66fec8b8,0x67fe3a20] objaq: [0x67fe4180,0x67fe3a30]
  st: XCURRENT md: NULL fpin: 'ktspbwh2: ktspfmdb' tch: 5
  flags: block_written_once redo_since_read
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
BH (0x687e53d8) file#: 4 rdba: 0x0100021b (4/539) class: 1 ba: 0x68592000
  set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25
  dbwrid: 0 obj: 88632 objn: 88632 tsn: 4 afn: 4 hint: f
  hash: [0x83d4e160,0x67fe3af8] lru: [0x687e5c18,0x687e5390]
  lru-flags: on_auxiliary_list
  ckptq: [NULL] fileq: [NULL] objq: [NULL] objaq: [NULL]
  st: FREE md: NULL fpin: 'ktspbwh2: ktspfmdb' tch: 0 lfb: 33
  flags:


下面是磁盘上块的数据,
有用的数据在底部

Block dump from disk:

buffer tsn: 4 rdba: 0x0100021b (4/539)

rdba: relative database address of the block相对数据块地址0x01400039
可以看到(4/539),其实意思就是file# 4, block# 539。

scn: 0x0000.0010f567 seq: 0x01 flg: 0x06 tail: 0xf5670601

SCN是最后变化的scn,在上面的例子中SCN是
0x0000.0010f567
tail是由SCN的后4位(f567)、type(06)以及sequence(01)组成,即0xf5670601。
如果Tail与SCN的后4位(f567)、type(06)以及sequence(01)这三个值不一致,
那么这个块就存在问题,需要恢复或者回滚。


frmt: 0x02 chkval: 0xb6dd type: 0x06=trans data

Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00007F6A58F66A00 to 0x00007F6A58F68A00
7F6A58F66A00 0000A206 0100021B 0010F567 06010000  [........g.......]
7F6A58F66A10 0000B6DD 00000001 00015A39 0010F562  [........9Z..b...]
7F6A58F66A20 00000000 00320002 01000218 000A0005  [......2.........]
7F6A58F66A30 000003A3 00C000C1 001500FB 00002002  [............. ..]
7F6A58F66A40 0010F567 00000000 00000000 00000000  [g...............]
7F6A58F66A50 00000000 00000000 00000000 00000000  [................]
7F6A58F66A60 00000000 00020100 0016FFFF 1F6B1F81  [..............k.]
7F6A58F66A70 00001F6B 1F8C0002 00001F81 00000000  [k...............]
7F6A58F66A80 00000000 00000000 00000000 00000000  [................]
        Repeat 250 times
7F6A58F67A30 00000000 00010000 00020001 00000000  [................]
7F6A58F67A40 00000000 00000000 00000000 00000000  [................]
        Repeat 249 times
7F6A58F689E0 00000000 02012C00 0402C102 6F75687A  [.....,......zhuo]
7F6A58F689F0 0202012C 630502C1 676E6568 F5670601  [,......cheng..g.]



dump出来的块头信息

Block header dump:  0x0100021b
 Object id on Block? Y
 seg/obj: 0x15a39  csc: 0x00.10f562  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x1000218 ver: 0x01 opc: 0
     inc: 0  exflg: 0
csc值(Cleanout System Change number)与SCN值相同时该快会被清除。
itc值(Interested Transaction List Count)表示ITL的数量,在上面的列子中itc的值为2 表示有这个数据块上相关的事物,这些事物id(xid)显示有2个事物。这些事物的id值与回滚段相关联被用来处理我们的事物
flag(flg)中"-"或者"O"表示是否在自由列表中,"0"则在,"-"则不在。估计E也是不在的意思。
如果在自由列表的话会出现:
fsl(ITL freelist slot)表示ITL自由列表的开始位置。
fnx(Next freelist block)表示segment自由列表中下一个block的RDBA地址。



事务信息
 Itl           Xid                             Uba                             Flag       Lck        Scn/Fsc
0x01   0x0005.00a.000003a3    0x00c000c1.00fb.15   --U-       2       fsc 0x0000.0010f567
0x02   0x0000.000.00000000   0x00000000.0000.00   ----        0       fsc 0x0000.00000000

Xid:事务id,在回滚段事务表中有一条记录和这个事务对应。
Xid组成:Undo Segment Number +Transaction Table Slot Number+ Wrap。
Uba:回滚段地址,该事务对应的回滚段地址。
Uba组成:回滚块地址(undo文件号和数据块号)+回滚序列号+回滚记录号。



bdba: 0x0100021b

data_block_dump,data header at 0x7f6a58f66a64
===============tsiz: 0x1f98
上面的tsiz值显示了在数据块中还可以使用的空间大小,将1f98
转换成十进制为8088字节

hsiz: 0x16 pbl: 0x7f6a58f66a64
     76543210
flag=--------

ntab=1
ntab的值告诉我们在这个数据块中存储有多少个表,除非这个数据块
属于一个集簇,否则这个值将会是1.

nrow=2
nrow的值告诉我有多少行数据存储在数据块中.上面显示这个数据块
有127行数据

frre=-1
fsbo=0x16
fseo=0x1f81

avsp=0x1f6b
tosp=0x1f6b
0xe:pti[0]    nrow=2    offs=0
0x12:pri[0]    offs=0x1f8c
0x14:pri[1]    offs=0x1f81
block_row_dump:
从地址0xe开始,我们得到每一行的一个目录.我们可以看到第一行是从
数据块的偏移地址为'0x1f8c'.用这种方式可以快速找到数据行.
rowid是唯一指示每一行数据的它的格式是(对象编号+相关文件号+块号+行号)


块中数据行信息

第一行
tab 0, row 0, @0x1f8c
tl: 12 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 02
col  1: [ 5]  63 68 65 6e 67
第二行
tab 0, row 1, @0x1f81
tl: 11 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 02
col  1: [ 4]  7a 68 75 6f
真实的行数据是从"block_row_dump"开始的.
然后给出一个行数据。只在这里显示的一行数据,其余的是类似的。
我们可以看到,这行属于表' 0 '(标签)我们的集簇。由于没有集簇在我们的例子中,
我们不会有一个以上的表,这个值将是零。我们还可以看到,这是行' 0 '和那一行的地址
这个地址必须与我们上面提到第一行数据是从数据块的偏移地址为'0x1f8c'
而在上面显示的row 0, @0x1f8c中的0x1f8c是相匹配的

t1说明这一行数据的总的字节数包含任何开销.我们可以看到这一行是有11字节
cc说明这一行有多少列,上面显示的是2列.
fb显示了行的标记.H是行头,F是行的第一个片段,L是行的最后一个片段.
如果显示为这一行的第一个和最后一个行片段说明行没有发生链接.因此
行头和行不会迁移


这些col后面的数据用函数转换一下就是表中的数据
end_of_block_dump
End dump data blocks tsn: 4 file#: 4 minblk 539 maxblk 539





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30606744/viewspace-2040176/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-12-02

  • 博文量
    41
  • 访问量
    119962