`
hanjian861202
  • 浏览: 159251 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Oracle:dump转储文件

阅读更多

转储文件内容1:数据文件

     

      转储数据文件、重做日志等文件的内容也是优化中经常用到的技术,因此DBA必须掌握。在优化项目中,有时候为了分析表和索引等的碎片、行迁移等情况,需要对数据文件进行转储。把数据库文件(数据文件、日志文件、控制文件等)的内容取出有助于对Oracle数据库内部结构展开分析。使用操作系统的转储工具可以导出数据库文件中的内容,不过这种方式相对比较麻烦。Oracle提供的ALTER SYSTEM DUMP 命令就可以把数据导出到Trace文件中,这一命令是以数据块为单位的。

      对于普通的数据文件,通过下面的命令可以导出数据文件中的数据块:

      ALTER SYSTEM DUMP DATAFILE [<file_id>|<file_name>] block <block_no>;

或者:

      ALTER SYSTEM DUMP <tablespace_name> block <block_no>;

或者:

     ALTER SYSTEM DUMP DATAFILE  [<file_id>|<file_name>] block min <block_no_min>  block max <block_no_max>;

      第一条命令导出一个数据块,第二条命令可以导出多个连续的数据块。以上命令不能转储 LMT的临时表空间文件。如果用ALTER SYSTEM DUMP DATAFILE命令去导出一个LMT的临时表空间文件,会报ORA-1205错误。

      要转储 LMT的临时文件,需要使用DUMP TEMPFILE命令:

      ALTER SYSTEM DUMP TEMPFILE 'E:\ORACLE\ORADATA\ORC9\sk_TEMP.DBF' BLOCK 1;   

 

转储文件内容2:转储对象的段头

 

比如:

  1.  SELECT SEGMENT_NAME, HEADER_FILE, HEADER_BLOCK   
  2.         FROM DBA_SEGMENTS    
  3.         WHERE OWNER = 'SCOTT' AND SEGMENT_NAME = 'EMP';   
  4.    
  5. SEGMENT_NAME         HEADER_FILE HEADER_BLOCK   
  6. --------------------------  ----------------- ---------------   
  7. EMP                            8                    7411  

 

 

      ALTER SYSTEM DUMP DATAFILE 8 BLOCK 7411;

 

      产生的Trace文件会存放在USER_DUMP_DEST参数指定的位置,如果没有设置这个参数,那么默认的位置是$Oracle_BASE/admin/<sid>/udump。 如果要转储回退段,那么可以这样操作:

  1.  SELECT SEGMENT_NAME, HEADER_FILE, HEADER_BLOCK    
  2.         FROM DBA_SEGMENTS    
  3.         WHERE SEGMENT_NAME = 'RBS01';   
  4.    
  5.    
  6. SEGMENT_NAME         HEADER_FILE HEADER_BLOCK   
  7. -------------------- ----------- ------------   
  8. RBS01                          2          514   
  9.    
  10.    
  11.   alter system dump datafile 2 block 514;  

     或者直接用下面的命令转储:

 

     ALTER SYSTEM DUMP UNDO HEADER RBS01;

      这个例子说明EMP的段头在8号文件的7411数据块。使用下面的命令,可以把段头转储出来;

      在Oracle中,每个段都包含一个段头。段头一般来说是某个段第一个扩展的第一个块,包含段的信息(段的扩展情况、FREE LIST的数量等)。要转储段头的信息,首先需要定位某个段的段头所在的位置。通过下面的查询可以查看到段头的相关信息:

 

     SELECT SEGMENT_NAME, HEADER_FILE, HEADER_BLOCK  FROM DBA_SEGMENTS  WHERE OWNER = '<SEGMENT OWNER>' AND SEGMENT_NAME = '<SEGMENT NAME>'; 

 

 

转储文件内容3:转储控制文件

     通过设置系统事件,可以把控制文件转储到Trace文件:

     ALTER SESSION SET EVENTS 'immediate trace name controlf level <level>'; 

 

     <level>的取值如下表所示。

 Level

转储的内容

1

文件头信息

2

文件头信息,数据库信息记录和检查点进程记录

3

所有的记录,仅仅包含最新和最老的循环使用类型的记录

4

类似3,不过包含4条最新的循环使用类型的记录

5+

类似3,循环使用类型的记录是每个级别的双倍

转储文件内容4:转储控制文件

      使用ALTER SYSTEM DUMP LOGFILE可以转储在线日志文件。也可以使用ALTER SESSION命令去转储重做日志头的信息。在数据库处于NOMOUNT、MOUNT或者OPEN状态时,就可以使用上面的命令。当操作系统相同的情况下,可以通过客户端去转储另外一个数据库的重做日志。重做日志的信息会被写入一个Trace文件。

      可以用下面的方法转储在线日志。

根据DBA(Data Block Address)转储记录。

根据RBA(Redo Block Address)转储记录。

根据时间点去转储记录。

根据层次和操作码转储记录。

转储文件头信息

转储整个重做日志文件

http://book.51cto.com/art/201006/204540.htm

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics