首页 > 代码库 > 触发器六(系统触发器)(学习笔记)
触发器六(系统触发器)(学习笔记)
系统触发器
系统触发器用于监视数据库服务的打开、关闭、错误等信息的取得,或者是监控用户的行为操作等。如果要创建系统触发器,可以使用如下的语法
CREATE [OR REPLACE] TRIGGER 触发器名称 [BEFORE | AFTER] [数据库事件] ON [DATABASE | SCHEMA] [WHEN 触发条件] [DECLARE] [程序声明部分 ;] BEGIN 程序代码部分 ; END [触发器名称] ;
使用管理员才可以创建系统触发器
系统触发器事件
NO. | 事件 | 触发时机 | 描述 |
1 | STARTUP | AFTER | 数据库实例启动之后触发 |
2 | SHUTDOWN | BEFORE | 数据库实例关闭之前触发 |
3 | SERVERERROR | AFTER | 出错误时触发 |
4 | LOGON | AFTER | 用户登录后触发 |
5 | LOGOFF | BEFOR | 用户注销前触发 |
示例一、登录登出日志功能
--创建序列CREATE SEQUENCE user_log_seq;--创建日志表CREATE TABLE user_log( logid NUMBER CONSTRAINT pk_logoid PRIMARY KEY, username VARCHAR2(50) NOT NULL, logodate DATE, logoffdate DATE, ip VARCHAR2(20), logtype VARCHAR2(20));
--创建登录触发器create or replace trigger logon_trigger AFTER LOGON ON DATABASE declare begin INSERT INTO user_log(logid,username,logodate,ip,logtype) VALUES(user_log_seq.nextval,ora_login_user,SYSDATE,ora_client_ip_address,‘LOGON‘);end logon_trigger;
--创建登出触发器CREATE OR REPLACE TRIGGER LOGON_TRIGGER BEFORE LOGOFF ON DATABASEDECLAREBEGIN INSERT INTO USER_LOG (LOGID, USERNAME, LOGOFFDATE, IP, LOGTYPE) VALUES (USER_LOG_SEQ.NEXTVAL, ORA_LOGIN_USER, SYSDATE, ORA_CLIENT_IP_ADDRESS, ‘LOGFF‘);END LOGON_TRIGGER;
切换用户进行登录
使用管理登录,查看user_log表
SELECT * FROM user_log;
触发器六(系统触发器)(学习笔记)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。