4 Ocak 2011 Salı

Bağlantı Sonrası Trigger (Tetik)

Merhaba,

Veritabanına kimin bağlandığını bir takım ek bilgilerle birlikte tutmak istiyorsanız bir yolunuz trigger yani tetik yaratmak. Tetikleri PL/SQL ile yaratabiliyoruz. Aşağıdaki küçük bir örnekle nasıl yaratabileceğime bakalım;

SELECT DBMS_METADATA.GET_DDL('TRIGGER','OPTPROD_LOGON_TRIGGER','AIRCOM') OPTPROD_LOGON_TRIGGER
FROM DUAL;

OPTPROD_LOGON_TRIGGER
----------------------------------------------------------------------------------------------------

CREATE OR REPLACE TRIGGER "AIRCOM"."OPTPROD_LOGON_TRIGGER"
after logon on database
declare
    hostadi varchar2(100);
    ipadresi varchar2(100);
    schema_adi varchar2(100);
    db_adi varchar2(100);
    terminaladi varchar2(100);
    zaman date;
    os_user varchar2(100);
begin
    select sys_context('USERENV','HOST')
    into hostadi
    from dual;
  
    select sys_context('USERENV','IP_ADDRESS')
    into ipadresi
    from dual;
  
    select sys_context('USERENV','SESSION_USER')
    into schema_adi
    from dual;
  
    select sys_context('USERENV','DB_NAME')
    into db_adi
    from dual;
  
    select sys_context('USERENV','TERMINAL')
    into terminaladi
    from dual;
  
    select sysdate
    into zaman
    from dual;
  
    select sys_context('USERENV', 'OS_USER')
    into os_user
    from dual;
  
    IF USER NOT IN('AIRCOM','SYS','SYSMAN','DBSNMP') THEN
    insert into AIRCOM.OPTPROD_LOGON
    values(user, hostadi, ipadresi, schema_adi, db_adi, terminaladi, zaman, os_user);
    END IF;
end;
ALTER TRIGGER "AIRCOM"."OPTPROD_LOGON_TRIGGER" ENABLE;

Yukarıdaki hali ile data dictionary'de tanımlanmış bir tetik görmektesiniz. Yukarıdaki tetiğin amacı host adi, ip adresi, kullanıcı adı, veritabanı adı, terminal adı, zaman ve işletim sistemi kullanıcı bilgilerine sahip olmak. Tetiğin yaratılması sırasında "after logon on database" ifadesi de kullanılmış. Bu durumda veritabanına bağlanan kullanıcılar arasından AIRCOM, SYS, SYSMAN ve DBSNMP kullanıcıları hariç, yukarıda saydığım bilgilerin tamamı AIRCOM kullanıcısının OPTPROD_LOGON tablosuna işlenmektedir. Bu tablodan birkaç satır örnek vermem gerekirse;

SELECT * FROM AIRCOM.OPTPROD_LOGON
WHERE SCHEMA_ADI IN ('EOGAOZD')
ORDER BY ZAMAN DESC;

KULLANICI_ADI HOSTADI IPADRESI SCHEMA_ADI DB_ADI TERMINAL_ADI ZAMAN OS_USER
----------------------------------------------------------------------------------------------------
EOGAOZD WORKGROUP\TESTCITRIXOP 10.6.105.136 EOGAOZD optprod TESTCITRIXOP 04.01.2011 14:45:23 Administrator
EOGAOZD WORKGROUP\TESTCITRIXOP 10.6.105.136 EOGAOZD optprod TESTCITRIXOP 04.01.2011 14:45:22 Administrator
EOGAOZD OYPUMBR\CTRXOP1 10.6.104.54 EOGAOZD optprod CTRXOP1 29.12.2010 14:53:04 Administrator
EOGAOZD OYPUMBR\CTRXOP1 10.6.104.54 EOGAOZD optprod CTRXOP1 29.12.2010 14:53:04 Administrator
EOGAOZD OYPUMBR\CTRXOP2 10.6.104.55 EOGAOZD optprod CTRXOP2 16.11.2010 21:34:24 Administrator
EOGAOZD OYPUMBR\CTRXOP2 10.6.104.55 EOGAOZD optprod CTRXOP2 16.11.2010 21:34:24 Administrator


İyi çalışmalar.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan