小弟刚刚接触oracle,现在遇到一个问题,我想查询lr用户每次登录数据库的时间和ip的记录。想要用oracle logminer解决

解决方案 »

  1.   

    登录数据用户不会记录重做日志啊,能用logminer?使用数据库触发器。
    --使用SYS用户登录执行下列脚本
    --建如下的两张表:
    create table login_log                        --登入登出信息表
    (
        session_id int not null,                  --sessionid
        login_on_time  date,                      --登录时间        
        login_off_time  date,                     --退出时间        
        user_in_db        varchar2(30),           --登入的db user
        machine    varchar2(20),                  --机器名
        ip_address varchar2(20),                  --ip地址
        run_program varchar2(20)                  --以何程序登入
    );create table allow_user                       --网络用户表
    (
        ip_address varchar2(20),                  --ip地址
        login_user_name nvarchar2(20)             --操作者姓名
    );--创建建如下的两个触发器:
    CREATE OR REPLACE TRIGGER login_on_info --登入信息的trigger
      AFTER logon ON DATABASE
    BEGIN
      INSERT INTO login_log
        (session_id, login_on_time, login_off_time, user_in_db, machine,
         ip_address, run_program)
        SELECT AUDSID,
               SYSDATE,
               NULL,
               sys.login_user,
               machine,
               SYS_CONTEXT('USERENV', 'IP_ADDRESS'),
               program
          FROM v$session
         WHERE AUDSID = USERENV('SESSIONID'); --当前SESSION
    END;
    /CREATE OR REPLACE TRIGGER login_off_info --登出信息的触发器
      BEFORE logoff ON DATABASE
    BEGIN
      UPDATE login_log
         SET login_off_time = SYSDATE
       WHERE session_id = USERENV('SESSIONID'); --当前SESSION       
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
    END;
    /