怎么获得segment header 的dump?
来源于:
How to Obtain a Segment Header Dump (文档 ID 249814.1)
oracle数据库中的每个segment都有对应的segment header。
segment header通常是分配给这个segment的第一个extent中的第一个block。
segment header包括的信息有:extent信息,free lists的数量等等
在解决问题的过程中,可能需要对segment header进程dump
首先我们需要确定包含segment header的 file number 和block number,使用如下查询
select segment_name, header_file, header_block
from dba_segments
where owner = '<segment owner>' and segment_name = '<segment name>';
举例:
select segment_name, header_file, header_block
from dba_segments
where owner = 'SCOTT' and segment_name = 'EMP';
SEGMENT_NAME HEADER_FILE HEADER_BLOCK
-------------------- ----------- ------------
EMP 8 7411
现在,我们可以dump 这个block,比如说:
alter system dump datafile 8 block 7411;
上述命令会在USER_DUMP_DEST(11g之前)对应的目录下生成一个trace file,
从11g开始,该trace file会在 DIAGNOSTIC_DEST/rdbms/trace对应的目录下生成
如果segment type是 rollback,上面的语句同样适用:
select segment_name, header_file, header_block
from dba_segments
where segment_name = 'RBS01';
SEGMENT_NAME HEADER_FILE HEADER_BLOCK
-------------------- ----------- ------------
RBS01 2 514
To dump the rollback segment header for this rollback segment, you can use
either:
alter system dump datafile 2 block 514;
或者:
alter system dump undo header RBS01;
如果上面的步骤不能得到正确的dump信息,那么请使用SEGMENT_DUMP 这个PL/SQL 来做:
DBMS_SPACE_ADMIN.SEGMENT_DUMP (
tablespace_name IN VARCHAR2,
header_relative_file IN POSITIVE,
header_block IN POSITIVE,
dump_option IN POSITIVE DEFAULT SEGMENT_DUMP_EXTENT_MAP);
The IN parameter descriptions is as follows:
tablespace_name Name of tablespace in which segment resides.
header_relative_file Relative file number of segment header.
header_block Block number of segment header.
dump_option SEGMENT_DUMP_EXTENT_MAP.
SEGMENT_DUMP_BITMAP_SUMMARY.
Example:
EXECUTE DBMS_SPACE_ADMIN.SEGMENT_DUMP('USERS', 4, 33);
For more information about the procedure see the:
Oracle� Database PL/SQL Packages and Types Reference
10g Release 2 (10.2)