源码-Oracle数据库管理-第十五章-触发器和游标-Part 4(理解触发器)

来源:互联网 发布:mp3添加歌词软件 编辑:程序博客网 时间:2024/06/03 23:06

触发器在目前为止的工作中接触不多,却是我感觉很有趣的部分,有机会再好好用用。

--代码15.15 使用DDL触发器监控方案对象的创建--在scott用户模式下创建一个保存DDL创建信息的表,CREATE TABLE created_log(    obj_owner VARCHAR2(30),    --所有者    obj_name  VARCHAR2(30),   --对象名称    obj_type  VARCHAR2(20),    --对象类型    obj_user VARCHAR2(30),     --创建用户    created_date DATE           --创建日期)--以DBA登录,创建DDL触发器监控表的变化CREATE OR REPLACE TRIGGER t_created_log   AFTER CREATE ON scott.SCHEMA                     --在soctt方案下创建对象后触发BEGIN   INSERT INTO scott.created_log(obj_owner, obj_name,     --插入日志记录                obj_type, obj_user, created_date               )        VALUES (SYS.dictionary_obj_owner, SYS.dictionary_obj_name,                SYS.dictionary_obj_type, SYS.login_user, SYSDATE               );END;--创建表来查看触发器的运行效果--代码15.16 创建方案及数据库级别的登录触发器--以DBA身份登录,创建DATABASE级别的LOGON事件触发器CREATE OR REPLACE TRIGGER t_db_logonAFTER LOGON ON DATABASEBEGIN  INSERT INTO log_db_table(username,logon_time,address)              VALUES(ora_login_user,SYSDATE,ora_client_ip_address);END;--以scott身份登录,创建如下的SCHEMA级别的LOGON事件触发器CREATE OR REPLACE TRIGGER t_user_logonAFTER LOGON ON SCHEMABEGIN  INSERT INTO log_user_table(username,logon_time,address)              VALUES(ora_login_user,SYSDATE,ora_client_ip_address);END;--代码15.17 使用after servererror触发器记录错误日志--使用SYS用户登录创建一个错误日志记录表CREATE TABLE servererror_log(   error_time DATE,   username  VARCHAR2(30),   instance NUMBER,   db_name VARCHAR2(50),   error_stack VARCHAR2(2000));--在SYS方案下,创建错误触发器,在出现数据库错误时触发。CREATE OR REPLACE TRIGGER t_logerrors   AFTER SERVERERROR ON DATABASEBEGIN   INSERT INTO servererror_log        VALUES (SYSDATE, login_user, instance_num, database_name,                DBMS_UTILITY.format_error_stack);END;

0 0