使用触发器来监控表的使用情况

监控表的使用有那么几种方式
1. 审计,10g的颗粒度已经很细了,磁盘空间是个问题.
2. 还有就是查看 FLASHBACK_TRANSACTION_QUERY,但是这个与undo_retention以及undo大小有关系,表大的话,查这个很费劲.
3. 再来就是触发器,高并发的情况下要谨慎使用.

闲话不多说,做个用触发器监控数据表使用的例子.
先建立测试表.

create table TGLOG
(
USERCODE
VARCHAR2(25) not null,
TIME DATE
not null,
TYPE
VARCHAR2(25) not null,
IP
VARCHAR2(25) not null,
RAMARK1
VARCHAR2(25) not null,
REMARK2
VARCHAR2(225)
);

create table TGTEST
(
USERCODE
VARCHAR2(10) not null,
LMAGENTID
VARCHAR2(25) not null,
REMARK
VARCHAR2(225),
VALIDSTATUS
VARCHAR2(1) not null,
FLAG
VARCHAR2(1)
);

目标:对TGTEST的inser,
update,delete 都记录下相应信息
(操作类型,username,
timestamp,ip,machine,module),并且只跟踪usercode='0000000000'的数据.

CREATE OR REPLACE TRIGGER tg_trace_tab_tgtest
AFTER
UPDATE or delete or insert ON TGTEST
REFERENCING NEW
AS New OLD AS Old
FOR EACH ROW
DECLARE
v_type
VARCHAR2(500);
old_value
int;
new_value
int;
BEGIN
v_type:
='';

old_value:
=:old.usercode;
new_value:
=:new.usercode;

if(old_value='0000000000' or new_value='0000000000') then

IF inserting THEN
v_type:
='INSERT';
ELSIF updating
THEN
v_type:
='UPDATE';
ELSIF deleting
THEN
v_type:
='DELETE';
END IF;
INSERT INTO tglog
select username,sysdate,v_type,SYS_CONTEXT('USERENV','IP_ADDRESS'),machine,program
from v$session where AUDSID = USERENV('SESSIONID');
end if;

END;
/

OK,可以开始测试了.

INSERT INTO tgtest SELECT '0000000000','22','333','1','1' FROM dual ;
COMMIT ;
UPDATE tgtest SET flag=0 WHERE usercode='0000000000';
COMMIT ;
DELETE FROM tgtest WHERE usercode='0000000000';
COMMIT;

SELECT * FROM tglog ORDER BY TIME ASC ;

USERCODE TIME TYPE IP RAMARK1 REMARK2
---------- ------------------- ---------- ------------------------- ------------------------- --------------------
FUDB 2010-07-22 17:20:20 111 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 17:38:34 INSERT 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 17:38:59 INSERT 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 17:39:34 INSERT 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 17:41:03 UPDATE 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 21:15:20 DELETE 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 21:15:56 INSERT 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 21:16:40 DELETE 192.168.3.188 MSHOME\TPADGERRARD plsqldev.exe
FUDB
2010-07-22 21:32:20 INSERT 192.168.3.49 WORKGROUP\MESORACLE sqlplus.exe

作者:Daaprk
可以转载,但必须以超链接形式标明文章原始出处和作者信息.
原文地址:https://www.cnblogs.com/dap570/p/1783311.html