ORA-12516: 監聽程序找不到符合協議堆棧要求的可用處理程序


產生問題的原因是:會話連接數過多,需要kill掉,釋放無用連接

 步驟:

       1. 查看當前總會話數和進程數,這兩個視圖就是跟會話及進程有關的重要視圖啦,信息都是從這里面取的。

           1)  select count(*) from v$session;

             2)  select count(*) from v$process;

 

2.查詢那些應用的連接數此時是多少

select b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE , b.PROGRAM order by count(*) desc;

 

3.查詢會話狀態,並殺會話

   select saddr,sid,serial#,paddr,username,status from v$session where username is not null;

  alter system kill session 'sid,serial#';

被kill掉的session,狀態會被標記為killed,Oracle會在該用戶下一次touch時清除該進程.

 

 

inactive 處於此狀態的會話表示不是正在執行的,比如select語句已經完成。我一開始以為,只要是inactive狀態的會話,就是該殺,為什么不釋放呢。其實,inactive對數據庫本身沒有什么影響,但是如果程序沒有及時commit,那么就會造成占用過多會話。解決inactive的方法最好的就是在oracle中直接設置超時時間,也是有兩種方法,區別暫時還不清楚:

1.修改sqlnet.ora文件,新增expire_time=x(單位是分鍾)

我的sqlnet.ora位置在D:/oracle/ora92/network/admin

2.通過ALTER PROFILE DEFAULT LIMIT IDLE_TIME 10; 命令修改,記得重啟下oracle。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM