ITPub博客

首页 > 数据库 > Oracle > [20241114]建立完善mod_addr.sh脚本.txt

[20241114]建立完善mod_addr.sh脚本.txt

原创 Oracle 作者:lfree 时间:2024-11-16 21:05:32 0 删除 编辑

[20241114]建立完善mod_addr.sh脚本.txt

--//写一个简单修改内存地址相应值的gdb命令,主要gdb操作不支持rlwrap历史命令列表,这样操作快一些。

 $ cat mod_addr.sh
#/bin/bash
# modify address value
# arg1=address arg2=offset (default 0) arg3=value (default 0)

offset=${2:-0}
value=${3:-0}
gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *(  int *)(0x${1}+0x${offset})=0x${value}"  -ex "x /wx 0x${1}+0x${offset}"  -ex "quit" |  grep "^0x" | grep -v "^0x0"

--//简单测试:
SCOTT@book01p> alter session set session_cached_cursors=0;
Session altered.
--//这样每次都会软解析。

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> 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 7309f5b0 0 12 wx
0x7309f5b0:     0x62b283d0      0x00000000      0x62b283d0      0x00000000
0x7309f5c0:     0x00000000      0x00000000      0x00000001      0x00000000
                                                ~~~~~~~~~~
0x7309f5d0:     0x000193b7      0x00000000      0x62820b38      0x00000000
--//修改下划线值。

$ ./mod_addr.sh  7309f5c8 0 0
0x7309f5c8:     0x00000000

$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0:     0x62b283d0      0x00000000      0x62b283d0      0x00000000
0x7309f5c0:     0x00000000      0x00000000      0x00000000      0x00000000
0x7309f5d0:     0x000193b7      0x00000000      0x62820b38      0x00000000

$ ./mod_addr.sh  7309f5c0 4 1
0x7309f5c4:     0x00000001

$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0:     0x62b283d0      0x00000000      0x62b283d0      0x00000000
0x7309f5c0:     0x00000000      0x00000001      0x00000000      0x00000000
0x7309f5d0:     0x000193b7      0x00000000      0x62820b38      0x00000000
--//这样会出现阻塞。

$ ./mod_addr.sh  7309f5c4 0 0
0x7309f5c4:     0x00000000

$ disp_addr.sh 7309f5b0 0 12 wx
0x7309f5b0:     0x62b283d0      0x00000000      0x62b283d0      0x00000000
0x7309f5c0:     0x00000000      0x00000000      0x00000001      0x000001c6
                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~
0x7309f5d0:     0x000193b7      0x00000000      0x62820b38      0x00000000

--//gets数量+1,sleeps数量增加。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3050261/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969378