在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寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826
.............................................................................................................................................
● 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
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
.............................................................................................................................................
● 小麥苗的微店:https://weidian.com/s/793741433?wfr=c&ifr=shopdetail
● 小麥苗出版的資料庫類叢書: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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 定期清理inactive會話Oracle會話
- oracle中會話的狀態Oracle會話
- 資料庫會話數量過多,定期清理inactive會話資料庫會話
- Oracle會話超時退出設定Oracle會話
- 檢查Oracle的鎖狀態並清除問題會話Oracle會話
- 狀態為inactive的日誌一定歸檔了嗎?
- Oracle:select 或 inactive 會話語句產生鎖?Oracle會話
- 無狀態會話bean的疑問會話Bean
- ASP.Net Web 服務 – 如何使用會話狀態ASP.NETWeb會話
- Toad中發現blocking session, 狀態為inactiveBloCSession
- 如何直觀的在JavaScript中管理狀態JavaScript
- 無狀態會話ejb object的個人理解會話Object
- oracle redo各種狀態(inactive、active、current)損壞的處理方式Oracle Redo
- 關於有狀態和無狀態會話bean的解釋 (轉)會話Bean
- ?ORACLE會話超時Oracle會話
- oracle的會話如何自殺?Oracle會話
- 【故障-ORACLE】定時清理dba_recyclebinOracle
- [譯]ASP.NET Core 2.0 會話狀態ASP.NET會話
- 在Oracle中實現定時操作Oracle
- 用SQL Server來進行會話狀態管理SQLServer會話
- inactive狀態日誌組檔案損壞的恢復
- 在Oracle中,如何定時刪除歸檔日誌檔案?Oracle
- 【備份恢復】恢復inactive狀態的日誌檔案
- Postgresqlddl在事務中可以回滾,truncate時relfilenode在當前會話會改變SQL會話
- 在Docker中,如何清理批次後臺停止的容器?Docker
- 修改oracle會話時間表達方式Oracle會話
- 【架構設計】無狀態狀態機在程式碼中的實踐架構
- 自動清理Dead Connections And INACTIVE SessionsSession
- 設定文字的選中狀態背景顏色
- javascript中如何設定滑鼠的形狀JavaScript
- EJB技術規範中明確提到,在使用會話BEAN的時候……會話Bean
- Flutter 中如何保持Tabbar和TabbarView的狀態?FluttertabBarView
- 如何設定微軟拼音狀態條上的圖示微軟
- 使用Oracle PROFILE控制會話空閒時間Oracle會話
- Oracle LISTENER 中各種狀態資訊的含義Oracle
- 即時通訊發展前景怎麼樣?現在狀態是如何
- 使用AWK分析Oracle系統鎖定、Hang狀態Oracle
- 在RFT中如何等待瀏覽器處於Ready狀態?瀏覽器