如何使用触发器限制一个客户端机器最多连接10个session。感谢

解决方案 »

  1.   

    貌似不幸,不过可以使用资源限制
    -- Create profile 
    create profile limit
      sessions_per_user 10
      
    alter user uname profile limit;
      

  2.   

    直接修改参数就可以设置session数:
    alter profile default limit idle_time 30;或者可以设置每个session滞留时间,超过就自动kill掉了
    sqlnet.ora文件,新增expire_time=x(单位是分钟)  
      

  3.   

    修改profile只能限制用户的连接会话数,不能限制单个机器。因为一个用户可以在不同机器上连接多个会话,而我们需要咨询的是限制单个客户端机器的连接会话数。
      

  4.   

    建立系统触发器,查看连接的IP地址不过我觉得奇怪,你的客户端是直接连接数据库》?WEB的一般都是链接到数据库连接池,CS的,一台机器用一个SESSION就够了呢,很奇怪,能知道什么样子的需求?
      

  5.   

    可使用登陆触发器实现,但只对非 dba 用户帐户和通过 tcp/ip 协议登陆的客户端有效。create or replace trigger logon_limit_trg
    after logon on database
    declare
     cnt number(2);
    begin
     select count(1) into cnt from v$session 
      where machine=sys_context('userenv','host') and port<>0;
     if cnt>10 then
      RAISE_APPLICATION_ERROR(-20001,'Beyond limit');
     end if;
    end;
    /
      

  6.   

    给医院做的HIS系统 10g双机RAC 医生站护士站等等的客户端机器需要限制他们的会话数,又一次出了点问题库差点DOWN掉