批次kill session實現指令碼
轉載在:%E6%89%B9%E9%87%8Fkill-session%E5%AE%9E%E7%8E%B0%E8%84%9A%E6%9C%AC.html
在很多使用,因為各種原因,我們需要定時批次的kill一部分session,用來釋放資料庫部分資源,這裡是因為bug導致temp不能正常釋放,也可能是因為bug導致pga不釋放,還有可能是因為太多inactive佔用資源等等.我這裡提供了兩種方法來實現該功能
儲存過程實現kill session
--建立記錄表
CREATE TABLE kill_session_record
(
kill_time DATE,
kill_statement VARCHAR2 (1000)
)
/
--建立kill session儲存過程
CREATE OR REPLACE PROCEDURE kill_inactive_session
IS
CURSOR c
IS
SELECT sid, serial#
FROM v$session s
WHERE s.status = 'INACTIVE' AND s.username = 'XIFENFEI';
k_sid NUMBER;
k_serial NUMBER;
BEGIN
OPEN c;
FETCH c
INTO k_sid, k_serial;
WHILE c%FOUND
LOOP
BEGIN
EXECUTE IMMEDIATE
'ALTER SYSTEM DISCONNECT SESSION '''
|| k_sid
|| ','
|| k_serial
|| ''' IMMEDIATE';
INSERT INTO kill_session_record (kill_time, kill_statement)
VALUES (
SYSDATE,
'ALTER SYSTEM DISCONNECT SESSION '''
|| k_sid
|| ','
|| k_serial
|| ''' IMMEDIATE');
EXCEPTION
WHEN OTHERS
THEN
INSERT INTO kill_session_record (kill_time, kill_statement)
VALUES (
SYSDATE,
'Failure:ALTER SYSTEM DISCONNECT SESSION '''
|| k_sid
|| ','
|| k_serial
|| ''' IMMEDIATE');
COMMIT;
END;
FETCH c
INTO k_sid, k_serial;
END LOOP;
COMMIT;
CLOSE c;
END;
/
--設定job定時執行
DECLARE
job NUMBER;
BEGIN
sys.DBMS_JOB.submit (job,
what => 'kill_inactive_session;',
next_date => SYSDATE,
interval => 'TRUNC(SYSDATE + 1) +7/24');
COMMIT;
DBMS_OUTPUT.put_line (job);
END;
/
|
如果是10GR2之前版本,需要把ALTER SYSTEM DISCONNECT SESSION 換成ALTER SYSTEM KILL SESSION
shell kill session
--shell指令碼
# more kill_inactive_session.sh
#!/bin/sh
tmpfile0=/tmp/.kill_inactive_0
tmpfile1=/tmp/.kill_inactive_1
tmpfile2=/tmp/.kill_inactive_2
sqlplus / as sysdba <<EOF
spool $tmpfile1
select 'kill time:'||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') execute_time from dual;
select p.spid,s.sid,s.serial# from v\$process p,v\$session s
where s.paddr=p.addr
and username='XIFENFEI'
and s.status='INACTIVE';
spool off
EOF
cat $tmpfile1>>$tmpfile0
grep "^[0123456789]" $tmpfile1 |awk '{print $1}'>$tmpfile2
for x in `cat $tmpfile2`
do
kill -9 $x
done
rm $tmpfile1 $tmpfile2
--contab 排程
00 07 * * * /u01/script/kill_inactive_session.sh
|
兩個指令碼都可以在where中加一些限制條件,來實現你需要kill的會話.資料庫級別kill相對系統級別來說更加溫和點,建議優先考慮資料庫級別kill session.如果要求立即釋放資源,可能需要考慮系統級別.兩中kill方式對於未提交且是inactive session都會被kill掉,然後回滾事務.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1979025/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql批次kill sessionMySqlSession
- 無腦批量kill sessionSession
- [20180918]disconnect session和kill session的區別.txtSession
- 自動批次實現linux機器ssh免密shell指令碼Linux指令碼
- 批次解壓shell指令碼指令碼
- kill 指令的執行原理
- Locust 程式碼指令碼實現指令碼
- ETL指令碼的實現指令碼
- shell指令碼之批次清空檔案指令碼
- python指令碼批次建立資料表Python指令碼
- Oracle批次生成Merge指令碼程式Oracle指令碼
- 建立批次AD域使用者的指令碼可以使用 PowerShell 來實現。以下是一個簡單的示例指令碼,用於批次建立使用者:指令碼
- MySQL: kill 會話的實現原理MySql會話
- 【Linux】【Shell】主控指令碼實現Linux指令碼
- JavaScript指令碼批次取消抖音喜歡JavaScript指令碼
- shell指令碼:批次傳送curl請求指令碼
- OB運維 | 連線 kill 中的 session_id運維Session
- 記一次 OSS 大批次檔案下載的實現 → bat指令碼不好玩!BAT指令碼
- Cloud Foundry Session Affinity(Sticky Session)的實現CloudSession
- 實現指令碼自動部署docker指令碼Docker
- shell指令碼實現DNS正向解析指令碼DNS
- 如何用低程式碼實現批次匯出PDF?
- Docker 實戰:搭建本地 Registry 私有映象倉庫及批次匯入指令碼Docker指令碼
- redis+lua指令碼實現介面限流Redis指令碼
- 基於 “typesys” 實現序列指令碼框架指令碼框架
- python實現自動搶課指令碼Python指令碼
- Python tkinter 實現 指令碼工具 GUI模版Python指令碼GUI
- 【Excel】Excel 拆分以及批次匯入指令碼開發Excel指令碼
- JS指令碼批次處理TS資料型別JS指令碼資料型別
- 批次非同步上傳aws圖片指令碼(python)非同步指令碼Python
- Tomcat中的session實現TomcatSession
- 埠kill指令碼,複製後封裝進 xx.bat 雙擊執行指令碼封裝BAT
- apache ab壓力測試工具-批次壓測指令碼Apache指令碼
- CentOS使用expect批次遠端執行指令碼和命令CentOS指令碼
- SpringBoot2.x 整合Spring-Session實現Session共享Spring BootSession
- 基於node實現Vue打包部署指令碼Vue指令碼
- 教你如何基於python實現指令碼加密Python指令碼加密
- shell指令碼實現---Zabbix5.0快速部署指令碼
- 網路卡流量監控指令碼,python實現指令碼Python