Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизЛоги сравнения (Оракл) Найти похожие ветки
← →
}|{yk © (2004-04-22 16:53) [0]Как их сделать красивее?
Т.е. при каждой операции над записью должны записываться старые значения полей и новые, а также тип операции. Насколько я понимаю что придется написать 6 триггеров для каждой таблицы. Можно ли как-то упростить такй процесс?
Ну так а мутации как обойти? 1 each row trigger, 2-ой - statement trigger
Если сделать автономную транзакцию, то
если была попытка удалить, но она завершилась неудачно, то триггер все равно сработает
← →
Reindeer Moss Eater © (2004-04-22 16:56) [1]Инсерты в таблицу лога в триггерах.
Автономные транзакции не нужны.
← →
Курдль © (2004-04-22 16:59) [2]Почему 6 и причем здесь мутации, если Вы будете просто брать значения New и Old?
← →
}|{yk © (2004-04-22 17:01) [3]Но а как тогда мутации обойти?
← →
Курдль © (2004-04-22 17:04) [4]Просто делаете по "after" триггеру на каждую таблицу (внутри распознаете, что за операция) и пишете в таблицу логов. Не могу понять, откуда Вы мутации увидели?
← →
}|{yk © (2004-04-22 17:05) [5]если мутаций не будет то 3. Или можно узнать какое действие было совершено?
← →
Reindeer Moss Eater © (2004-04-22 17:06) [6]Или можно узнать какое действие было совершено?
Зачем?
Если транзакция обломается, то и в лог ничего не попадет.
Транзакция-то та же самая.
← →
}|{yk © (2004-04-22 17:06) [7]А вот по этому пункту
>если была попытка удалить, но она завершилась неудачно, то триггер
>все равно сработает
← →
Reindeer Moss Eater © (2004-04-22 17:07) [8]Ну и что что сработает?
← →
Курдль © (2004-04-22 17:09) [9]
> Ну и что что сработает?
Ничего не сработает, если триггер "after insert, update, delete".
← →
}|{yk © (2004-04-22 17:10) [10]Это в автономной транзакции...
← →
Reindeer Moss Eater © (2004-04-22 17:11) [11]Даже если он трижды before, ничего не произойдет.
← →
Reindeer Moss Eater © (2004-04-22 17:12) [12]Зачем тебе автономная транзакция?
Звучит красиво?
← →
Курдль © (2004-04-22 17:14) [13]Вопрос }|{yk-у: таблица логов ссылается на таблицы, которые она логирует по внешним ключам?
← →
}|{yk © (2004-04-22 17:15) [14]Да нет...
Стоит вот такой триггер
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 данные, по которым есть констрейнты (внешние связи), то вызывается ошибка, но данные во временную таблицу пишутся
← →
}|{yk © (2004-04-22 17:20) [15]2Курдль © (22.04.04 17:14) [13]
нет
← →
Курдль © (2004-04-22 17:22) [16]
> 2Курдль © (22.04.04 17:14) [13]
> нет
Если триггер страбатывает на изменение одной таблицы и пишет в другую - ничем не связанную с первой, то какие там могут быть мутации?
← →
Reindeer Moss Eater © (2004-04-22 17:24) [17]Если триггер сработал в транзакции, которая завершилась откатом, то ничего вставленное из этого триггера в другую таблицу не закоммитится.
Если конечно эта вставка не происходит в автономной (за каким-то лешим) транзакции
← →
}|{yk © (2004-04-22 17:35) [18]Да, все нормально
← →
Petr V. Abramov © (2004-04-22 17:42) [19]А не проще ли использовать logminer? Правда, тогда база должна быть в archivelog-режиме, и логи (оракловские) нельзя выбрасывать, зато решение универсальное. Хоть с их разбором сначала помучаться придется, но придется один раз, а на каждую таблицу триггеры вешать.
← →
}|{yk © (2004-04-22 17:48) [20]а logminer под какие Ораклы есть? Просто у меня версия 8,1,7
← →
Petr V. Abramov © (2004-04-22 17:54) [21]есть под 8.1.7 Правда, не знаю, какой Edition для этого нужен (у меня был Enterprise, поэтому вопросом не задавался). В любом случае см. Supplied PL/SQL Packages Ref., на слово dbms_logminer_и_т_д
← →
Sergey13 © (2004-04-23 08:51) [22]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;
Насчет Логмайнера - смотря зачем надо логи иметь. Если админу разбираться кто-чего наделал - подойдет. Если юзер должен их видеть в программе - бесполезно, ИМХО, или по крайней мере проблематично.
← →
DenK_vrtz © (2004-04-23 09:09) [23]>при каждой операции над записью должны записываться старые значения полей и новые, а также тип операции
обычная таблица истории документов и никаких извращений
Reindeer Moss Eater © (22.04.04 16:56) [1] + Sergey13 © (23.04.04 08:51) [22]
← →
Курдль © (2004-04-23 11:20) [24]
> 2}|{yk ©
> Пример, почти настоящий 8-)
Ну так и чё? Не работает? 8-()
← →
Sergey13 © (2004-04-23 11:35) [25]2Курдль © (23.04.04 11:20) [24]
А зачем бы я его давал, если бы он не работал? 8-)
← →
}|{yk © (2004-04-23 11:45) [26]Дык.. Я еще вчера сам такой написал... Но и за это - спасибо...
← →
Sergey13 © (2004-04-23 11:50) [27]2}|{yk © (23.04.04 11:45) [26]
>Дык.. Я еще вчера сам такой написал...
А тут то не отчитался о содеяном. 8-)
← →
Petr V. Abramov © (2004-04-23 15:25) [28]> Sergey13 © (23.04.04 08:51) [22]
> Если админу разбираться кто-чего наделал - подойдет. Если юзер
> должен их видеть в программе - бесполезно
Админ - тоже юзер, хоть и продвинутый (по крайней мере должен быть :), а не божество великое и ужасное :) Вполне можно интерфейс сделать, хоть и погеморрившись - один раз, а не каждый, когда такая задача возникнет.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.032 c