[20241113]建立显示某个内存段的通用脚本disp_addr.sh.txt --//该工具仅仅建议在测试环境学习使用。 $ cat disp_addr.sh #/bin/bash # display address information # arg1=address arg2=offset arg3=length arg4=format offset=${2:-0} length=${3:-8} format=${4-wx} if [ "$format" == "s" ] ; then len=1 fi if [ "$format" == "S" ] ; then format="s" fi gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/${length}${format} 0x${1}+0x${offset}" -ex "quit" | grep "^0x" | grep -v "^0x0" --//简单介绍正常wx格式显示。如果以字符串输出,输入s(小写)时,长度等于1.输入S(大写),改成小写,不修改length值。 SCOTT@book01p> select * from dept where deptno=40; DEPTNO DNAME LOC ---------- ------------------------------ ------------- 40 OPERATIONS BOSTON SCOTT@book01p> @ hash HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- --------------- ---------- ------------------- ----------- 3912471479 14ymr4znm74xr 0 103351 2852011669 e93393b7 2024-11-14 09:18:39 16777216 SYS@book> @ sharepool/shp4p 14ymr4znm74xr 0 SYS@book> @ pr ============================== HANDLE_TYPE : parent handle address KGLHDADR : 0000000062B283D0 KGLHDPAR : 0000000062B283D0 C40 : select * from dept where deptno=40 KGLHDLMD : 0 KGLHDPMD : 0 KGLHDIVC : 0 KGLOBHD0 : 0000000062B28210 KGLOBHD6 : 00 KGLOBHS0 : 4064 KGLOBHS6 : 0 KGLOBT16 : 0 N0_6_16 : 4064 N20 : 4064 KGLNAHSH : 3912471479 KGLOBT03 : 14ymr4znm74xr KGLOBT09 : 65535 PL/SQL procedure successfully completed. --//KGLHDPAR : 0000000062B283D0 $ ./disp_addr.sh 0000000062B283D0 1c8 1 s 0x62b28598: "select * from dept where deptno=40" --//如果不知道偏移可以这样写。 SYS@book> @ fchaz 0000000062B283D0 LOC KSMCHPTR KSMCHIDX KSMCHDUR KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR KSMCHPTR_BEGIN KSMCHPTR_END+1 --- ---------------- ---------- ---------- ---------------- ---------- -------- ---------- ---------------- ---------------- ----------------- SGA 0000000062B283A0 1 1 KGLHD 816 recr 80 00 0000000062B283A0 0000000062B286D0 --//该chunk占用818字节。 $ ./disp_addr.sh 0000000062B283D0 0 816 S | grep -i select 0x62b28598: "select * from dept where deptno=40" --//0x62b28598-0x0000000062B283D0 = 0x1c8,偏移在0x1c8位置。 --//带入816越界没有问题。 --//前面@hash的输出KGL_BUCKET=103351 SYS@book> oradebug setmypid Statement processed. SYS@book> oradebug dump library_cache 4; Statement processed. SYS@book> @ t TRACEFILE -------------------------------------------------------------------------------- /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3719.trc $ grep 103351 /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_3719.trc Bucket: #=103351 Mutex=0x7309f5c0(639950127104, 11, 0, 6) --//mutex地址在0x7309f5c0。 $ ./disp_addr.sh 7309f5c0 0 6 wx 0x7309f5c0: 0x00000000 0x00000000 0x0000000b 0x00000000 0x7309f5d0: 0x000193b7 0x00000000 --//gets=0xb. --//0x000193b7 = 103351,等于KGL_BUCKET值。 $ ./disp_addr.sh 7309f5b0 0 8 wx 0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000 0x7309f5c0: 0x00000000 0x00000000 0x0000000c 0x00000000 --//0x62b283d0就是该sql语句父游标句柄地址。 SCOTT@book01p> select * from dept where deptno=40; DEPTNO DNAME LOC ---------- ------------------------------ ------------- 40 OPERATIONS BOSTON $ ./disp_addr.sh 7309f5b0 0 12 wx 0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000 0x7309f5c0: 0x00000000 0x00000000 0x0000000d 0x00000000 0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000 --//gets=0xd.增加1. --//每执行1次查看1次。 $ ./disp_addr.sh 7309f5b0 0 12 wx 0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000 0x7309f5c0: 0x00000000 0x00000000 0x0000000e 0x00000000 0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000 $ ./disp_addr.sh 7309f5b0 0 12 0x7309f5b0: 0x62b283d0 0x00000000 0x62b283d0 0x00000000 0x7309f5c0: 0x00000000 0x00000000 0x0000000e 0x00000000 0x7309f5d0: 0x000193b7 0x00000000 0x62820b38 0x00000000 --//光标缓存后gets不在增加。
[20241113]建立显示某个内存段的通用脚本disp_addr.sh.txt
来源:这里教程网
时间:2026-03-03 20:49:33
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- OPatch安装补丁将Oracle 19.3升级到19.23
OPatch安装补丁将Oracle 19.3升级到19.23
26-03-03 - Oracle数据库如何模拟ORA-600 [4193]错误?如何解决?
Oracle数据库如何模拟ORA-600 [4193]错误?如何解决?
26-03-03 - shutdown abort关库,真的有可能起不来吗?
shutdown abort关库,真的有可能起不来吗?
26-03-03 - 又是windown服务器断电引起的ora-00333
又是windown服务器断电引起的ora-00333
26-03-03 - 同事不小心drop column了一个列,真的凉凉了吗?
同事不小心drop column了一个列,真的凉凉了吗?
26-03-03 - 数据库数据恢复—Oracle数据库数据恢复案例
数据库数据恢复—Oracle数据库数据恢复案例
26-03-03 - 企业数据管理是否“镜花水月”
企业数据管理是否“镜花水月”
26-03-03 - Oracle自动处理表空间不足脚本
Oracle自动处理表空间不足脚本
26-03-03 - 如何一键完成20个Oracle实例运维脚本部署
如何一键完成20个Oracle实例运维脚本部署
26-03-03 - 03 高效调优:Oracle内存体系的精细化管理实践
03 高效调优:Oracle内存体系的精细化管理实践
26-03-03
