Oracle触发器删除ip

时间:2014-12-10 18:50:57

标签: oracle triggers

每当有人删除用户时,我都必须记录删除用户的人。因此创建了一个触发器,通过SYS_CONTEXT获取IP地址(' USERENV',' IP_ADDRESS')。但是,触发器插入0.0.0.0而不是实际删除的IP地址。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案:

select UTL_INADDR.get_host_address(SYS_CONTEXT('USERENV', 'HOST')) into ip_address from dual;

它使用Oracle的内部功能。

坦克。

答案 1 :(得分:0)

您很可能在本地连接到Oracle实例而不使用Oracle Net TCP / IP服务。在这种情况下,SYS_CONTEXT('USERENV', 'IP_ADDRESS')NULL


例如,当我通过LAN连接到我的Oracle实例时:

# using remote TCP connection:
sh$ sqlplus sylvain@oracle.lan.local
SQL> select coalesce(SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 'NULL') from dual;

-> 10.1.2.3

当我在Oracle主机上本地做同样的事情时:

# using IPC connection:
sh$ sqlplus sylvain  
SQL> select coalesce(SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 'NULL') from dual;

-> NULL

这样做会按预期工作:

# using local TCP connection:
sh$ sqlplus sylvain@localhost
SQL> select coalesce(SYS_CONTEXT('USERENV', 'IP_ADDRESS'), 'NULL') from dual;

-> 127.0.0.1