select * from v$session;

解决方案 »

  1.   

    [Q]怎么样获取IP地址
    [A]服务器(817以上):utl_inaddr.get_host_address
    客户端:sys_context('userenv','ip_address')
      

  2.   

    select * from v$session 可以查看用户和其机器名,不能看到ip
      

  3.   

    select sys_context('userenv','ip_address') from dual;
      

  4.   

    netstat -na | grep 1521
      

  5.   

    sys_context('userenv','ip_address') 在oracle7上可以用吗?我用了好象不行啊
      

  6.   

    sys_context('userenv','ip_address')只能获取当前session的IP
    谁知道怎样在一个session中获取其它session的ip
      

  7.   

    select sys_context('userenv','ip_address') from dual
    为什么这个获取的不是真实的IP呢???
      

  8.   

    CREATE OR REPLACE TRIGGER tr_login_record
    AFTER logon ON DATABASE
    DECLARE
    miUserSid NUMBER;
    mtSession v$session%ROWTYPE;
    CURSOR cSession(iiUserSid IN NUMBER) IS
    SELECT * FROM v$session
    WHERE sid=iiUserSid;
    BEGIN
    SELECT sid INTO miUserSid FROM v$mystat WHERE rownum<=1;
    OPEN cSession(miUserSid);
    FETCH cSession INTO mtSession;
    --if user exists then insert data
    IF cSession%FOUND THEN
    INSERT INTO log$information(login_user,login_time,ip_adress,ausid,terminal, 
    osuser,machine,program,sid,serial#)
    VALUES(ora_login_user,SYSDATE,SYS_CONTEXT ('USERENV','IP_ADDRESS'), 
    userenv('SESSIONID'),
    mtSession.Terminal,mtSession.Osuser,
    mtSession.Machine,mtSession.Program,
    mtSession.Sid,mtSession.Serial#);
    ELSE
    --if user don't exists then return error
    sp_write_log('Session Information Error:'||SQLERRM);
    CLOSE cSession;
    raise_application_error(-20099,'Login Exception',FALSE);
    END IF;
    CLOSE cSession;
    EXCEPTION
    WHEN OTHERS THEN
    sp_write_log('Login Trigger Error:'||SQLERRM);
    END tr_login_record;
    在以上触发器中需要注意以下几点
    1、该用户有v_$session与v_$mystat的对象查询权限,可以在sys下对该拥护显式授权。
    2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。
    3、必须在创建该触发器之前创建一个log$information的表记录登录信息。