[20250525]设置cursor_sharing=force下PLSQL语句的光标缓存问题2.txt --//测试cursor_sharing=force的情况下,PLSQL脚本SQL语句的光标缓存问题,补充一个测试。 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.测试脚本: $ cat loopf.txt set verify off DECLARE l_count PLS_INTEGER; l_count1 PLS_INTEGER; l_count2 PLS_INTEGER; BEGIN FOR i IN 1..&&1 LOOP select /*+ &2 */ count(*) into l_count from dept where deptno=10; select /*+ &2 */ count(*) into l_count1 from dept where deptno=20; select /*+ &2 */ count(*) into l_count2 from dept where deptno=30; select /*+ &2 */ count(*) into l_count from dept where deptno=40; select /*+ &2 */ count(*) into l_count from dept where deptno=41; select /*+ &2 */ count(*) into l_count from dept where deptno=42 ; END LOOP; END; / --//注意deptno=42结尾有许多空格。 3.测试: SCOTT@book01p> @ spid ============================== SID : 277 SERIAL# : 7336 PROCESS : 3461 SERVER : DEDICATED SPID : 3463 PID : 86 P_SERIAL# : 1 KILL_COMMAND : alter system kill session '277,7336' immediate; PL/SQL procedure successfully completed. SCOTT@book01p> alter session set cursor_sharing=force; Session altered. SCOTT@book01p> @ loopf.txt 1 AAAA PL/SQL procedure successfully completed. SYS@book> select * from gv$open_cursor where sid=277 and sql_text like '%AAAA%'; INST_ID SADDR SID USER_NAME ADDRESS HASH_VALUE SQL_ID SQL_TEXT LAST_SQL_ACTIVE_TIM CURSOR_TYPE CHILD_ADDRESS CON_ID ------- ---------------- --- --------- ---------------- ---------- ------------- ------------------------------------------------------ ------------------- -------------------- ---------------- ------ 1 000000007EA26FA8 277 SCOTT 0000000070A1EDE8 3002496477 bp4mb6ytgcxfx SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=41 2025-05-25 09:34:57 PL/SQL CURSOR CACHED 0000000070BBDED0 3 1 000000007EA26FA8 277 SCOTT 000000006FF93090 1353645033 cc05gmd8axyz9 SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=20 2025-05-25 09:34:57 PL/SQL CURSOR CACHED 0000000070B06350 3 1 000000007EA26FA8 277 SCOTT 000000006A9AB540 1123750091 5xx33jp1gq46b SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=42 2025-05-25 09:34:57 PL/SQL CURSOR CACHED 000000006A9F5690 3 1 000000007EA26FA8 277 SCOTT 000000006FE6A310 45577732 cdqsh1n1bfxh4 SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO= 10 2025-05-25 09:34:57 PL/SQL CURSOR CACHED 0000000070AA2338 3 1 000000007EA26FA8 277 SCOTT 0000000070B8FA90 4206597783 7dkzgc3xbr5nr SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=40 2025-05-25 09:34:57 PL/SQL CURSOR CACHED 0000000070D4CC68 3 1 000000007EA26FA8 277 SCOTT 000000006FFA0970 3194081461 13jgdsaz63n5p SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=30 2025-05-25 09:34:57 PL/SQL CURSOR CACHED 0000000070DB72D8 3 6 rows selected. SYS@book> select SQL_ID,sql_text,length(sql_text) from gv$open_cursor where sid=277 and sql_text like '%AAAA%'; SQL_ID SQL_TEXT LENGTH(SQL_TEXT) ------------- ------------------------------------------------------------ ---------------- bp4mb6ytgcxfx SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=41 53 cc05gmd8axyz9 SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=20 53 5xx33jp1gq46b SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=42 54 cdqsh1n1bfxh4 SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO= 10 53 7dkzgc3xbr5nr SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=40 53 13jgdsaz63n5p SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=30 53 6 rows selected. --//再次颠覆我以前的认知,全部sql语句除了做了格式化处理并且转换为大写外,并没有转换为设置cursor_sharing=force的情况。 $ sql_idz.sh "SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=42 \0" 3 sql_text = SELECT /*+ AAAA */ COUNT(*) FROM DEPT WHERE DEPTNO=42 \0 full_hash_value(16) = E5A980D7ED7FF1305EF4638D42FB10CB or e5a980d7ed7ff1305ef4638d42fb10cb xxxxx_matching_signature(10) = 6842203192247914699 or 25288947265957466315 hash_value(10) = 1123750091 or hash_value(16) = 42FB10CB or 42fb10cb sql_id(16) = 5EF4638D42FB10CB or 5ef4638d42fb10cb sql_id(32) = 5xx33jp1gq46b sql_id(32) = 5xx33jp1gq46b sql_id(32) = 5xx33jp1gq46b --//使用以前的写的sql_idz.sh脚本计算sql_id,可以发现计算结果一致。
[20250525]设置cursor_sharing=force下PLSQL语句的光标缓存问题2.txt
来源:这里教程网
时间:2026-03-03 21:59:53
作者:
编辑推荐:
- [20250525]设置cursor_sharing=force下PLSQL语句的光标缓存问题2.txt03-03
- 第41期【技术人的故事】数据库ACE专家是如何沦落为水果奸商的03-03
- [20250527]bash shell编程变量作用域问题.txt03-03
- [20250527]oracle如何实现字符串计算公式转换为数字.txt03-03
- [20250527]奇怪的sql macros.txt03-03
- 在Oceanbase桌面版体验OB自动分区表,小功能大作用!03-03
- 数据库管理-第323期 Oracle如何统计表数据量(20250509)03-03
- [20250506]drop table的恢复2.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 第41期【技术人的故事】数据库ACE专家是如何沦落为水果奸商的
第41期【技术人的故事】数据库ACE专家是如何沦落为水果奸商的
26-03-03 - 在Oceanbase桌面版体验OB自动分区表,小功能大作用!
在Oceanbase桌面版体验OB自动分区表,小功能大作用!
26-03-03 - 数据库管理-第323期 Oracle如何统计表数据量(20250509)
数据库管理-第323期 Oracle如何统计表数据量(20250509)
26-03-03 - INFO OGG-06441 不是告警而容易忽略的错误
INFO OGG-06441 不是告警而容易忽略的错误
26-03-03 - 小米没想到,自家车主不服管
小米没想到,自家车主不服管
26-03-03 - 聊了十年“社交梦”,支付宝终于打通了这个电话
聊了十年“社交梦”,支付宝终于打通了这个电话
26-03-03 - 中国最良心的两个企业家,联手了
中国最良心的两个企业家,联手了
26-03-03 - Oracle官方MySQL+APEX+AI限时免费预约流程大全
Oracle官方MySQL+APEX+AI限时免费预约流程大全
26-03-03 - 国产密码新时代!华测国密 SSL 证书解锁安全新高度
国产密码新时代!华测国密 SSL 证书解锁安全新高度
26-03-03 - 数据库管理-第325期 ADG Failover后该做啥(20250513)
