select * from v$session;
解决方案 »
- 这个select语句怎么写?sql关联查询的问题
- oracle 的隐含参数_cursor_features_enabled
- RAC中,为什么使用 crs_stat -t 看到的状态 不断变化?
- Oracle9i/10g OWB
- 请大家帮个忙!
- export query results问题
- 问个DEPHI开发方面的问题
- Oracle表空间的文件管理
- 请问为什么我安装oracle时总是装不上OraOledb.oracle这个oracle自己的ODBC驱动呢
- 如何进行UTL_FILE的异常捕捉
- 救命啊,ORACLE不能启动
- 如何创建一个用户只能以normal模式登陆,不能以sysdba和sysoper登陆OEM
[A]服务器(817以上):utl_inaddr.get_host_address
客户端:sys_context('userenv','ip_address')
谁知道怎样在一个session中获取其它session的ip
为什么这个获取的不是真实的IP呢???
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的表记录登录信息。