怎么获得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)