最近遇到應用日志里報錯:ORA-02396: 超出最大空閑時間, 請重新連接(ORA-02396: exceeded maximum idle time),記錄一下處理方法。


出現這個問題的原因是數據庫對空閑的連接時間做了限制。

  1.SELECT name, value FROM gv$parameter WHERE name = 'resource_limit';   使用該sql查詢是否啟用了限制,如果結果是true,說明已啟用。

  2.select username,PROFILE from dba_users where username='?';     如果1中的結果是true,查詢相關的profile:問號的位置填寫連接數據庫的賬戶(username),注意大小寫。查詢出該賬戶關聯的profile,通常結果為“DEFAULT”.

  3.select RESOURCE_NAME,LIMIT from dba_profiles where profile='DEFAULT' and resource_name='IDLE_TIME';   如果2中執行的結果不是DEFAULT,那么修改sql中的DEFAULT為實際的profile值。

  4.根據3中的結果可以看到時間限制的值,這個值需要比應用使用的數據庫連接池的空閑時間要長。如果不想做限制,可以直接使用sql取消限制:alter profile default limit idle_time unlimited; 

  問題解決。

 

參考文檔:

  1.ORA-02396: exceeded maximum idle time — oracle-tech

  2.ORA-02396: exceeded maximum idle time, please connect again的原因_數據庫技術_Linux公社-Linux系統門戶網站 (linuxidc.com)

一般為了防止過多活動的session占用資源,可以對允許連接到數據庫的session個數,已連接到數據庫的session空閑時間等進行限制(當然也可以對嘗試連接次數等其它很多內容進行限制)。方式就是可以通過創建一個profile配置,然后將這個profile配置賦給每個用戶。

要使用這種限制的前提是將resource_limit這個參數設置為TRUE。

alter system set RESOURCE_LIMIT=true;

創建用戶時如果未指定具體profile,會有一個默認的profile,名稱是DEFAULT,如下所示:

SELECT * FROM dba_profiles WHERE PROFILE='DEFAULT';

ORA-02396: exceeded maximum idle time, please conn

這是這個名稱為DEFAULT的所有配置項參數。

其中IDLE_TIME就是一個session連上Oracle后不做任何事情,掛在那里的空閑時間。DEFAULT默認所有的參數都是UNLIMITED,也就是無限制。

但也可以對其進行修改。例如創建一個名稱為idletime_profile的profile,並指定其中idle_time參數值是1,單位是分鍾。

SQL> create profile idletime_profile limit idle_time 1;

Profile created.

並將該profile賦給用戶bisal

SQL> alter user bisal profile idletime_profile;

User altered.

這樣當用bisal登錄到Oracle后,持續1分鍾不干事,再次執行某個操作時就會報ORA-02396: exceeded maximum idle time, please connect agai


免責聲明!

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



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