Chinaunix首页 | 论坛 | 博客
  • 博客访问: 211230
  • 博文数量: 28
  • 博客积分: 715
  • 博客等级: 上士
  • 技术积分: 348
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-28 00:31
文章分类
文章存档

2012年(28)

我的朋友

分类: Oracle

2012-03-13 22:18:45

 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转换为物理地址有更方便的方法.
然后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的工具就可以用上了。  

我们来个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内部的奥秘.

阅读(2082) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~