Table created.创建触发器 1 zx@ORCL>CREATE OR REPLACE TRIGGER TRI_AUDIT_ORDERS 2 BEFORE INSERT OR UPDATE OR DELETE ON ORDERS 3 FOR EACH ROW 4 BEGIN 5 IF INSERTING THEN 6 INSERT INTO AUDIT_ORDERS 7 VALUES 8 (:NEW.ORDER_ID, 9 :OLD.ORDER_ID, 10 USER, 11 SYSDATE, --记录操作的时间 12 "INSERT", 13 SYS_CONTEXT("USERENV", "TERMINAL"),--记录操作来源的终端信息 14 USERENV("SID"), --记录操作的SID 15 SYS_CONTEXT("USERENV", "HOST")); --记录操作的主机名 16 ELSIF UPDATING THEN 17 INSERT INTO AUDIT_ORDERS 18 VALUES 19 (:NEW.ORDER_ID, 20 :OLD.ORDER_ID, 21 USER, 22 SYSDATE, 23 "UPDATE", 24 SYS_CONTEXT("USERENV", "TERMINAL"), 25 USERENV("SID"), 26 SYS_CONTEXT("USERENV", "HOST")); 27 ELSIF DELETING THEN 28 INSERT INTO AUDIT_ORDERS 29 VALUES 30 (:NEW.ORDER_ID, 31 :OLD.ORDER_ID, 32 USER, 33 SYSDATE, 34 "DELETE", 35 SYS_CONTEXT("USERENV", "TERMINAL"), 36 USERENV("SID"), 37 SYS_CONTEXT("USERENV", "HOST")); 38 END IF; 39 END; 40 /
Trigger created.测试数据 --linux的sqlplus插入 zx@ORCL>insert into orders values(1,"zx");
1 row created.
zx@ORCL>commit;
Commit complete. --windows的sqlplus插入 SQL> insert into orders values(2,"wl");
已创建 1 行。
SQL> commit;
提交完成。 --plsql插入 INSERT INTO orders VALUES(3,"yhz"); COMMIT; --使用sys用户插入 zx@ORCL>conn / as sysdba Connected. sys@ORCL>insert into zx.orders values(4,"wj");
1 row created.
sys@ORCL>commit;
Commit complete. --更新数据 zx@ORCL>update orders set order_id=10 where order_id=1;
1 row updated.
zx@ORCL>commit;
Commit complete. --删除数据 zx@ORCL>delete from orders where order_id<3;
1 row deleted.
zx@ORCL>commit;
Commit complete.查看记录表中的记录 --测试表记录 zx@ORCL>select * from orders;
ORDER_ID ORDER_NAME ---------- ------------------------------ 3 yhz 10 zx 4 wj --审计表记录 SQL> col username for a10 SQL> col hostname for a20 SQL> alter session set nls_date_format="yyyymmdd hh24:mi:ss";
会话已更改。
SQL> set linesize 200 SQL> select * from audit_orders;