Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 DDL триггер  [new]
drno
Member

Откуда:
Сообщений: 228
Добрый день!

Хочу сделать аудит на Insert таблицы unblok_dir.
Для хранения log создана таблица AUDIT_LOG

create table AUDIT_LOG (
  AUDIT_LOG_ID NUMBER,
  OPERATION varchar2(300),
  OWNER varchar2(100),
  NAME_OBJECT varchar2(50),
  TYPE_OBJECT varchar2(500),
  TEXT varchar2(500),
  USERNAME varchar2(30),
  DATE_CHANGE date 
);

Для добавления информации при возникновении события insert в отношении unblok_dir создан триггер AUDIT_LOG

create or replace trigger AUDIT_LOG
  before insert on unblok_dir  
  for each row
declare
  -- local variables here
  text varchar2(200);
begin
    insert into AUDIT_LOG -- добавление записи в таблицу AUDIT_LOG
      (AUDIT_LOG_ID, OPERATION, OWNER, NAME_OBJECT, TYPE_OBJECT, TEXT, USERNAME, DATE_CHANGE)
       select
         AUDIT_LOG_ID.NEXTVAL,  
         ora_sysevent, -- наименование события
         ora_dict_obj_owner, -- владелец объекта
         ora_dict_obj_name, -- название объекта
         ora_dict_obj_type, -- тип объекта
         text,
         ora_login_user,
         sysdate
         from dual;  
end AUDIT_LOG;

Проблема заключается в том, что поля таблицы AUDIT_LOG такие как
ora_sysevent, -- наименование события
ora_dict_obj_owner, -- владелец объекта
ora_dict_obj_name, -- название объекта
ora_dict_obj_type, -- тип объекта
остаются пустыми.

Подскажите в чем может быть проблема?
23 янв 11, 21:06    [10117955]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
bind
Member

Откуда:
Сообщений: 64
а если так
begin
    insert into AUDIT_LOG
      (AUDIT_LOG_ID, OPERATION, OWNER, NAME_OBJECT, TYPE_OBJECT, TEXT, USERNAME, DATE_CHANGE)
     values(
         AUDIT_LOG_ID.NEXTVAL,  
         ora_sysevent, -- наименование события
         ora_dict_obj_owner, -- владелец объекта
         ora_dict_obj_name, -- название объекта
         ora_dict_obj_type, -- тип объекта
         text,
         ora_login_user,
         sysdate) ;
end AUDIT_LOG;
23 янв 11, 21:09    [10117968]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
drno,

поймите разницу между DDL и DML
23 янв 11, 21:09    [10117969]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
drno
Member

Откуда:
Сообщений: 228
Разница как я понял такая

DDL (CREATE, ALTER & DROP of objects)
DML (INSERT UPDATE, DELETE, SELECT, EXECUTE).
SYSTEM EVENTS (LOGON, LOGOFF etc.)
23 янв 11, 21:28    [10118021]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
drno
Member

Откуда:
Сообщений: 228
bind,

тоже самое, из следующих полей

ora_sysevent, -- наименование события
ora_dict_obj_owner, -- владелец объекта
ora_dict_obj_name, -- название объекта
ora_dict_obj_type, -- тип объекта
ora_login_user,

информация заносится только в ora_login_user
23 янв 11, 21:34    [10118038]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51778

Во-первых, логгирующие триггера обычно делают AFTER чтобы не мучать сервер откатом ещё и
лога при обломе действия.
Во-вторых, открой для себя волшебные слова NEW и OLD.

Posted via ActualForum NNTP Server 1.4

23 янв 11, 21:38    [10118048]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
nikonian
Member

Откуда: город на Неве
Сообщений: 58
drno, так Вам нужен триггер на DDL? Делаете-то Вы его на DML.
24 янв 11, 11:23    [10119514]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кроме загадочного "select text from dual" - обычный функционал команды audit.
24 янв 11, 11:27    [10119555]     Ответить | Цитировать Сообщить модератору
 Re: DDL триггер  [new]
drno
Member

Откуда:
Сообщений: 228
nikonian,

до этого с триггерами вообще не работал, потому много не знаю и могу ошибаться.

Как я понял, мне нужен DML триггер (Insert, Update, Delete), а функции (ora_sysevent,ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type ) относятся только к DDL операциям.
24 янв 11, 14:09    [10121016]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить