感谢参考原文-http://bjbsair.com/2020-03-27/tech-info/7042/ 概述 ==
众所周知在v$session 中记录着客户端的机器名称,但是没有IP , 如果要记录clinet ip 应该怎么实现呢?
select username,machine,terminal,program,client_info,logon_time from v$session;
![eda7c4b14553ef994e57a638774888eb.png](https://i-blog.csdnimg.cn/blog_migrate/eddb1495164ee8679473a995f789d450.jpeg)
可以看到是没有记录IP的。。
1、利用 DBMS_SESSION 过程包.
BEGIN
DBMS_SESSION.set_identifier(SYS_CONTEXT('USERENV', 'IP_ADDRESS'));
END;
![5c3a8eb5c822a691bb8b5d83de1dea2a.png](https://i-blog.csdnimg.cn/blog_migrate/881106e74376310b2b25fa8e88f68bd5.png)
2、通过触发器
create or replace trigger on_logon_trigger
after logon on database
begin
dbms_application_info.set_client_info(sys_context( 'userenv', 'ip_address' ) );
end;
![4396eb67df7f2ae76865ea25626e8235.png](https://i-blog.csdnimg.cn/blog_migrate/68d747b29c011722c340ace938059f90.png)
3、测试
当客户端登陆后,在v$session的client_info列会记录其相应的IP信息。
select username,machine,terminal,program,client_info,logon_time from v$session order by logon_time desc;
![0fd27ab7905a29d9a9a2ec6a5805eef9.png](https://i-blog.csdnimg.cn/blog_migrate/6fa27ce5bcfd434a35514fa013f017e8.jpeg)