目录
[创建一个模式触发器,记录各种 DDL 操作的日志](#创建一个模式触发器,记录各种 DDL 操作的日志)
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
前面已经介绍过,系统触发器可以细分为数据库触发器和模式触发器。
数据库触发器是指在 Oracle数据库的系统事件发生时进行触发,例如系统启动或者退出、异常错误等。
模式触发器是在执行 DDL语句时触发的,例如执行创建、修改或者删除的 CREATE、ALTER、DROP 语句。
数据库触发器
根据数据库中进行日常启动、退出等操作,可以建立触发器,跟踪这些信息
常见触发器,记录登录和退出数据库事件
分析:
要想记录登录和退出数据库的情况,必须建立一张数据表用于记录登录和退出的日志。建立数据表的代码如下所示。
sql
CREATE TABLE user_log(
User_name VARCHAR2(20),
Login_date TIMESTAMP,
Logoff_date TIMESTAMP);
由于要记录所有用户登录和退出数据库的情况,因此使用管理员用户登录。
sql
CONN sys/change_on_install AS SYSDBA:
然后创建日志数据表。
下面就分别创建登录和退出的触发器,使得当登录或者退出的时候,向创建的日志数据表中添加数据,如下图所示。
上图是登录数据库时会执行的触发器。下图是退出数据库时会执行的触发器。
下面就尝试使用不同用户登录和退出测试一下所创建的触发器是否可以工作。最后查询该数据表如下图所示。
如上图所示,可以看到不同用户登录和退出的时间。
模式触发器
模式触发器是在指执行 DDL语句时触发的,例如执行创建、修改或者删除的 CREATE、ALTER,DROP 等语句。
创建一个模式触发器,记录各种 DDL 操作的日志
分析:
这个范例由于要记录日志,因此首先也要创建一个日志文件,如下所示。
sql
CREATE TABLE DDL_log(
user_name VARCHAR2(20), --操作用户
action_date DATE, --操作日期
action VARCHAR2(20), --操作动作
object_name VARCHAR2(20), --操作对象
object _type VARCHAR2(20)); --操作对象的类型
如上图所示,当发生 CREATE、ALTER 或者 DROP 事件时,触发上面的触发器,向日志数据表中插入数据。
下面通过几个简单的测试验证触发器是否可用。分别创建一个数据表,修改数据表结构,创建一个视图,删除一个视图,删除一个数据表,如下所示。
sql
CREATE TABLE goods(goods_id NUMBER,goods_name VARCHAR2(20));
ALTER TABLE goods ADD(price NUMBER);
CREATE VIEW view1 AS SELECT goods_id FROM goods;
DROP VIEW view1;
DROP TABLE goods;
现在查询创建的日志文件,如下图所示
可以看出,日志文件记录了所有的 DDL操作。