[20241114]建立完善ext_kglob.sh指令碼.txt
--//以前考慮使用管道問題,我考慮複雜了,看了gdb文件,實際上gdb -ex引數支援在命令列加入執行命令。
--//選擇使用mmon後臺程序,改寫如下:
$ cat ext_kglob.sh
#/bin/bash
# extrace object string from object handle address
# arg1=address arg2=offset (default 1c8) arg3=length (default 1)
offset=${2:-1c8}
length=${3:-1}
gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/${length}s 0x${1}+0x${offset}" -ex "quit" | grep "^0x" | grep -v "^0x0"
--//21c下偏移在0x1c8,11g下偏移在1a8,根據環境需要修改。
--//該工具僅僅建議在測試環境學習使用。
--//簡單驗證看看:
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.
$ ext_kglob.sh 0000000062B283D0
0x62b28598: "select * from dept where deptno=40"
--//如果你不確定定位偏移或者不對,可以透過簡單的方法執行確定:
$ ext_kglob.sh 0000000062B283D0 0 816 | grep -i select
0x62b28598: "select * from dept where deptno=40"
--//21c下偏移在0x1c8,11g下偏移在1a8,根據環境需要修改。
--//0x62b28598-0x0000000062B283D0 = 0x1c8
--//看看錶dept物件。
$ sql_idz.sh 'DEPT.SCOTT.BOOK01P\x1\0\0\0' 3
sql_text = DEPT.SCOTT.BOOK01P\x1\0\0\0
full_hash_value(16) = 05DB243908B3C797B99628590EDB820C or 05db243908b3c797b99628590edb820c
xxxxx_matching_signature(10) = -5073823567219817972 or 13372920506489733644
hash_value(10) = 249266700 or hash_value(16) = 0EDB820C or 0edb820c
sql_id(16) = B99628590EDB820C or b99628590edb820c
sql_id(32) = bm5j8b47dr0hc
sql_id(32) = bm5j8b47dr0hc
sql_id(32) = bm5j8b47dr0hc
SYS@book> @ sharepool/shp4p '' 249266700
SYS@book> @ pr
==============================
HANDLE_TYPE : parent handle address
KGLHDADR : 0000000062B02760
KGLHDPAR : 0000000062B02760
C40 : DEPT.SCOTT
KGLHDLMD : 0
KGLHDPMD : 0
KGLHDIVC : 0
KGLOBHD0 : 0000000062B02070
KGLOBHD6 : 00
KGLOBHS0 : 4064
KGLOBHS6 : 0
KGLOBT16 : 0
N0_6_16 : 4064
N20 : 4064
KGLNAHSH : 249266700
KGLOBT03 :
KGLOBT09 : 0
PL/SQL procedure successfully completed.
$ ext_kglob.sh 0000000062B02760
0x62b02928: "DEPTSCOTTBOOK01P\030F\260b"
--//後面取到一些亂碼是正常的。
--//順便SQL測試中間出現\0會是怎麼情況。
$ echo -e "select 'A\0' from dual;" >| gg1.txt
$ xxd -c 16 gg1.txt
0000000: 7365 6c65 6374 2027 4100 2720 6672 6f6d select 'A.' from
0000010: 2064 7561 6c3b 0a dual;.
SCOTT@book01p> set echo on
SCOTT@book01p> @ gg1.txt;
SCOTT@book01p> select 'A
2 ;
ERROR:
ORA-01756: quoted string not properly terminated
--//sqlplus在讀取到chr(0)時中斷了,變成不正確的sql語句,無法測試。
$ ext_kglob.sh 00000000623AF968
0x623afb30: "select 'A\001' from dual"
--//換成\01的測試結果。
[20241114]建立完善ext_kglob.sh指令碼.txt
相關文章
- [20230210]建立完善swcnm.sql指令碼.txtSQL指令碼
- [20230203]建立完善sp1x.sql指令碼.txtSQL指令碼
- [20230302]建立完善tpt o2.sql指令碼.txtSQL指令碼
- [20210506]完善tix指令碼.txt指令碼
- [20201202]完善sosi指令碼.txt指令碼
- [20210623]完善清除aud指令碼.txt指令碼
- [20231117]完善ashtt.sql指令碼.txtSQL指令碼
- [20230203]完善awr.sql指令碼.txtSQL指令碼
- [20230123]完善curheapz.sql指令碼.txtSQL指令碼
- [20221101]完善descz.sql指令碼.txtSQL指令碼
- [20221101]完善gts.sql指令碼.txtSQL指令碼
- [20221012]完善spsw.sql指令碼.txtSQL指令碼
- [20221010]完善descz.sql指令碼.txtSQL指令碼
- [20211122]完善descx.sql指令碼.txtSQL指令碼
- [20211230]完善sql_id指令碼.txtSQL指令碼
- [20210125]完善hide.sql指令碼.txtIDESQL指令碼
- [20210407]完善ti.sql指令碼.txtSQL指令碼
- [20230414]完善seg2.sql指令碼.txtSQL指令碼
- [20221208]完善bind_cap.sql指令碼.txtSQL指令碼
- [20220510]完善tpt expandz.sql指令碼.txtSQL指令碼
- [20220311]完善ash_wait_chains指令碼.txtAI指令碼
- [20220217]完善tpt gts.sql指令碼.txtSQL指令碼
- [20211129]完善tpt killi.sql指令碼.txtSQL指令碼
- [20191111]完善bind_cap.sql指令碼.txtSQL指令碼
- [20220309]完善shp4.sql指令碼.txtSQL指令碼
- [20211202]完善d_buffer.sql指令碼.txtSQL指令碼
- [20211129]完善tpt tablist.sql指令碼.txtSQL指令碼
- [20211130]完善tpt t.sql指令碼.txtSQL指令碼
- [20211126]完善tpt pr.sql指令碼.txtSQL指令碼
- [20231025]完善tpt的trans.sql指令碼.txtSQL指令碼
- [20221208]完善bind_cap_awr.sql指令碼.txtSQL指令碼
- [20220823]完善tpt的ashtop.sql指令碼.txtSQL指令碼
- [20220111]完善tpt ashash_index_helper指令碼.txtIndex指令碼
- [20220323]完善tpt get_trace.sql指令碼.txtSQL指令碼
- [20211111]補充完善ash_wait_chains指令碼.txtAI指令碼
- [20220129]完善tpt ash ash_index_helperx指令碼.txtIndex指令碼
- [20190416]完善shared latch測試指令碼2.txt指令碼
- [20190510]快速建立執行指令碼.txt指令碼