ITPub博客

首页 > Linux操作系统 > Linux操作系统 > dump 转储文件内容

dump 转储文件内容

原创 Linux操作系统 作者:xz43 时间:2011-01-18 13:38:08 0 删除 编辑
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’;
 
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-684096/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 数据库优化流程
请登录后发表评论 登录
全部评论
鱼儿的学习空间

注册时间:2010-11-16

  • 博文量
    433
  • 访问量
    1863720