在Oracle中,如何定時清理INACTIVE狀態的會話?
GIF
GIF
今天小麥苗給大家分享的是在Oracle中,如何定時清理INACTIVE狀態的會話?
在Oracle中,如何定時清理INACTIVE狀態的會話?
一般情況下,少量的INACTVIE會話對資料庫並沒有什麼影響,但是,如果由於程序設計等某些原因導致資料庫出現大量的會話長時間處於INACTIVE狀態,那麼將會導致大量的系統資源被消耗,造成會話數超過系統SESSION的最大值,出現ORA-00018:maximum number of sessions exceeded錯誤。此時就需要清理那些長時間處於INACTIVE狀態的會話。人為定期檢查、殺掉這類會話肯定不太現實,要定期清理那些長時間處於INACTIVE的會話,可以使用如下幾種辦法:
1.sqlnet.ora文件里加上sqlnet.expire_time,單位為分鐘數。
2.設置用戶profile的IDLE_TIME參數,需要設置resource_limit為true,然後再設置IDLE_TIME參數,單位為分鐘:
alter system set resource_limit=true;
alter profile default limit idle_time 10;
方法2需要和方法1結合使用。
3.直接KILL掉INACTIVE的會話。V$SESSION視圖中的LAST_CALL_ET欄位表示用戶最後一條語句執行完畢後到sysdate的時間,單位為秒。每次用戶執行一個新的語句後,該欄位複位為,重新開始記數。可以通過該欄位來獲得一個連接用戶最後一次操作資料庫後的空閑時間。推薦使用這種方法來釋放INACTIVE狀態的會話。具體代碼如下所示:
DB筆試面試歷史連接
小麥苗課堂培訓認證
DBA寶典小程序
TAG:DBA寶典 |