文档介绍:从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括:
l         数据库启动/关闭触发器
l         DDL触发器
l         最终用户登陆/注销触发器
l         系统错误触发器
l         DDL触发器
使用这些触发器,可以对数据库发生的一些重要事件进行审计。
当触发事件发生的时候,可以启动触发器。在触发器中,可以通过DML操作将审计操作记录在日志表中,或者通过抛出一个EXCEPTION来制止某种操作。在触发器中,可以通过使用系统事件函数(Event Attribute Functions)来获取一些信息。以下是系统事件函数的详细情况:
系统事件函数
函数名称
类型
描述
备注
ora_client_ip_address
VARCHAR2
客户端的IP地址
 
ora_database_name
VARCHAR2(50)
数据库名称
 
ora_dict_obj_name
VARCHAR2(30)
DDL发生的对象名称
 
ora_dict_obj_owner
VARCHAR2(30)
DDL发生对象的宿主
 
ora_dict_obj_type
VARCHAR2(20)
对象类别
 
ora_is_alter_column
(column_name IN
VARCHAR2)
BOOLEAN
当某列被修改的时候返回真,否则返回假
 
ora_is_drop_column
(column_name IN
VARCHAR2)
BOOLEAN
当某列被删除的时候返回真,否则返回假
 
ora_login_user
VARCHAR2(30)
登录的用户名
 
ora_sysevent
VARCHAR2(20)
系统事件的名称
 
is_servererror(error_num in integer)
BOLEAN
返回系统是否产生某个错误
 
ORACLE 8I开始,提供了一个新的函数“SYS_CONTEXT”。通过使用SYS_CONTEXT函数可以获得一些和用户相关的信息,比如:
SELECT sys_context('USERENV','TERMINAL') FROM DUAL;
用户环境的取值包括:
l         TERMINAL:客户端操作系统终端的名称    
l         LANGUAGE:NLS_LANG的值 
l         LANG  :ISO字符集的名称 
l         SESSIONID:SESSION的ID
l         INSTANCE:实例的ID
l         ISDBA:是否具有DBA权限
l         CLIENT_INFO:64字节的用户信息,可以用DBMS_APPLICATION_INFO设置的值:
l         NLS_TERRITORY :当前SESSION的 territory
l         NLS_CURRENC