系统触发器

目录

数据库触发器

常见触发器,记录登录和退出数据库事件

模式触发器

[创建一个模式触发器,记录各种 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操作。

相关推荐
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端
桦说编程1 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
爱可生开源社区1 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
程序员清风1 天前
用了三年AI,我总结出高效使用AI的3个习惯!
java·后端·面试
beata1 天前
Java基础-13: Java反射机制详解:原理、使用与实战示例
java·后端