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);