1。转储数据文件
在优化项目中,有时候为了分析表和索引等的碎片、行迁移等情况,需要对数据文件进行转储。把数据库文件(数据文件、日志文件、控制文件等)的内容取出有利于对Oracle数据库内部结构展开分析。
Oracle提供的ALTER SYSTEM DUMP命令就可以把数据导出到Trace文件中,这一命令是以数据块为单位的。
对于普通的数据文件,通过下面的命令可以导出数据文件中的数据块:
ALTER SYSTEM DUMP DATAFILE [| ] block ;
或者:
ALTER SYSTEM DUMP DATAFILE [| ] block min block max ;
第一条命令导出一个数据块,第二条命令可以导出多个连续的数据块。以上命令不能转储LMT的临时表空间文件,否则会报ORA-1205错误。
要转储LMT的临时文件,需要使用DUMP TEMPFILE命令:
SQL>ALTER SYSTEM DUMP TEMPFILE 'E:\ORACLE\ORADATA\ORC9\SK_TEMP.DBF' BLOCK 1;
System altered.
2。转储对象的段头
在Oracle中,每个段都包含一个段头。段头一般来说是某个段第一个扩展的第一个块,包含段的信息(段的扩展情况、FREE LIST的数量等)。要转储段头的信息,首先需要定位某个段的段头所在的位置。通过下面的查询可以查看到段头的相关信息:
select segment_name,header_file,header_block from dba_segments where wner='' and segment_name='';
比如:
SQL> select segment_name, header_file, header_block
2 from dba_segments
3 where wner = 'TEST'
4 and segment_name = 'T_SCHOOL';
SEGMENT_NAME HEADER_FILE HEADER_BLOCK
-------------------------------- ------------------- ------------
T_SCHOOL 5 4748
这个例子说明T_SCHOOL的段头在5号文件的4748数据块。再用ALTER SYSTEM DUMP 命令来转储该文件对应的block即可。
如果要转储回退段,那么可以这样操作:
select segment_name, header_file, header_block
from dba_segments
where segment_name = 'RBS01';
SEGMENT_NAME HEADER_FILE HEADER_BLOCK
-------------------------------- ------------------- ------------
RBS01 2 518
再用:
alter system dump datafile 2 block 518;
或者直接用下面的命令转储:
alter system dump undo header RBS01;
3。转储控制文件
通过设置系统事件,可以把控制文件转储到Trace文件:
ALTER SESSION SET EVENTS 'immediate trace name controlf level ';
的取值如下表所示。
Level 转储的内容
1 文件头信息
2 文件头信息,数据库信息记录和检查点进程记录
3 所有的记录,仅仅包含最新和最老的循环使用类型的记录
4 类似3,不过包含4条最新的循环使用类型的记录
5+ 类似3,循环使用类型的记录是每个级别的双倍
4。转储日志文件
使用ALTER SYSTEM DUMP LOGFILE可以转储在线日志文件。也可以使用ALTER SESSION命令去转储重做日志头的信息。在数据库处于NOMOUNT、MOUNT或者OPEN状态时,就可以使用上面的命令。在操作系统相同的情况下,可以通过客户端去转储另外一个数据库的重做日志。
可以用下面的方法转储在线日志。
a、根据DBA(Data Block Address)转储记录。
ALTER SYSTEM DUMP LOGFILE 'filename‘
DBA MIN fileno . blockno
DBA MAX fileno . blockno;
比如
ALTER SYSTEM DUMP LOGFILE ’uo1/oracle/v7323/dbs/arch1_2.dbf'
DBA MIN 5 . 31125
DBA MAX 5 . 31150;
这个命令转储5号文件的31125~31150块相关的记录。
b、根据RBA转储在线日志记录
ALTER SYSTEM DUMP LOGFILE 'filename‘ RBA MIN seqno . blockno
RBA MAX seqno . blockno
比如
ALTER SYSTEM DUMP LOGFILE ’uo1/oracle/v7323/dbs/arch1_2.dbf'
RBA MIN 2050 . 13255
RBA MAX 2050 . 15555;
c、根据时间点转储在线日志记录
ALTER SYSTEM DUMP LOGFILE 'filename‘
TIME MIN value
TIME MAX value;
比如
ALTER SYSTEM DUMP LOGFILE ’uo1/oracle/v7323/dbs/arch1_2.dbf'
TIME MIN 299425687
TIME MAX 299458808;
d、根据层次和操作代码转储记录
ALTER SYSTEM DUMP LOGFILE 'filename‘
LAYER value
OPCODE value;
e、转储文件头信息
ALTER SESSION SET EVENTS 'immediate trace name redohdr level 10';
f、转储整个重做日志
ALTER SYSTEM DUMP LOGFILE ‘filename’;