Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Логи сравнения (Оракл)   Найти похожие ветки 

 
}|{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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.169 c
14-1083436636
RealRascal
2004-05-01 22:37
2004.05.23
win xp и принтер


1-1084342715
AngelSAI
2004-05-12 10:18
2004.05.23
Вывод вертикального текста


1-1083745547
KPP
2004-05-05 12:25
2004.05.23
ZLib - пример использования


3-1083127093
Lamo_xxxx
2004-04-28 08:38
2004.05.23
Как перейти к следующе из найденных по какому-либо условию записи


3-1083294873
kvit
2004-04-30 07:14
2004.05.23
Транзакция в АДО?