在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的時間,單位為秒。每次使用者執行一個新的語句後,該欄位復位為0,重新開始記數。可以透過該欄位來獲得一個連線使用者最後一次運算元據庫後的空閒時間。推薦使用這種方法來釋放INACTIVE狀態的會話。具體程式碼如下所示:
set sqlblanklines on
CREATE OR REPLACE PROCEDURE P_kill_session_LHR AS
-----------------------------------------------------------------------------------
-- Created on 2013-06-25 12:05:07 by lhr
--Changed on 2015-08-05 12:05:07 by lhr
-- function: 殺掉10個小時之前的會話 ,告警日誌中會記錄被殺掉的會話資訊
-----------------------------------------------------------------------------------
BEGIN
-- IF to_char(SYSDATE, 'HH24') >= '20' OR
-- TO_CHAR(SYSDATE, 'HH24') <= '08' THEN
FOR cur IN (SELECT A.USERNAME,
A.LOGON_TIME,
A.STATUS,
A.SID,
A.SERIAL#,
A.MACHINE,
A.OSUSER,
'ALTER SYSTEM DISCONNECT SESSION ''' || a.SID || ',' ||
a.serial# || ',@' || a.INST_ID || ''' IMMEDIATE' kill_session
FROM gv$session A
WHERE A.STATUS IN ('INACTIVE')
AND A.USERNAME IS NOT NULL
AND A.LAST_CALL_ET >= 60 * 60 * 10) LOOP
BEGIN
EXECUTE IMMEDIATE cur.kill_session;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
-- END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END P_kill_session_LHR;
/
BEGIN
--DBMS_SCHEDULER.drop_job('JOB_P_kill_session_LHR');
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'JOB_P_kill_session_LHR',
JOB_TYPE => 'STORED_PROCEDURE',
JOB_ACTION => 'P_kill_session_LHR',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=60',
ENABLED => TRUE,
START_DATE => SYSDATE,
COMMENTS => '刪除--每60分鐘檢查一次');
END;
/
About Me
.............................................................................................................................................
● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除
● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文部落格園地址:http://www.cnblogs.com/lhrbest
● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● DBA寶典今日頭條號地址:
.............................................................................................................................................
● QQ群號:230161599(滿)、618766405
● 微信群:可加我微信,我拉大家進群,非誠勿擾
● 聯絡我請加QQ好友(646634621),註明新增緣由
● 於 2018-05-01 06:00 ~ 2018-05-31 24:00 在魔都完成
● 最新修改時間:2018-05-01 06:00 ~ 2018-05-31 24:00
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
.............................................................................................................................................
● 小麥苗的微店:
● 小麥苗出版的資料庫類叢書:http://blog.itpub.net/26736162/viewspace-2142121/
● 小麥苗OCP、OCM、高可用網路班:http://blog.itpub.net/26736162/viewspace-2148098/
.............................................................................................................................................
使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。
小麥苗的微信公眾號 小麥苗的DBA寶典QQ群2 《DBA筆試面試寶典》讀者群 小麥苗的微店
.............................................................................................................................................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2154547/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫會話數量過多,定期清理inactive會話資料庫會話
- Oracle:select 或 inactive 會話語句產生鎖?Oracle會話
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- ?ORACLE會話超時Oracle會話
- oracle的會話如何自殺?Oracle會話
- 如何直觀的在JavaScript中管理狀態JavaScript
- 在Oracle中,如何定時刪除歸檔日誌檔案?Oracle
- 在Linux中,如何檢視網路介面的狀態?Linux
- 大話狀態協程
- Postgresqlddl在事務中可以回滾,truncate時relfilenode在當前會話會改變SQL會話
- 【架構設計】無狀態狀態機在程式碼中的實踐架構
- 在Linux中,程序狀態有哪些?Linux
- 在Docker中,如何清理批次後臺停止的容器?Docker
- javascript中如何設定滑鼠的形狀JavaScript
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- Oracle buffer狀態深入剖析Oracle
- 佔用磁碟100%?Apache DolphinScheduler 日誌如何定時清理!Apache
- Flutter 中如何保持Tabbar和TabbarView的狀態?FluttertabBarView
- 即時通訊發展前景怎麼樣?現在狀態是如何
- Oracle阻塞會話查詢Oracle會話
- Zustand:狀態持久化在專案中的應用持久化
- Oracle SCN健康狀態檢查Oracle
- oracle的adr清理incidentOracleIDE
- Oracle DG 管理Broker配置成員的狀態Oracle
- git實戰-linux定時監控github更新狀態(二)LinuxGithub
- 「譯」有限狀態機在 CSS 動畫中的應用CSS動畫
- 在Oracle SQL中設定每週的起始日期IOOracleSQL
- win10狀態列網速工具如何顯示_win10狀態列實時顯示網速怎麼設定Win10
- 在GI安裝完成後檢視叢集狀態時發現,磁碟組狀態不對
- Linux中如何檢視日誌命令中的響應狀態?Linux
- GPUDepthStencilState物件設定depthStencil狀態GPU物件
- oracle rac的scan監聽狀態Not All Endpoints RegisteredOracle
- PDM系統在技術狀態管理中的應用研究
- SQLServer會話KILL不掉,一直處於KILLED/ROLLBACK狀態情形淺析SQLServer會話
- 死鎖避免中的安全狀態和不安全狀態
- Oracle定時任務Oracle
- Blazor中的無狀態元件Blazor元件
- React Native 中的狀態列React Native