![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Логи сравнения (Оракл)
}|{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".