Triger ile denetleme örneği yapalım; çok önemli gördüğümüz tablolar için trigger yapısıyla ‘old value’ , ‘new value’ değerlerini loglayabiliriz, ‘ORHAN_TRIGGER_DENEME’ isminde oluşturduğum triger’ın nasıl logladığını inceleyelim;
-- ÖRNEK TABLO YARATILIR
CREATE TABLE ORHAN_DENEME
(
OWNER VARCHAR2(30 BYTE),
OBJECT_NAME VARCHAR2(128 BYTE),
SUBOBJECT_NAME VARCHAR2(30 BYTE),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19 BYTE),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19 BYTE),
STATUS VARCHAR2(7 BYTE),
TEMPORARY VARCHAR2(1 BYTE),
GENERATED VARCHAR2(1 BYTE),
SECONDARY VARCHAR2(1 BYTE),
NAMESPACE NUMBER,
EDITION_NAME VARCHAR2(30 BYTE)
);
-- AUDIT KAYITLARINI TUTACAK BIR TABLO OLUSTURULUR
CREATE TABLE ORHAN_AUDIT_TABLE (
OWNER VARCHAR2(30),
TABLE_NAME VARCHAR2(30),
MODIFYING_USER VARCHAR2(30),
MODIFY_TIME DATE DEFAULT SYSDATE,
COLUMN_NAME varchar2(30),
BEFORE_VALUE varchar2(30),
AFTER_VALUE varchar2(30));
CREATE OR REPLACE TRIGGER ORHAN_TRIGGER_DENEME
AFTER UPDATE ON ORHAN_DENEME
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
SELECT user INTO v_username FROM dual;
INSERT INTO ORHAN_AUDIT_TABLE ( OWNER, TABLE_NAME,
MODIFYING_USER, MODIFY_TIME, COLUMN_NAME, BEFORE_VALUE, AFTER_VALUE )
VALUES ( 'AV_SRV', 'ORHAN_AUDIT_TABLE', v_username, SYSDATE,
'OBJECT_NAME', :OLD.OBJECT_NAME, :NEW.OBJECT_NAME );
END;
-- ORNEK OLMASI ACISINDAN BİRKAÇ KAYIT GIRILIR
Insert into ORHAN_DENEME
(OWNER, OBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE,
CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY,
GENERATED, SECONDARY, NAMESPACE)
Values
('SYS', 'C_OBJ#', 2, 2, 'CLUSTER',
TO_DATE('10/21/2011 03:16:47', 'MM/DD/YYYY HH24:MI:SS'),
TO_DATE('10/21/2011 03:16:47', 'MM/DD/YYYY HH24:MI:SS'),
'2011-10-21:03:16:47', 'VALID', 'N',
'N', 'N', 5);
