oracle数据库连接满了,ORACLE数据库连接数满的分析及优化
最近在使用Oracle的過程中,出現了數據庫連接數滿的情況,導致程序及數據庫連接工具連接不上。主要從兩個方面來考慮這件事,從程序方面來看:
1.進行數據庫連接操作后未釋放連接;
2.若使用了數據庫連接池,則考慮連接池的超時設置。
從數據庫本身來看:
1.可以增加數據庫的最大連接數;
2.可以定時清理數據庫中INACTIVE的會話。
查看Oracle連接數:
select b.MACHINE, b.PROGRAM , count(*) from v$process a, v$session b where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE , b.PROGRAM order by count(*) desc;
對于增加最大連接數的資料很多,文末也會推薦一個鏈接,定時清理INACTIVE會話需要創建一個存儲過程找出超過2小時(根據需求設定)的會話,然后斷開會話,具體如下
CREATE OR REPLACE PROCEDURE DB_KILL_IDLE_CLIENTS AUTHID DEFINER AS
job_no number;
num_of_kills number := 0;
BEGIN
FOR REC IN (SELECT SID, SERIAL#, INST_ID, MODULE, STATUS
FROM gv$session S
WHERE S.USERNAME IS NOT NULL
AND S.LAST_CALL_ET >= 2 * 60 * 60
AND S.STATUS = 'INACTIVE'
ORDER BY INST_ID ASC) LOOP
DBMS_OUTPUT.PUT('LOCAL SID ' || rec.sid || '(' || rec.module || ')');
execute immediate 'alter system disconnect session ''' || rec.sid || ', ' ||
rec.serial# || '''immediate';
DBMS_OUTPUT.PUT_LINE('. killed locally ' || job_no);
num_of_kills := num_of_kills + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Number of killed system sessions: ' ||
num_of_kills);
END DB_KILL_IDLE_CLIENTS;
創建定時任務執行這個存儲過程:
begin
sys.dbms_job.submit(job => :job,
what => 'SYS.DB_KILL_IDLE_CLIENTS;',
next_date => to_date('25-05-2018 17:00:00',
'dd-mm-yyyy hh24:mi:ss'),
interval => 'TRUNC(sysdate,''hh'') + 1/(24)');
commit;
end;
注意以sys角色登錄操作。
以下是參考的資料:
1.增加連接數:https://blog.csdn.net/lele2426/article/details/4978283
2.清理會話:https://www.cnblogs.com/kerrycode/p/3636992.html
3.創建定時任務:https://www.cnblogs.com/yx007/p/6519544.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的oracle数据库连接满了,ORACLE数据库连接数满的分析及优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++primer 3.4练习题
- 下一篇: CATIA连接盘实体设计