在线咨询
QQ咨询
服务热线
服务热线:13125520620
TOP

教你怎样加强数据库实时连接数的稳定性-数据库

发布时间:2011-11-12 浏览:4249

数据库的实时连接数是否稳定是衡量一套IT系统是否稳定的一个指标。当新系统推出或者在没有严格测试环境下更应该收集和关注这个数据。

我写了一个简单的存储过程采样数据库实时连接数并利用dbms_job来定时,方法如下:

1.在sys用户下建立保存数据库实时连接数结果的表session_num,并建立公有同义词

  
  create table session_num(
   num number(6),
   username varchar2(30),
   machine varchar2(30),
   reportdate date ) 
  pctfree 1 pctused 99 tablespace users;
  create public synonym session_num for sys.session_num;

2.写一个存储过程select_sessionnum.sql

   
  create or replace procedure select_sessionnum
  is
  begin
     insert into session_num(num,username,machine,reportdate) 
     select count(*),username,machine,sysdate 
     from v$session 
     where username is not null 
     group by username,machine;
     commit;
  exception
   when others then
   rollback;
   raise;
  end;
  /

3.用dbms_job设定每隔一个小时调用select_sessionnum过程采样数据

  
  variable jobno number;
  begin
  dbms_job.submit(:jobno,'select_sessionnum;', sysdate,'sysdate + 1/24');
  commit;
  end;
  /

关于dbms_job使用和介绍可以参考这篇文章:《在Oracle中实现定时操作》

4.DBA和一般用户都可以不定期检查这些数据:

  set pagesize 1000;
  set linesize 100;
  column username format a15;
  column machine format a30;
  select * from session_num where num>50;
  select * from v$license;

发现异常的问题要用文档记录下来,并发给开发团队参考。历史数据可以用truncate table session_num;清掉(这个50是我假设的一个值,不同的应用系统值会不一样)。

5.如果系统稳定并没有新的服务添加时,可以从sys用户下删掉这个采样工作:

   
  select job from user_jobs where what='select_sessionnum;';
      JOB
  ----------
     1912
      
   exec dbms_job.remove(1912);

后话:这个方法和statspack采样的方式很相象, 但不会增加系统太大的负担。如果你关注其它参数也可以依葫芦画瓢来采样并跟踪它们。

TAG
软件定制,软件开发,瀚森HANSEN
0
该内容对我有帮助