14.oracle的dump理解十四 窥视内存
欢迎转载,转载请标明出处: http://blog.csdn.net/notbaron/article/details/51284582
需要检查特定位置内存的内容,特定变量的内容。
例如想知道SGA中,变量kcbnhb的内容(kcb是buffer cache,nhb是哈希桶的数字)
查看如下:
SQL> oradebug dumpvar sga kcbnhb
ub8 kcbnhb_ [14C2B8FA0, 14C2B8FA8) =00020000 00000000
查看会话某个变量的值:
SQL> oradebug dumpvar uga ugauso_p
qolprm ugauso_p [026FC2990, 026FC29B4) =00000000 00000000 00000000 00000000 000
00000 00000000 00000000 00000000 00000000
SQL> alter session setuse_stored_outlines=rule_based;
会话已更改。
SQL> oradebug dumpvar uga ugauso_p
qolprm ugauso_p [026FC2990, 026FC29B4) =00000001 5552000A 425F454C 44455341 000
00000 00000000 00000000 00000000 00000000
查找SGA中的变量名字,可以查询结构x$ksmfsv,如下:
SQL> select * from x$ksmfsv where ksmfsnam like'kcbn%';
ADDR INDX INST_ID CON_ID KSMFSNAM KSMFSTYP KSMFSADR KSMFSSIZ
000000014A13F3A0 4413 1 0 kcbnbh_ sword 000000014C2B4800 4
…………..
可以根据地址来查看变量值:
SQL> oradebug peek 0x000000014C2B4800 4
[14C2B4800, 14C2B4804) = 0000A870
第二个参数 4 表示显示的字节数。
如果知道内存地址,可以直接查看,命令如下:
SQL> select * from x$ksmmem whereaddr=hextoraw('14C2B4800');
如果使用x$ksmem进行查看没有映射的地址,会话会报错ORA-03113。