系统触发器

目录

数据库触发器

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

模式触发器

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

相关推荐
爱上语文6 分钟前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker12 分钟前
taoker的项目维护(ng服务器)
java·开发语言
萧曵 丶15 分钟前
Rust 中的返回类型
开发语言·后端·rust
HGW68926 分钟前
基于 Elasticsearch 实现地图点聚合
java·elasticsearch·高德地图
hi星尘1 小时前
深度解析:Java内部类与外部类的交互机制
java·开发语言·交互
看到我,请让我去学习1 小时前
Qt编程-qml操作(js,c++,canvas)
开发语言·qt
橘子编程1 小时前
Python-Word文档、PPT、PDF以及Pillow处理图像详解
开发语言·python
陈敬雷-充电了么-CEO兼CTO1 小时前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
MeshddY1 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
wuxinyan1231 小时前
Java面试题033:一文深入了解MySQL(5)
java·数据库·mysql·面试