11.2.8 用户和系统事件触发器
所谓系统事件触发器,就是基于Oracle系统事件而建立的触发器。该类型的触发器可以审计数据库的登录、注销以及关闭和启动等,更多的系统事件可以参见表11.2。下面以示例13来说明如何创建使用此类触发器。
【示例13】创建数据库级触发器
该示例将记录每个登录用户的时间,并把登录时间存放到用户登录记录表中。具体步骤如下:
1)创建用户登录日志表。表结构如表11.5所示。
执行如下SQL脚本,创建表LOG_USER:
CREATE TABLE LOG_USER(
LOGONID VARCHAR2(50),
LOGONNAME VARCHAR2(50),
LOGONTIME DATE,
CONSTRAINT LOG_USER_PRK PRIMARY KEY(LOGONID)
);
在SQL*Plus下执行以上脚本,即创建了表LOG_USER。
2)创建触发器。该触发器是数据库级,记录每个用户的登录时间。具体脚本如下:
01 CREATE TRIGGER LOGON_TGR
02 AFTER
03 LOGON
04 ON DATABASE
05 BEGIN
06 INSERT INTO LOG_USER
07 VALUES(LOG_TAB_ID.NEXTVAL,SYS.LOGIN_USER,SYSDATE);
08 END;
09 /
【代码解析】
❑第1~3行表示创建触发器,在登录之后触发。
❑第4行表示作用在数据库上,所有该数据库的用户登录动作都将被记录下来。用SCHEMA表示作用在当前模式上,只记录该模式的用户。
❑第6~7行表示把数据添加到LOG_USER表中。其中LOG_TAB_ID是前面创建的序列,用它做自增长的主键,SYS.LOGIN_USER就是11.2.7小节介绍的事件属性,用于得到登录用户。
【验证触发器】
执行脚本成功后验证该触发器。打开SQL*Plus,登录到数据库,查询LOG_USER表数据,查看登录情况是否被记录。读者可以根据自己的情况自行实验,这里不再给出具体结果。