| |
|
| |
Oracle系统事件触发器
|
oracle的系统事件触发器:系统事件触发器是指基于oracle系统事件(如logon和startup)所建立的触发器。通过这种触发器可以跟踪系统或数据库的变化。 create table jax_event_table(eventname varchar2(30),time date); createtrigger tr_startup after startup ondatabase begin insertinto jax_event_table values(ora_sysevent,sysdate); end; createtrigger tr_shutdown beforeshutdownondatabase begin insertinto jax_event_table values(ora_sysevent,sysdate); end; 在建立如上所示的两个触发器后,使用shutdown和startup关闭开启数据库会往表jax_event_table中记录一条记录,但shutdown abort则不会触发该触发器,而startup nomount后使用alter database将数据库更改为mount或者open都只会触发一次。 1 SHUTDOWN 2008-3-20 14:29:47 2 STARTUP 2008-3-20 14:42:52 3 SHUTDOWN 2008-3-20 14:43:06 4 STARTUP 2008-3-20 14:45:34 登录和退出触发器用来记载登录用户名称、时间和ip地址 createtable jax_log_table( username varchar2(20), log_time date, onoff varchar(6),address varchar2(30)); createtrigger tr_logon after logon ondatabase begin insertinto jax_log_table values(ora_login_user,sysdate,'logon',ora_client_ip_address); end; createtrigger tr_logoff before logoff ondatabase begin insertinto jax_log_table values(ora_login_user,sysdate,'logoff',ora_client_ip_address); end; select * from jax_log_table; 1 SYS 2008-3-20 14:55:17 logon 2 SYSMAN 2008-3-20 14:55:21 logon 3 SYS 2008-3-20 14:55:45 logon 127.0.0.1 4 SYS 2008-3-20 14:56:07 logoff 5 SYSMAN 2008-3-20 14:56:26 logon 6 SYSMAN 2008-3-20 14:56:27 logoff 7 ZHANGLEI 2008-3-20 14:56:35 logon 127.0.0.1 8 ZHANGLEI 2008-3-20 14:57:01 logoff 9 SYS 2008-3-20 14:57:12 logon 127.0.0.1 10 SYSMAN 2008-3-20 14:57:31 logon 11 SYSMAN 2008-3-20 14:57:32 logoff DDL触发器记录系统所发生的DDL事件(create,alter,drop等) createtable jax_event_ddl_table(event varchar2(20), username varchar2(10),owner varchar2(10),objname varchar2(20), objtype varchar2(10),timedate); createtrigger tr_ddl afterddlondatabase begin insertinto jax_event_ddl_table values(ora_sysevent,ora_login_user, ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type,sysdate) end; 1 CREATE SYS SYS T2 TABLE 2008-3-20 15:05:41 2 CREATE SYS SYS VIEW_T2 VIEW 2008-3-20 15:06:53 由上面的描述看到,在编写系统事件触发器时,应用开发人员经常需要使用事件属性函数。常用的事件属性函数如下: 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_owner_list(owner_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 返回触发器的系统事件名。
|
|
|
|
|
 |
|
|
|
|
校区地址:和平区贵州路18号君悦大厦C座 咨询电话:27831306、27828386 |
|
| |
|
|