最近在使用oracle的過程中,出現了資料庫連線數滿的情況,導致程式及資料庫連線工具連線不上。主要從兩個方面來考慮這件事,從程式方面來看:
1.進行資料庫連線操作後未釋放連線;
2.若使用了資料庫連線池,則考慮連線池的超時設定。
從資料庫本身來看:
1.可以增加資料庫的最大連線數;
2.可以定時清理資料庫中inactive的會話。
--清理超過2小時的inactive會話
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.增加連線數:
2.清理會話:
3.建立定時任務:
增加 oracle 資料庫連線數
oracle的連線數 sessions 與其引數檔案中的程序數 process 有關,它們的關係如下 sessions 1.1 process 5 但是我們增加process數時,往往資料庫不能啟動了。這因為我們還漏調了乙個unix系統引數 它是 etc system 中semmns,這是unix系...
修改Oracle資料庫的連線數
測試了這個,不錯。摘 一 1.檢視processes和sessions引數 sql show parameter processes name type value db writer processes integer 1 gcs server processes integer 0 job qu...
檢視資料庫連線數
sql server 檢視資料庫連線數 1.獲取當前指定資料庫的連線資訊 select from master.dbo.sysprocesses where dbid in select dbid from master.dbo.sysdatabases where name yourdatabas...