ITPub博客

首页 > 数据库 > Oracle > 自治事务用做审计功能——实例

自治事务用做审计功能——实例

原创 Oracle 作者:cbso520 时间:2011-04-05 16:55:54 0 删除 编辑

如果一张表非常重要需要审计失败的操作.自治事务可以帮我们完成.我们可通过自治事务建立两个before/after trigger,如果操作成功before/alter是配对的.不成功则只有before。

SQL> l
1 create or replace trigger trg_aud_bef_emp
2 before insert on emp for each row
3 declare
4 pragma autonomous_transaction;
5 begin
6 insert into audit_emp values(:new.ename,'before insert',sysdate);
7 commit;
8 end;
9*
SQL> /

Trigger created.

SQL> desc emp
Name Null? Type
----------------------------------------- -------- ---------------------------- EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)

SQL> insert into emp(empno,ename,detpno) values(11,'jerry',20);
insert into emp(empno,ename,detpno) values(11,'jerry',20)
*
ERROR at line 1:
ORA-00904: "DETPNO": invalid identifier


SQL> c/tp/pt
1* insert into emp(empno,ename,deptno) values(11,'jerry',20)
SQL> /

1 row created.

SQL> commit
2 ;

Commit complete.

SQL> select * from audit_emp;

UNAME OPER TM
------------------------------ -------------------- ---------
jerry before insert 05-APR-11

SQL> insert into emp(empno,ename,deptno) values(11,'jerry',12);
insert into emp(empno,ename,deptno) values(11,'jerry',12)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.PK_EMP) violated


SQL> select * from audit_emp;

UNAME OPER TM
------------------------------ -------------------- ---------
jerry before insert 05-APR-11
jerry before insert 05-APR-11

SQL> create or replace trigger trg_aud_aft_emp
after insert on emp for each row
declare
pragma autonomous_transaction;
begin
insert into audit_emp values(:new.ename,'after insert',sysdate);
commit;
end; 2 3 4 5 6 7 8
9 /

Trigger created.

SQL> insert into emp(empno,ename,deptno) values(12,'jack',30);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from audit_emp;

UNAME OPER TM
------------------------------ -------------------- ---------
jerry before insert 05-APR-11
jerry before insert 05-APR-11
jack before insert 05-APR-11
jack after insert 05-APR-11

SQL> insert into emp(empno,ename,deptno) values(12,'jack1',30);
insert into emp(empno,ename,deptno) values(12,'jack1',30)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.PK_EMP) violated


SQL> select * from audit_emp;

UNAME OPER TM
------------------------------ -------------------- ---------
jerry before insert 05-APR-11
jerry before insert 05-APR-11
jack before insert 05-APR-11
jack after insert 05-APR-11
jack1 before insert 05-APR-11

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16298743/viewspace-1048261/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-12

  • 博文量
    72
  • 访问量
    312697