如果用户还在连接的话,v$session可以找到这些信息
已经断开的连接不知道有没记录,关注

解决方案 »

  1.   

    oracle里没有现成的记录,但可以用触发器实现监控登录和退出的目标。
    下面是我自己在用的一段程序,实现对登录和退出的监控表名:PUB_DBA_LOGIN
    说明:
    建表:
    CREATE TABLE  PUB_DBA_LOGIN(
      数据库                VARCHAR2(15)    NOT NULL,
      实例名                VARCHAR2(15)    ,
      事件类型              VARCHAR2(15)    ,
      事件时间              DATE            ,
      用户名                VARCHAR2(20)    ,
      IP地址                VARCHAR2(20)    ,
      主机名                VARCHAR2(30)    
      )相关触发器:
    -- LOGIN日志
    CREATE OR REPLACE TRIGGER TRIG_PUB_DBA_LOGIN1
      AFTER LOGON ON DATABASE
    BEGIN  
      IF  ora_login_user <> ‘SYSMAN’ THEN
        INSERT INTO PUB_DBA_LOGIN
          VALUES(ora_database_name,ora_instance_num,'logon',sysdate,
                 ora_login_user,ora_client_ip_address,'?');
      END IF; 
    EXCEPTION
      WHEN OTHERS THEN NULL;
    END;-- LOGOUT日志
    CREATE OR REPLACE TRIGGER TRIG_PUB_DBA_LOGIN2
      BEFORE  LOGOFF ON DATABASE
    BEGIN  
      INSERT INTO PUB_DBA_LOGIN
        VALUES(ora_database_name,ora_instance_num,'logon',sysdate,
               ora_login_user,ora_client_ip_address,'?');
      
    EXCEPTION
      WHEN OTHERS THEN NULL;
    END;注意:ip地址通常取不到值
      

  2.   

    trigger的方法可以记录,trigger建立之后的情况,现在的情况就是需要找trigger建立之前的