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

Resim1