系统事件触发器是指基于Oracle系统事件(LOGIN登录 STARTUP启动)所建立的触发器,通过使用系统事件触发器,提供了跟踪系统或数据库变化的机制。
1. Oracle系统事件
以下介绍,摘自一篇文档,已上传至优快云:http://download.youkuaiyun.com/detail/jolingogo/6533513
可以触发系统触发器的Oracle系统事件主要包括五大类,主要有Startup/Shutdown、Servererror、Logon/Logoff、DDL、DML,
下面给出系统事件的种类和事件出现的时机(前或后)
这五类系统事件触发时,各事件包含的属性如:
在上面所列的属性中,除DML语句的列属性外,其余事件属性值可以通过调用ORACLE定义好的事件属性函数来读取,具体如表5-3所示。
2. 示例
用户登录时,创建触发器
create or replace trigger tri_ygy_demo_login
after logon on database
begin
insert into t_ygy_demo_log(id , operation_name , create_time,remark)
values(s_ygy_demo_logid.nextval,'用户登录',sysdate,'ip地址:'||ora_client_ip_address);
end;
/
3. 常用事件属性函数
ora_client_ip_address:用于返回客户端的IP地址
ora_database_name:用于返回当前数据库名
ora_des_encrypted_password:用于返回DES加密后的用户口令
ora_dict_obj_name:用于返回DDL操作所对应的数据库对象名
ora_dict_obj_name_list(name_list_ OUT ora_name_list_t):用于返回字事件中被修改的对象名列表
ora_dict_obj_owner:用于返回DDL操作所对应的对象的所有者名。
ora_dict_obj_ower_list(ower_list OUT ora_name_list_t):用于返回在事件中被修改对象的所有者列表
ora_dict_obj_type:用于返回DDL操作所对应的数据库对象的类型。
ora_grantee(user_list OUT ora_name_list_t):用于返回授权时事件授权者。
ora_instance_num:用于返回历程号。
ora_is_alter_column(column_name IN VARCHAR2):用于检测特定列是否被修改
ora_is_creating_nested_table:用于检测是否正在建立嵌套表
ora_is_drop_column(column_name IN VARCHAR2):用于检测特定列是否被删除
ora_is_servererror(error_number):用于检测是否返回了特定Oracle错误。
ora_login_user:用于返回登录用户名
ora_sysevent :用于返回触发 触发器的系统时间名。