Dump内存和数据结构--通向Oracle内部结构的走道

 

 Oracle里有各种我们见不到的逻辑数据结构和内存结构,有时我们要更深入的研究故障和问题的时候,我们需要深入到这里的内部结构里进行研究。而这些文件或者结构信息都是二进制的,通过Oracle提供了dump的命令,让我们很方便的把这些逻辑结构和内存结构展现到我们的面前。 


1. Block dump 
可以dump出,数据块里的结构, 分析数据文件块,转储数据文件n的块m 
alter system dump datafile n block m 
数据文件的blockid和file id可以S从Rowid里得到, 

SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) R_FILE_NO,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_NO 
FROM test得到文件号和数据块号, 

Rowid转换为物理地址有更方便的方法见 http://www.inthirties.com/thread-558-1-1.html  

然后alter system dump datafile 6 block 149140 

2. Control dump 
可以dump出,Controlfile里的结构,控制文件是二进制的,通过dump把内部信息展示出来 
alter session set events 'immediate trace name controlf level 10' 

3. Logfile dump 
可以dump出日志文件,日志文件都是二进制的,通过这个我们可以看到文本的内部信息 
alter system dump logfile logfilename; 

4. Data File header dump 
可以dump出数据文件头, 数据文件头也是都是二进制的,通过这个我们可以看到文本的内部信息 
alter session set events 'immediate trace name FILE_HDRS level 10' 

5. Log File Header dump 
可以dump出日志文件头, 日志文件头也是都是二进制的,通过这个我们可以看到文本的内部信息 
alter session set events 'immediate trace name REDOHDR level 10' 

6. Process dump 
可以dump出进程状态 
alter session set events 'immediate trace name PROCESSSTATE level 10' 

7、Shared pool dump 
可以dump出Library Cache的详细情况 
alter session set events 'immediate trace name library_cache level 10' 

8 Buffer cache dump 
可以dump出分析data buffer的详细情况 
alter session set events 'immediate trace name buffers level level'; 
这里的level有很多值,分别可以转储buffer cache中的不同的内容。level的可选值包括: 
1 只转储buffer header. 
2 在level 1的基础上再转储数据块头。 
3 在level 2的基础上再转储数据块内容。 
4 转储buffer header和hash chain. 
5 在level 1的基础上再转储数据块头和hash chain. 
6 在level 2的基础上再转储数据块内容和hash chain. 
8 转储buffer header和hash chain以及users/waiters链表。 
9 在level 1的基础上再转储数据块头、hash chain以及users/waiters链表。 
10 在level 2的基础上再转储数据块内容、hash chain以及users/waiters链表。 

通过上面的dump的命令,Oracle可以把这些逻辑结构和内存已经进程的信息都dump到trc文件里。我们运行完命令以后可以打开trc文件看看我们的dump的内容 

以前有一个gettracename的工具就可以用上了。http://www.inthirties.com/thread-137-2-1.html  

我们来个buffer cache的dump看看 

现在有一个表test_redolog

 

SQL> select * from test_redolog;

        ID

----------

         1

         2

现在queyr了这个表,这个表有没有被load buffer cache里叻

 

查看一下

SQL> alter session set events 'immediate trace name buffers level 1'; 
Session altered 

SQL> select gettracename from dual; 
GETTRACENAME 
-------------------------------------------------------------------------------- 
F:/Synchrophy/Server/oracle/admin/ORA9i/udump/ora9i_ora_3764.trc

 

打开这个文件

查询出test_redolog的对象号

 

SQL> select object_id, object_name from dba_objects b where b.object_name like 'TEST_REDO%';

 

 OBJECT_ID OBJECT_NAME

---------- --------------------------------------------------------------------------------

     47469 TEST_REDOLOG

 

 

ObjectID是47469 我们找到其中文件的段落

 

BH (0x257DD040) file#: 14 rdba: 0x0381a5b2 (14/107954) class 1 ba: 0x251E0000

  set: 3 dbwrid: 0 obj: 47469 objn: 47469

  hash: [257dd1b8,17eb590c] lru: [257dd144,257dcfcc]

  ckptq: [NULL] fileq: [NULL]

  st: XCURRENT md: NULL rsop: 0x00000000 tch: 1

  flags: gotten_in_current_mode block_written_once redo_since_read

  LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [1] RRBA: [0x0.0.0]

BH (0x257DD1B8) file#: 14 rdba: 0x0381a5b2 (14/107954) class 1 ba: 0x251E4000

  set: 3 dbwrid: 0 obj: 47469 objn: 47469

  hash: [257dd3ec,257dd040] lru: [257dd2bc,257dd144]

  ckptq: [NULL] fileq: [NULL]

  st: CR md: NULL rsop: 0x00000000 tch: 0

  cr:[[scn: 0x0000.007bb261],[xid: 0x0000.000.00000000],[uba: 0x00000000.0000.00],[cls: 0x0000.007bb261],[sfl: 0x0]]

  flags: buffer_dirty gotten_in_current_mode block_written_once

          redo_since_read

BH (0x257DD3EC) file#: 14 rdba: 0x0381a5b2 (14/107954) class 1 ba: 0x251EA000

  set: 3 dbwrid: 0 obj: 47469 objn: 47469

  hash: [17eb590c,257dd1b8] lru: [257dd4f0,257dd378]

  ckptq: [NULL] fileq: [NULL]

  st: CR md: NULL rsop: 0x00000000 tch: 0

  cr:[[scn: 0x0000.007bb1e1],[xid: 0x0000.000.00000000],[uba: 0x00000000.0000.00],[cls: 0x0000.007bb1e1],[sfl: 0x0]]

  flags: buffer_dirty only_sequential_access redo_since_read

 

这块部分就是我们的buffer cache里有关TEST_REDOLOG这个表里的记录的信息了。

 

这样我们根本就看不见的内存里的信息,一下就一览无遗的展现在我们的眼前了,有了这个走道,我们就可以走进Oracle的内部结构了,探索Oracle内部的奥秘叻。

 

这篇文章的主要目的是给大家介绍有关dump的用法,旨在告诉大家如何通过上面的使用我们可以dump出Oracle实例的内部信息,由于篇幅有限,我们将在以后的文章里,进一步和大家一起来探讨DUMP出来的信息的奥秘。

 

请大家持续关注。

 




 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值