Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Логи сравнения (Оракл)


Страницы:   1 2

}|{yk ©   (2004-04-22 16:53:00) 

Как их сделать красивее?
Т.е. при каждой операции над записью должны записываться старые значения полей и новые, а также тип операции. Насколько я понимаю что придется написать 6 триггеров для каждой таблицы. Можно ли как-то упростить такй процесс?
Ну так а мутации как обойти? 1 each row trigger, 2-ой - statement trigger
Если сделать автономную транзакцию, то
если была попытка удалить, но она завершилась неудачно, то триггер все равно сработает


Petr V. Abramov   (2004-04-23 15:25:00) [1]

> Sergey13 ©   (23.04.04 08:51) [22]
> Если админу разбираться кто-чего наделал - подойдет. Если юзер
> должен их видеть в программе - бесполезно
 Админ - тоже юзер, хоть и продвинутый (по крайней мере должен быть :), а не божество великое и ужасное :) Вполне можно интерфейс сделать, хоть и погеморрившись - один раз, а не каждый, когда такая задача возникнет.


Sergey13   (2004-04-23 11:50:00) [2]

2}|{yk ©   (23.04.04 11:45) [26]
>Дык.. Я еще вчера сам такой написал...
А тут то не отчитался о содеяном. 8-)


}|{yk   (2004-04-23 11:45:00) [3]

Дык.. Я еще вчера сам такой написал... Но и за это - спасибо...


Sergey13   (2004-04-23 11:35:00) [4]

2Курдль ©   (23.04.04 11:20) [24]
А зачем бы я его давал, если бы он не работал? 8-)


Курдль   (2004-04-23 11:20:00) [5]


> 2}|{yk ©
> Пример, почти настоящий 8-)

Ну так и чё? Не работает? 8-()


DenK_vrtz   (2004-04-23 09:09:00) [6]

>при каждой операции над записью должны записываться старые значения полей и новые, а также тип операции

обычная таблица истории документов и никаких извращений

Reindeer Moss Eater ©   (22.04.04 16:56) [1] + Sergey13 ©   (23.04.04 08:51) [22]


Sergey13   (2004-04-23 08:51:00) [7]

2}|{yk ©
Пример, почти настоящий 8-)
CREATE OR REPLACE TRIGGER "TR_TP2LOG"
AFTER INSERT OR DELETE OR
UPDATE ON "BD"."TP"
FOR EACH ROW
begin
 if deleting then
   insert into bd.tp_log ....
  end if;
 if inserting then
   insert into bd.tp_log ....
 end if;
 if updating then
   insert into bd.tp_log ....
  end if;
end;
Насчет Логмайнера - смотря зачем надо логи иметь. Если админу разбираться кто-чего наделал - подойдет. Если юзер должен их видеть в программе - бесполезно, ИМХО, или по крайней мере проблематично.


Petr V. Abramov   (2004-04-22 17:54:00) [8]

есть под 8.1.7 Правда, не знаю, какой Edition для этого нужен (у меня был Enterprise, поэтому вопросом не задавался). В любом случае см. Supplied PL/SQL Packages Ref., на слово dbms_logminer_и_т_д


}|{yk   (2004-04-22 17:48:00) [9]

а logminer под какие Ораклы есть? Просто у меня версия 8,1,7


Petr V. Abramov   (2004-04-22 17:42:00) [10]

А не проще ли использовать logminer? Правда, тогда база должна быть в archivelog-режиме, и логи (оракловские) нельзя выбрасывать, зато решение универсальное. Хоть с их разбором сначала помучаться придется, но придется один раз, а на каждую таблицу триггеры вешать.


}|{yk   (2004-04-22 17:35:00) [11]

Да, все нормально


Reindeer Moss Eater   (2004-04-22 17:24:00) [12]

Если триггер сработал в транзакции, которая завершилась откатом, то ничего вставленное из этого триггера в другую таблицу не закоммитится.

Если конечно эта вставка не происходит в автономной (за каким-то лешим) транзакции


Курдль   (2004-04-22 17:22:00) [13]


> 2Курдль ©   (22.04.04 17:14) [13]
> нет

Если триггер страбатывает на изменение одной таблицы и пишет в другую - ничем не связанную с первой, то какие там могут быть мутации?


}|{yk   (2004-04-22 17:20:00) [14]

2Курдль ©   (22.04.04 17:14) [13]
нет


}|{yk   (2004-04-22 17:15:00) [15]

Да нет...
Стоит вот такой триггер
CREATE OR REPLACE TRIGGER test_trg
AFTER
 INSERT OR DELETE OR UPDATE
ON app_rs
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
insert into app_temp values ('222');
end;
и вот если я пытаюсь удалить из app_rs данные, по которым есть констрейнты (внешние связи), то вызывается ошибка, но данные во временную таблицу пишутся


Курдль   (2004-04-22 17:14:00) [16]

Вопрос }|{yk-у: таблица логов ссылается на таблицы, которые она логирует по внешним ключам?


Reindeer Moss Eater   (2004-04-22 17:12:00) [17]

Зачем тебе автономная транзакция?

Звучит красиво?


Reindeer Moss Eater   (2004-04-22 17:11:00) [18]

Даже если он трижды before, ничего не произойдет.


}|{yk   (2004-04-22 17:10:00) [19]

Это в автономной транзакции...


Курдль   (2004-04-22 17:09:00) [20]


> Ну и что что сработает?

Ничего не сработает, если триггер "after insert, update, delete".


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо