dump表的数据块
dump一个表的数据块要知道这个块所在的位置(数据文件的编号和数据块的编号)
例如我要dump表aes1的数据块
SQL> select a.file_id,a.block_id,a.bytes,a.blocks from dba_extents a
2 where a.owner='INSUR_CHANGDE' and a.segment_name='AES1';
FILE_ID BLOCK_ID BYTES BLOCKS
---------- ---------- ---------- ----------
5 57 65536 8
在这里,可以找到表aes1所在的文件编号是5,数据块是从64开始的。
例如我要dump表aes1中的特定数据块
SQL> select rowid,a.* from aes1 a where a.aae002 between '201201' and '201212';
ROWID AAE002
------------------ ------
AAAM7rAAFAAAABAAEI 201201
AAAM7rAAFAAAABAAEJ 201202
AAAM7rAAFAAAABAAEK 201203
AAAM7rAAFAAAABAAEL 201204
AAAM7rAAFAAAABAAEM 201205
AAAM7rAAFAAAABAAEN 201206
AAAM7rAAFAAAABAAEO 201207
AAAM7rAAFAAAABAAEP 201208
AAAM7rAAFAAAABAAEQ 201209
AAAM7rAAFAAAABAAER 201210
AAAM7rAAFAAAABAAES 201211
AAAM7rAAFAAAABAAET 201212
dump表aes1中aae002=201210这一条记录所在的数据块
SQL> SELECT dbms_rowid.rowid_object('AAAM7rAAFAAAABAAER') data_object_id#,
2 dbms_rowid.rowid_relative_fno('AAAM7rAAFAAAABAAER') rfile#,
3 dbms_rowid.rowid_block_number('AAAM7rAAFAAAABAAER') block#,
4 dbms_rowid.rowid_row_number('AAAM7rAAFAAAABAAER') row#
5 FROM dual;
DATA_OBJECT_ID# RFILE# BLOCK# ROW#
--------------- ---------- ---------- ----------
52971 5 64 273
执行dump命令
sql>alter system dump datafile 5 block min 57 block max 64;
打开所对应的trace文件看dump出来的内容
Start dump data blocks tsn: 6 file#: 5 minblk 57 maxblk 64
buffer tsn: 6 rdba: 0x01400039 (5/57)
scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
file#: 5 minblk 57 maxblk 64
可以看到我们dump的是文件编号是5,开始的block号为57(minblk),结束的block号为64(maxblk)。
可以从这里看出来
rdba: 0x01400039 (5/57)
rdba: relative database address of the block相对数据块地址0x01400039
可以看到(5/57),其实意思就是file# 5, block# 57。
scn: 0x0000.00b8ba77 seq: 0x05 flg: 0x04 tail: 0xba772005
SCN是最后变化的scn,在上面的例子中SCN是0x0000.00b8ba77。
tail是由SCN的后4位(ba77)、type(20)以及sequence(05)组成,即ba772005。
如果Tail与SCN的后4位(ba77)、type(20)以及sequence(05)这三个值不一致,
那么这个块就存在问题,需要恢复或者回滚。
frmt: 0x02 chkval: 0x0c48 type: 0x20=FIRST LEVEL BITMAP BLOCK
type具体意思可以看以下列表:
Type
Meaning
0x02
undo block
0x06
table or index data block
0x0e
undo segment header
0x10
data segment header block
0x17
bitmapped data segment header
Block header dump: 0x0140003c
Object id on Block? Y
seg/obj: 0xceeb csc: 0x00.b8ba76 itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0x1400039 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0008.02c.000010ee 0x00800c28.0310.0a --U- 127 fsc 0x0000.00b8ba78
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
“Object id on Block?”告知我们对象是否存在于SYS.OBJ$。从oracle 6开始,这里一般都是"Y"。
seg/obj的值是16进制的segment的对象编号。上面的数值是0xceeb,16进制是ceeb。
使用oracle转化为10进制数:
SQL> select to_number('ceeb','xxxx') from dual;
TO_NUMBER('CEEB','XXXX')
------------------------
52971
SQL> select owner,object_name from dba_objects where object_id=52971;
OWNER OBJECT_NAME
------------------------------ ------------------------------------------
INSUR_CHANGDE AES1
正如我们所想那样的信息。
csc值(Cleanout System Change number)与SCN值相同时该块会被清除。
itc值(Interested Transaction List Count)表示ITL的数量,在上面的例子中
itc的值为2表示有这个数据块上有两个相关的事务.这些事务id(Xid)显示有两
个事务.这些事务的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 0x0008.02c.000010ee 0x00800c28.0310.0a --U- 127 fsc 0x0000.00b8ba78
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文件号和数据块号)+回滚序列号+回滚记录号。
Flag:这里可以看下面列表:
Value
Meaning
----
transaction is active, or committed pending cleanout
C---
transaction has been committed and locks cleaned out
B---
this undo record contains the undo for this ITL entry
U---
transaction committed (maybe long ago); SCN is an upper bound
T---
transaction was still active at block cleanout SCN
data_block_dump,data header at 0x8628464
===============
tsiz: 0x1f98
hsiz: 0x110
pbl: 0x08628464
bdba: 0x0140003c
76543210
flag=--------
ntab=1
nrow=127
frre=-1
fsbo=0x110
fseo=0x1aa2
avsp=0x1992
tosp=0x1992
0xe:pti[0]
nrow=127
offs=0
0x12:pri[0]
offs=0x1aa2
0x14:pri[1]
offs=0x1aac
0x16:pri[2]
offs=0x1ab6
0x18:pri[3]
offs=0x1ac0
0x1a:pri[4]
offs=0x1aca
0x1c:pri[5]
offs=0x1ad4
.......
上面的tsiz值显示了在数据块中还可以使用的空间大小,将1f98
转换成十进制为8088字节
ntab的值告诉我们在这个数据块中存储有多少个表,除非这个数据块
属于一个集簇,否则这个值将会是1.
nrow的值告诉我有多少行数据存储在数据块中.上面显示这个数据块
有127行数据
从地址0xe开始,我们得到每一行的一个目录.我们可以看到第一行是从
数据块的偏移地址为'0x1aa2'.用这种方式可以快速找到数据行.
rowid是唯一指示每一行数据的它的格式是(对象编号+相关文件号+块号+行号)
block_row_dump:
tab 0, row 0, @0x1aa2
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 36
tab 0, row 1, @0x1aac
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 37
tab 0, row 2, @0x1ab6
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 38
tab 0, row 3, @0x1ac0
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 39
tab 0, row 4, @0x1aca
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
真实的行数据是从"block_row_dump"开始的.
然后给出一个行数据。只在这里显示的一行数据,其余的是类似的。
我们可以看到,这行属于表' 0 '(标签)我们的集簇。由于没有集簇在我们的例子中,
我们不会有一个以上的表,这个值将是零。我们还可以看到,这是行' 0 '和那一行的地址
这个地址必须与我们上面提到第一行数据是从数据块的偏移地址为'0x1aa2'
而在上面显示的row 0, @0x1aa2中的0x1aa2是相匹配的
t1说明这一行数据的总的字节数包含任何开销.我们可以看到这一行是有10字节
cc说明这一行有多少列,上面显示的是1列.
fb显示了行的标记.H是行头,F是行的第一个片段,L是行的最后一个片段.
如果显示为这一行的第一个和最后一个行片段说明行没有发生链接.因此
行头和行不会迁移
tab 0, row 0, @0x1aa2
tl: 10 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 6] 32 30 34 30 30 36
第一行第一列显示为 32 30 34 30 30 36是字符型
那进行转换
SQL> select to_number('3230','xxxx')from dual;
TO_NUMBER('3230','XXXX')
------------------------
12848
SQL> select to_number('3430','xxxx')from dual;
TO_NUMBER('3430','XXXX')
------------------------
13360
SQL> select to_number('3036','xxxx')from dual;
TO_NUMBER('3036','XXXX')
------------------------
12342
SQL>
SQL> select chr(12848)from dual;
CHR(12848)
----------
20
SQL> select chr(13360)from dual;
CHR(13360)
----------
40
SQL> select chr(12342)from dual;
CHR(12342)
----------
06
将CHR(12848)+CHR(13360)+CHR(12342=204006
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-747852/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26015009/viewspace-747852/