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

网友投稿 233 2022-09-14

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转换为物理地址有更方便的方法见 ​​​  然后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内部的奥秘叻。

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

请大家持续关注。

如果没有那句“三十而立”,三十岁的男人正可以轻轻松松

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:私域流量之后应该怎么玩?
下一篇:以前做过的Oralce培训,咨询和支持服务的项目列表
相关文章

 发表评论

暂时没有评论,来抢沙发吧~