zhuntidaoren

转载自:https://blog.csdn.net/w864518106/article/details/80453473

 

最近在使用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

分类:

技术点:

相关文章:

  • 2021-06-07
  • 2021-08-20
  • 2022-12-23
  • 2021-03-26
  • 2021-12-25
  • 2021-11-03
  • 2021-08-14
猜你喜欢
  • 2021-11-03
  • 2022-12-23
  • 2021-11-30
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案