Oracle中DUMP的转储方法

什么是DUMP:

DUMP是一个动词,它代表一种操作,说的简单一点,拿内存举例,就是原封不动的把某一片内存给展现出来。拿跟踪举例,就是它原始的展示了Oracle处理某个问题的过程。

大家在学习研究ORACLE的过程中,为了更深入的了解内部的机制,免不了要经常DUMP来研究学习。

Oracle 11g的Trace文件存放路径:oracle\diag\rdbms\**\**\trace

1、DUMP出控制文件
alter system (session) set events 'immediate trace name controlf level 10'

—————————————————————————————

2、DUMP出日志文件分析
alter system dump logfile logfilename;

—————————————————————————————

3、DUMP出日志文件头分析
alter session set events 'immediate trace name REDOHDR level 10'

———————————————————————————

4、DUMP出LIBRARY CACHE
alter system (session) set events 'immediate trace name library_cache level 10'

—————————————————————————————

5、 DUMP出share_pool
alter system (session) set events 'immediate trace name heapdump level 10'

———————————————————————————

6、DUMP出所有数据文件头
alter system (session) set events 'immediate trace name file_hdrs level 10';

———————————————————————————

7、DUMP出数据文件(只能是alter system)

alter system dump datafile n block m

select file_id,block_id,blocks from dba_extents where segment_name='EMPLOYEES'
FILE_ID BLOCK_ID BLOCKS 
---------- ---------- ------------------ 
     5           81           8


SQL>alter system dump datafile 5 block 81;

System altered.
另外是做很具体的针对某行所在的BLOCK 并DUMP出来研究,可以用如下方法

1、取BLOCK号
select dbms_rowid.rowid_block_number(rowid) from wdjk1999;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
78

2、取文件号
select file_id from dba_data_files where tablespace_name='WDJK1999'

FILE_ID

----------
16

SQL>alter system dump datafile 16 block 78;

System altered.

—————————————————————————

8、DUMP出索引
SQL> select object_id from dba_objects where object_name=upper('index_name');
  
OBJECT_ID
----------
70591
SQL> alter session set events 'immediate trace name TREEDUMP level 70591';

—————————————————————————————

9、DUMP出回滚段信息
select xidusn,xidslot,xidsqn,ubafil,ubablk,ubasqn,ubarec from v$transaction;

XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC
----------- ------------ ------------ ---------- ------------ ------------ -------------
     1          31            442          2           21           242          52
dump对应的undo block
system dump datafile 2 block 21;
System altered.


——————————————————————————

10、 DUMP出系统状态分析 (只能是SYSTEM)
alter system set events 'immediate trace name systemdate level 10'

——————————————————————————

11、 DUMP出进程状态分析 
alter session set events 'immediate trace name PROCESSSTATE level 10'

附:

event的定义:event = event_name + action。

首先,这里的event name是一个event的名字或者是event的代码。如果event name不是“immediate”,那么oracle解析器会在event name table中找到这个event。关于immediate event,它是一个特殊的event,它显示一个立即的无条件的event,它不会等待其他人去提交它而是立即执行。

action是由一个action keyword和一个或者多个qualifier(值)组成。

action keyword是如下三个值:

crash:它会引起一个oracle crash,一般是为了测试recovery的时候才用它。

debugger:调用一个系统的debugger。(invokes a system debugger if any)

trace:is context specific or named context-independent ones。

crash和debugger这两个值一般是oracle的核心开发人员使用。我们这里只讨论trace的情况。

这里有必要解释一下<trace_name>,它就是你需要dump的“某个对象”的“trace id”,或者就是你想要做的“某种trace”。如你想dump内存中的library cache,就是想看看内存中library cache的trace,那么这里的<trace name>就是“library_cache”。

trace qualifiers的含义分别是:

“forever”:表示这个trace一旦设定,每当这个event发生的时候,就激活这个trace。

“off”:表示对这个event关闭这个trace。

“level <n>”:当event发生的时候,你想要trace的级别,每个trace的级别的取值是都是不一样的,它一个非负整数。通常情况下,它的值越大,就会有更多的内容显示,但是如果你是做某个块的dump,这里的level就是data block address(dba)。

综上所述,event可大概的如下表示为:

event_name CRASH    ....

event_name DEBUGGER ....

event_name TRACE    NAME trace_name|CONTEXT [ FOREVER|OFF|LEVEL <n> ]

这个里面“|”表示“或者”,“[]”表示出现一次或者多次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值