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

Откуда:
Сообщений: 10
Есть таблица для которой необходимо определить, значения каких полей добавлялись/изменялись/удалялись, взять эти значения, дописать к ним некий комментарий и записать в таблицу протокола одной строкой. Какие есть способы это сделать?
7 мар 08, 12:40    [5385027]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Определить постфактум или во время внесения изменений?
7 мар 08, 12:42    [5385039]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116342
Аудит / Свои триггеры.

Только поаккуратнее с формулировками.
Какие поля изменялись - понятно.
Значения каких полей добавлялись или удалялись - это очевидно INSERT и DELETE ?
Правильным ответом тогда будет - все :-)
7 мар 08, 12:42    [5385044]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
Может, snapshot log?
7 мар 08, 12:46    [5385075]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
andrey_anonymous
Может, snapshot log?

...или capture процесс (streams)
7 мар 08, 12:46    [5385085]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
tru55
Определить постфактум или во время внесения изменений?

Протоколирование (по крайней мере в моем случае) всегда постфактум.
7 мар 08, 13:01    [5385195]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
dmidek
Аудит / Свои триггеры.

Только поаккуратнее с формулировками.
Какие поля изменялись - понятно.
Значения каких полей добавлялись или удалялись - это очевидно INSERT и DELETE ?
Правильным ответом тогда будет - все :-)


Да я на триггере и написал. Только в таблице 21-о поле (это еще не самая большая), а триггер на вставку + изменение + удаление получился в 315 строк. Это монстр! Могу процитировать если нужно, но мне нужно что-то другое.
7 мар 08, 13:03    [5385215]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Elic
Member

Откуда:
Сообщений: 29991
Spacer
триггер на вставку + изменение + удаление получился в 315 строк.. Это монстр!
Пофигу количество строк. Такие триггера легко генерируются в любоми количестве.
7 мар 08, 13:07    [5385252]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
dmidek
Аудит / Свои триггеры.

Только поаккуратнее с формулировками.
Какие поля изменялись - понятно.
Значения каких полей добавлялись или удалялись - это очевидно INSERT и DELETE ?
Правильным ответом тогда будет - все :-)

имхо, это больше коррелирует с постановкой задачи.
только про лимиты и перформанс не забывайте, когда дизайн того лога делаете
(особливо, если тот протокол еще и читать кто-то будет ;)
7 мар 08, 13:08    [5385259]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116342
Elic
Spacer
триггер на вставку + изменение + удаление получился в 315 строк.. Это монстр!
Пофигу количество строк. Такие триггера легко генерируются в любоми количестве.


Да и ИМХО соотношение 21 (ого ! ) поле / 315 строк подлежит
оптимизации :)
7 мар 08, 13:12    [5385300]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
orawish
имхо, это больше коррелирует с постановкой задачи.
только про лимиты и перформанс не забывайте, когда дизайн того лога делаете
(особливо, если тот протокол еще и читать кто-то будет ;)

Об этом и думаю, потому и не нравится. К тому же мне такими триггерами еще около десятка таблиц обвязать нужно, а там есть таблицы на >50 полей. Скучно такое писать. :-(
7 мар 08, 13:13    [5385301]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
Spacer
orawish
имхо, это больше коррелирует с постановкой задачи.
только про лимиты и перформанс не забывайте, когда дизайн того лога делаете
(особливо, если тот протокол еще и читать кто-то будет ;)

Об этом и думаю, потому и не нравится. К тому же мне такими триггерами еще около десятка таблиц обвязать нужно, а там есть таблицы на >50 полей. Скучно такое писать. :-(

Еще раз предлагаю подумать о capture
7 мар 08, 13:14    [5385308]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116342
Spacer
Скучно такое писать. :-(


По совету Elic-a генерируйте - будет весело
Оракл сам за Вас будет триггеры клепать. На форуме где то есть варианты ...
7 мар 08, 13:15    [5385326]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
dmidek
Да и ИМХО соотношение 21 (ого ! ) поле / 315 строк подлежит
оптимизации :)

Цитирую тогда:
DROP TRIGGER T_LOG_EXTIMATE;

CREATE OR REPLACE TRIGGER T_LOG_EXTIMATE
AFTER DELETE OR INSERT OR UPDATE
ON EXTIMATE 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
...
END T_LOG_EXTIMATE;
/


Сообщение было отредактировано: 7 мар 08, 19:23
7 мар 08, 13:16    [5385338]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Elic
Member

Откуда:
Сообщений: 29991
Spacer
        if :OLD.* <> :NEW.* then
Что, все столбцы not null ? :)
7 мар 08, 13:24    [5385437]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
Elic
Spacer
        if :OLD.* <> :NEW.* then
Что, все столбцы not null ? :)


Да дело в том, что нужно разобраться, в каких именно полях было изменение, а затем запротоколировать эти значения, добавив к ним комментарий к соот. колонке таблицы. :-(
7 мар 08, 13:27    [5385465]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
Результат типа такого:

SYSLOG.DESCRIPTION:
Таблиця: EXTIMATE, Найменування кошторису: "Test7/2" -> "Test7/1", PERTYPE: "30" -> "0", FINTYPE: "0" -> "3", BUDJET: "0" -> "1"

Т.е., если у поля был комментарий, он запишется, иначе просто имя поля.
7 мар 08, 13:29    [5385478]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
Spacer
Elic
Spacer
        if :OLD.* <> :NEW.* then
Что, все столбцы not null ? :)
Да дело в том, что нужно разобраться

exactly! Срочно идти и читать null comparision rules.
... а текст триггера можно ужать минимум в 3 раза ;)
7 мар 08, 13:30    [5385485]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116342
Spacer
Elic
Spacer
        if :OLD.* <> :NEW.* then
Что, все столбцы not null ? :)


Да дело в том, что нужно разобраться, в каких именно полях было изменение, а затем запротоколировать эти значения, добавив к ним комментарий к соот. колонке таблицы. :-(


Elic об этом и говорит. Ваши IFы не сработают , если старое или новое
значение было NULL.
7 мар 08, 13:30    [5385489]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Spacer
orawish
имхо, это больше коррелирует с постановкой задачи.
только про лимиты и перформанс не забывайте, когда дизайн того лога делаете
(особливо, если тот протокол еще и читать кто-то будет ;)

Об этом и думаю, потому и не нравится. К тому же мне такими триггерами еще около десятка таблиц обвязать нужно, а там есть таблицы на >50 полей. Скучно такое писать. :-(

ну и не пишите такое..
Например я - ежели бы делал это, то не в одну таблицу лудил а хотя бы в две (событие-атрибуты события), а возможно - в одну/(две)-на-каждую-логируемую
7 мар 08, 13:34    [5385526]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
orawish
Spacer
orawish
имхо, это больше коррелирует с постановкой задачи.
только про лимиты и перформанс не забывайте, когда дизайн того лога делаете
(особливо, если тот протокол еще и читать кто-то будет ;)

Об этом и думаю, потому и не нравится. К тому же мне такими триггерами еще около десятка таблиц обвязать нужно, а там есть таблицы на >50 полей. Скучно такое писать. :-(

ну и не пишите такое..
Например я - ежели бы делал это, то не в одну таблицу лудил а хотя бы в две (событие-атрибуты события), а возможно - в одну/(две)-на-каждую-логируемую


Я себе представляю потом обработку для визуального отображения информации пользователю о том, что же он делал! Это будет еще один монстр.
7 мар 08, 13:47    [5385674]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
dmidek
Spacer
Elic
Spacer
        if :OLD.* <> :NEW.* then
Что, все столбцы not null ? :)


Да дело в том, что нужно разобраться, в каких именно полях было изменение, а затем запротоколировать эти значения, добавив к ним комментарий к соот. колонке таблицы. :-(


Elic об этом и говорит. Ваши IFы не сработают , если старое или новое
значение было NULL.


Действительно ошибся (торжественно (в очередной раз) клянусь перестать писать код по ночам). ;-)
7 мар 08, 13:48    [5385682]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
dba123
Guest
Spacer
Есть таблица для которой необходимо определить, значения каких полей добавлялись/изменялись/удалялись, взять эти значения, дописать к ним некий комментарий и записать в таблицу протокола одной строкой. Какие есть способы это сделать?
например, так
Ask Tom:generic trigger for auditing column level changes
7 мар 08, 13:52    [5385699]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Spacer
..Я себе представляю потом обработку для визуального отображения информации пользователю о том, что же он делал! Это будет еще один монстр.

ой, не пугайте(..сь особенно )
7 мар 08, 14:00    [5385742]     Ответить | Цитировать Сообщить модератору
 Re: Протоколирование изменений в таблице  [new]
Spacer
Member

Откуда:
Сообщений: 10
dba123
Spacer
Есть таблица для которой необходимо определить, значения каких полей добавлялись/изменялись/удалялись, взять эти значения, дописать к ним некий комментарий и записать в таблицу протокола одной строкой. Какие есть способы это сделать?
например, так
Ask Tom:generic trigger for auditing column level changes


Спасибо за ссылку, оч. полезные сведения.
7 мар 08, 14:41    [5386059]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить