ORA_CLIENT_IP_ADDRESS函数的功能是以VARCHAR2类型返回客户端IP地址,一般只用在系统触发器中,其实它也只在系统触发器中有效.
经常看到有人说使用ORA_CLIENT_IP_ADDRESS获得的IP为空,大概也是这个原因造成的.
这里采用DDL触发器和系统触发器做对比.
首先准备实验用的表及两个触发器对象(一个DDL触发器,一个系统触发器)--建立记录表
23:37:15 SYS@orcl> create table t01(id number,nn varchar2(40));
Elapsed: 00:00:00.05
--建立系统触发器
23:37:53 SYS@orcl> create or replace trigger ORA_TEST
23:38:16 2 after logon ON database
23:38:16 3 BEGIN
23:38:16 4 dbms_output.put_line(ORA_LOGIN_USER||"IP:"||NVL(ORA_CLIENT_IP_ADDRESS,"AA"));
23:38:16 5 insert into t01 select nvl(max(id),0)+1,ORA_LOGIN_USER||"[system Trigger]IP:"||NVL(ORA_CLIENT_IP_ADDRESS,"AA") from t01;
23:38:16 6 end;
23:38:17 7 /
Elapsed: 00:00:00.05
--建立DDL触发器
23:38:19 SYS@orcl> create or replace trigger ORA_TEST_ddl
23:38:38 2 after ddl ON database
23:38:38 3 BEGIN
23:38:38 4 dbms_output.put_line(ORA_LOGIN_USER||"IP:"||NVL(ORA_CLIENT_IP_ADDRESS,"AA"));
23:38:38 5 insert into t01 select nvl(max(id),0)+1,ORA_LOGIN_USER||"[DDL Trigger]IP:"||NVL(ORA_CLIENT_IP_ADDRESS,"AA") from t01;
23:38:38 6 end;
23:38:38 7 /
Elapsed: 00:00:00.11其中特别加了ORA_LOGIN_USER来标识登录的用户,以及DDL Trigger和system Trigger字串来标识触发的是哪个触发器.--先测试系统触发器,发现dbms_output.put_line没有输出
00:06:11 @orcl> conn cry/cry
Connected.
00:09:28 CRY@orcl> conn scott/tiger
Connected.
00:09:37 SCOTT@orcl> conn sys/ as sysdba
Connected.此时的表t01为00:09:40 SYS@orcl> select * from t01; ID NN
---------- ----------------------------------------
1 CRY[system Trigger]IP:192.168.123.102
2 SCOTT[system Trigger]IP:192.168.123.102
3 SYS[system Trigger]IP:192.168.123.102
Elapsed: 00:00:00.02
Oracle Bug 6136074 - ORA-04068 / ORA-04065 / ORA-06508oracle Log Buffer内部机制以及常见等待事件相关资讯 Oracle触发器
- Oracle数据库中的触发器 (03/11/2015 10:12:29)
- Oracle利用触发器实现自增列 (02/10/2015 11:27:09)
- Oracle中的System Triggers(DDL触 (02/25/2014 19:33:55)
| - Oracle中的触发器 (02/14/2015 11:22:03)
- Oracle触发器问题解决一例 (11/11/2014 17:36:10)
- Oracle 触发器更新基表不同记录所 (12/31/2013 10:01:29)
|
本文评论 查看全部评论 (0)