buffer tsn: 4 rdba: 0x010072a4 (4/29348)
scn: 0x0000.00e66a1e seq: 0x02 flg: 0x06 tail: 0x6a1e0602
frmt: 0x02 chkval: 0x4590 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
结果我们推导的和dump的内容是一样的,不过这里得到的4是rfile#,相对文件号,而相对文件号是不能超过1023,所以,如果你想根据这个地址来dump数据文件块的话,最好还是核对一下v$datafile:
select file# from v$datafile where rfile# = 4 and ts# = <:dbfile_in_ts>
表空间的ts#可以通过如下sql得到:
select ta.tablespace_name, da.TS#
from dba_tablespaces ta, dba_data_files df, v$datafile da
where ta.tablespace_name = df.tablespace_name
and da.NAME = df.file_name
例如:
SQL> select file# from v$datafile where rfile# = 4 and ts# = 4;
FILE#
----------
4
SQL>
如果数据文件数大于1023个,这里file# 就不是4了,应该是个绝对文件号了,这就是file#和rfile#的区别。如果dump数据块,要用绝对文件号的,例如:
Alter system dump datafile 4 block 29348;
也可以通过dba_segments,如
SQL> select header_file,header_block from dba_segments where owner='SKATE' and segment_name='TAB2';
HEADER_FILE HEADER_BLOCK
----------- ------------
4 29347
这里段头占有一个block,后面存储的就是数据,所以存储数据的块,应该是29348
-----end-----