系统触发器

目录

数据库触发器

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

模式触发器

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

相关推荐
记得开心一点嘛2 分钟前
Redis封装类
java·redis
短剑重铸之日4 分钟前
《7天学会Redis》Day 5 - Redis Cluster集群架构
数据库·redis·后端·缓存·架构·cluster
007php0074 分钟前
mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
数据库·redis·git·mysql·面试·职场和发展·php
lkbhua莱克瓦247 分钟前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
计算机程序设计小李同学20 分钟前
基于SSM框架的动画制作及分享网站设计
java·前端·后端·学习·ssm
鱼跃鹰飞33 分钟前
JMM 三大特性(原子性 / 可见性 / 有序性)面试精简版
java·jvm·面试
jghhh0138 分钟前
传递对准MATLAB仿真程序
开发语言·matlab
老邓计算机毕设44 分钟前
SSM心理健康系统84459(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·心理健康系统·在线咨询
碎像44 分钟前
10分钟搞定 MySQL 通过Binlog 数据备份和恢复
数据库·mysql
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计