/* LOGON触发器在用户登录数据库的时候被触发 LOGOFF触发器在用户注销时被触发 使用两个触发器可以将用户访问数据库的情况记录到一个日志表中 */ --用于测试LOGON触发器和LOGOFF触发器的表 DROP TABLE TESTLOG; DROP TRIGGER MYLOGONTRIGGER; DROP TRIGGER MYLOGOFFTRIGGER; CREATE TABLE TESTLOG( USERNAME VARCHAR2(100), EVENTTIME DATE, ACTION VARCHAR2(20) ); --触发器,用于记录用户的登录事件(注意:LOGON,LOGOFF触发器的定义中必须是ON SCHEMA,否则就会报错:系统触发器不能基于表或视图) CREATE OR REPLACE TRIGGER MYLOGONTRIGGER AFTER LOGON ON SCHEMA BEGIN INSERT INTO TESTLOG VALUES( USER, SYSDATE, 'LOGON' ); END; / --触发器,用户记录用户的注销事件(从技术的角度说,schema是指特殊用户的数据库对象集合。这些对象包括:表、索引、视图、存储程序---等等。在Oracle里,schema要求我们创建一个用户。但是你也可以创建一个没有schema的用户(也就是说没有对象)。所以在Oracle --中,用户就是一个帐户而schema就是对象。可能在其他的数据库平台上你可以创建一个没有用户的schema。) --注意:LOGOFF不能是AFTER LOGOFF,都注销了,哪里还会有操作,这里应该是BEFORE,否则就会报错:客户机注销触发器不能有 AFTER CREATE OR REPLACE TRIGGER MYLOGOFFTRIGGER BEFORE LOGOFF ON SCHEMA BEGIN INSERT INTO TESTLOG VALUES( USER, SYSDATE, 'LOGOFF' ); END; / --测试该表,进行登录和注销,之后查询表TESTLOG SQL> select * from testlog; USERNAME EVENTTIME ACTION -------------------- -------------- -------------------- XAXNB 17-4月 -11 LOGOFF XAXNB 17-4月 -11 LOGON XAXNB 17-4月 -11 LOGOFF XAXNB 17-4月 -11 LOGON