oracle 12.2 pdb sqlplus 连接正常, sqldeveloper plsql 连接 hang住
select event.count(*) from v$session where wait_class#<>6 group by event ; event count(*) -------------------------------------------------- cursor:mutex S 2 cursor:mutex X 31
原因: _cursor_obsolete_threshold 12.2 以前默认值为1024 , 12.2 后的默认值为8192 参考文档(2298504.1 )
set linesize 200 col parameter for a35 col "session value" for a15 col "instance value" for a15 col KSPPDESC for a50 SELECT a.ksppinm "parameter",b.ksppstvl "session value",c.ksppstvl "instance value",a.KSPPDESC FROM x$ksppi a, x$ksppcv b, x$ksppsv c WHERE a.indx = b.indx AND a.indx = c.indx AND a.ksppinm LIKE '_cursor_obsolete_threshold';
解决办法:
1. 修改 _cursor_obsolete_threshold 修改1024 或100
再重启数据库
Alter system set "_cursor_obsolete_threshold"=1024 scope=spfile
2. 临时解决方案:
alter system flush shared_pool ;
alter system flush shared_pool ;
3. 通过SQLID 找到内存区域,并清理,(参考文档 2542447.1)
SQL> select address,hash_value,version_count from v$sqlarea where sql_id='a9x5sbz88kmfh'; ADDRESS HASH_VALUE VERSION_COUNT ---------------- ---------- ------------- 000000006BFFAC00 3498659280 2 SQL> exec dbms_shared_pool.purge('<address,hash_value>','C'); Ex: SQL> exec dbms_shared_pool.purge('000000006BFFAC00,3498659280','C'); PL/SQL procedure successfully completed.