[20240824]利用gdb抽取kglnaobj内容.txt --//上午测试跟踪library cache lock library cache pin使用gdb,利用handle addreess+0x1c8偏移可以取出kglnaobj内容. --//灵光一现,是否可以直接通过gdb抽取kglnaobj内容,新的gdb版本支持管道操作,在测试环境尝试一下. --//千万不要在生产系统做这样的测试!!!! 1.环境: SCOTT@book01p> @ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.测试: SCOTT@book01p> select * from dept,emp where dept.deptno=emp.deptno; ... --//输出略. SCOTT@book01p> @ hash HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- --------------- ---------- ------------------- ----------- 1395733917 cxuafv59m2dcx 0 79261 844388907 5331359d 2024-08-24 15:05:27 16777216 SYS@book> @sharepool/shp4x cxuafv59m2dcx 0 HANDLE_TYPE KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09 ---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ---------- child handle address 0000000066074120 0000000069ED8BB0 select * from dept,emp where dept.deptno 0 0 0 000000006CDABDA8 0000000066155518 8128 28320 3316 39764 39764 1395733917 cxuafv59m2dcx 0 parent handle address 0000000069ED8BB0 0000000069ED8BB0 select * from dept,emp where dept.deptno 0 0 0 0000000069470058 00 4064 0 0 4064 4064 1395733917 cxuafv59m2dcx 65535 --//parent handle address = 0000000069ED8BB0 $ echo x/s 0x0000000069ED8BB0+0x1c8 | gdb -q (gdb) 0x69ed8d78: <Address 0x69ed8d78 out of bounds> (gdb) quit $ echo x/s 0x0000000069ED8BB0+0x1c8 | gdb -q $(which oracle) Reading symbols from /u01/app/oracle/product/21.0.0/dbhome_1/bin/oracle...done. (gdb) 0x69ed8d78: <Address 0x69ed8d78 out of bounds> (gdb) quit --//以上两个方式都报错,<Address 0x69ed8d78 out of bounds>。以为gdb没有指定程序防蚊范围. --//取出当前会话进程号看看。 SCOTT@book01p> @ spid SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50 ---------- ---------- ------------------------ --------- ------------------------------ ------- ---------- -------------------------------------------------- 403 52380 3539 DEDICATED 3541 95 3 alter system kill session '403,52380' immediate; $ echo x/s 0x0000000069ED8BB0+0x1c8 | gdb -q -p 3541 | grep "^(gdb)" (gdb) 0x69ed8d78: "select * from dept,emp where dept.deptno=emp.deptno" (gdb) quit --//OK,没有问题. --//换1个进程ora_dbw0_book看看. $ ps -ef | grep ora_dbw0_boo[k] oracle 3066 1 0 15:03 ? 00:00:00 ora_dbw0_book $ echo x/s 0x0000000069ED8BB0+0x1c8 | gdb -q -p 3066 | grep "^(gdb)" (gdb) 0x69ed8d78: "select * from dept,emp where dept.deptno=emp.deptno" (gdb) quit --//OK没有问题.这样只要知道ora_dbw0_book进程就可以实现这个功能. 3.写脚本: $ cat ./ext_kglobj.sh #/bin/bash echo x/s 0x${1}+0x1c8 | gdb -q -p $(pgrep ora_dbw0_${ORACLE_SID}) | grep '^(gdb)' $ source ./ext_kglobj.sh 0000000069ED8BB0 (gdb) 0x69ed8d78: "select * from dept,emp where dept.deptno=emp.deptno" (gdb) quit 4.继续尝试: SCOTT@book01p> select * from dept 2 ,emp 3 where dept.deptno=emp.deptno; SCOTT@book01p> @ hash HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- --------------- ---------- ------------------- ----------- 1207303074 b7fucgx3zbyx2 0 129954 844388907 47f5fba2 2024-08-24 15:21:20 16777216 SYS@book> @sharepool/shp4x b7fucgx3zbyx2 0 HANDLE_TYPE KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09 ---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ---------- child handle address 0000000069F2E688 0000000069F2FDE8 select * from dept ,emp where dept.deptn 0 0 0 0000000069F2E4C8 0000000069F2F410 8080 28320 3317 39717 39717 1207303074 b7fucgx3zbyx2 0 parent handle address 0000000069F2FDE8 0000000069F2FDE8 select * from dept ,emp where dept.deptn 0 0 0 0000000069F2FC28 00 4064 0 0 4064 4064 1207303074 b7fucgx3zbyx2 65535 $ source ./ext_kglobj.sh 0000000069F2FDE8 (gdb) 0x69f2ffb0: "select * from dept\n,emp\nwhere dept.deptno=emp.deptno" (gdb) quit --//测试超长文本看看: $ cat aa.txt select /*+ 012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 .... 012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 */ sysdate from dual; SCOTT@book01p> @ aa.txt SYSDATE ------------------- 2024-08-24 15:27:19 SCOTT@book01p> @ hash HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- --------------- ---------- ------------------- ----------- 1191379888 47ug7hp3h60xh 0 66480 1388734953 470303b0 2024-08-24 15:27:18 16777216 SYS@book> @sharepool/shp4x 47ug7hp3h60xh 0 HANDLE_TYPE KGLHDADR KGLHDPAR C40 KGLHDLMD KGLHDPMD KGLHDIVC KGLOBHD0 KGLOBHD6 KGLOBHS0 KGLOBHS6 KGLOBT16 N0_6_16 N20 KGLNAHSH KGLOBT03 KGLOBT09 ---------------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ---------- child handle address 00000000633E9680 000000006A5194D0 select /*+ 01234567890012345678900123456 0 0 0 0000000064E23A70 0000000069F7D948 4032 12128 8084 24244 24244 1191379888 47ug7hp3h60xh 0 parent handle address 000000006A5194D0 000000006A5194D0 select /*+ 01234567890012345678900123456 0 0 0 0000000063DBB9E0 00 4064 0 0 4064 4064 1191379888 47ug7hp3h60xh 65535 */ $ source ./ext_kglobj.sh 000000006A5194D0 (gdb) 0x6a519698: "select /*+\n012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890\n01234567890012345678900123456789001234567890012345678900"... (gdb) quit --//超长sql语句分成多个chunk,仅仅取开头部分. 4.取一个表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 sql_id(32) = bm5j8b47dr0hc sql_id(32) = bm5j8b47dr0hc sql_id(32) = bm5j8b47dr0hc SYS@book> @ kglob 0 249266700 ============================== INST_ID : 1 OWNER : SCOTT NAME : DEPT DB_LINK : NAMESPACE : TABLE/PROCEDURE TYPE : TABLE NAMESPACE_NUM : 1 NAMESPACE_HEX : 1 SHARABLE_MEM : 4064 LOADS : 4 EXECUTIONS : 0 LOCKS : 0 PINS : 0 KEPT : NO CHILD_LATCH : 98828 INVALIDATIONS : 0 HASH_VALUE : 249266700 LOCK_MODE : NONE PIN_MODE : NONE STATUS : VALID TIMESTAMP : 2024-08-16/09:33:38 PREVIOUS_TIMESTAMP : LOCKED_TOTAL : 4 PINNED_TOTAL : 4 PROPERTY : FULL_HASH_VALUE : 05db243908b3c797b99628590edb820c CON_ID : 3 CON_NAME : BOOK01P ADDR : 0000000068FAC470 EDITION : SQL_ID : OBJECT_STR : DEPT.SCOTT.BOOK01P\x1\0\0\0 PL/SQL procedure successfully completed. --//ADDR: 0000000068FAC470 $ source ./ext_kglobj.sh 0000000068FAC470 (gdb) 0x68fac638: "DEPTSCOTTBOOK01PPj9n" (gdb) quit --//后面不对,没有限制的长度,前面部分正确没有问题。 --//最后还是提示不要在生产系统做这类尝试。
[20240824]利用gdb抽取kglnaobj内容.txt
来源:这里教程网
时间:2026-03-03 20:34:12
作者:
编辑推荐:
- [20240824]利用gdb抽取kglnaobj内容.txt03-03
- rac集群二几点重启ora.gipcd不能正常启动03-03
- [20240824]测试21c _column_tracking_level=17.txt03-03
- [20240823]查询namespace的方法.txt03-03
- ORA-00600: 内部错误代码, 参数: [13011]处理03-03
- [20240826]奇怪ORA-01031 insufficient privileges报错.txt03-03
- 超过100万行 存储过程的超复杂Oracle数据库,国产化怎么办?03-03
- 4家国产数据库上市公司半年报!最好的利润1个亿!最差的亏8000万!03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- rac集群二几点重启ora.gipcd不能正常启动
rac集群二几点重启ora.gipcd不能正常启动
26-03-03 - ORA-00600: 内部错误代码, 参数: [13011]处理
ORA-00600: 内部错误代码, 参数: [13011]处理
26-03-03 - 超过100万行 存储过程的超复杂Oracle数据库,国产化怎么办?
超过100万行 存储过程的超复杂Oracle数据库,国产化怎么办?
26-03-03 - 4家国产数据库上市公司半年报!最好的利润1个亿!最差的亏8000万!
4家国产数据库上市公司半年报!最好的利润1个亿!最差的亏8000万!
26-03-03 - PORCESS满 故障处理报告
PORCESS满 故障处理报告
26-03-03 - 无缝连接!YashanDB DBLink技术应用实践
无缝连接!YashanDB DBLink技术应用实践
26-03-03 - Oracle 数据库忘记密码,如何找回明文密码?
Oracle 数据库忘记密码,如何找回明文密码?
26-03-03 - Oracle 丢失Redo、Control、SYSAUX、USER文件,无备份,成功启库!
- 阿里财报透视:谁在投入?谁在收缩?
阿里财报透视:谁在投入?谁在收缩?
26-03-03 - 【YashanDB知识库】共享集群YAC换IP
【YashanDB知识库】共享集群YAC换IP
26-03-03
