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

1、問題描述

遠程登錄數據庫時報錯:

出現問題後去數據庫告警文件 alert.log 中查看,發現報錯如下:

2、問題原因

錯誤信息一般在Oracle實例在創建一些輔助後臺進程(如mmon的子進程m00x或者子進程W00x等)時出現進程啓動失敗時出現,而造成該錯誤的可能性有多種,包括Oracle實例資源不足、操作系統資源不足等等。其中較爲常見的是數據庫在實際運行過程中實例instance的process使用達到參數設定上限而導致問題出現

通過v$resource_limit視圖可以查詢實例生命週期內是否發生過process進程達到上限的情況

由於報錯無法登錄數據庫(sys as sysdba也無法登錄),所以需要先斷掉佔用的process,停掉幾個tomcat即可釋放連接,停掉後就可以連接了。

登錄數據庫後查詢v$resource_limit視圖,查詢結果如下:

通過查詢結果可以看到process的MAX_UTILIZATIOON最大使用數目曾經達到過LIMIT_VALUE限定的150,極有可能就是process總數達到上限數量導致數據庫創建新的後臺輔助進程失敗。

現在可以重新啓動 tomcat 服務,一個一個啓動,每啓動一個 tomcat 都查看一下process和session的值

select count(*) from v$process; //查詢process使用數目
select count(*) from v$session; //查詢session連接數目

如果發現 process 增長會達到上限數目,則說明確實是這個原因導致數據庫報錯,則需要修改process和session參數的上限值

3、解決方法

修改修改process和session參數的上限值

altert system set processes = 250 scope = spfile;
alter system set sessions = 380 scope = spfile;

PS:processes和sessions的值,oracle官方文檔要求:sessions=processes*1.5+5

修改後重啓oracle服務,啓動全部tomcat服務,重新查詢 process 和 session 的佔用情況,process 和 session 使用數目都小於最大限定值即可

ps:但是也有可能是數據庫某一時間突然process達到最大值,我遇見的情況就是,沒有修改參數,重啓tomcat後就可以正常使用了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章