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

Вниз

Отключение триггеров в Оракл   Найти похожие ветки 

 
evvcom ©   (2005-07-26 10:02) [0]

Народ, пытался ли кто делать такое.
Есть база на сервере 1 (С1). Написаны триггера, которые через dblink вызывают процедуры/функции или делают insert/update таблиц на удаленном сервере 2 (С2). В случае обновления этих объектов на С2, триггера на С1 приобретают статус INVALID, но не сразу, а после любого обращения к измененным объектам на С2. Естественно, в этом случае вставка/обновление данных на С1 становится невозможной. Думаю, излишне говорить, что на рабочих ответственных базах с немалым количеством пользователей такое недопустимо. Так вот, задумал я в случае подобной ошибки дизэйблить эти триггера автоматом. Хотел написать это в триггере after SERVERERROR on schema. Ошибка нормально ловится, но на
execute immediate "alter trigger TRIGGER_NAME disable";
получаю ошибку "ORA-30511: invalid DDL operation in system triggers". Думаю, написать теперь на каждую таблицу, для которой написаны триггера on each row, триггера уровня оператора и в них после проверки флага о подобной ошибке вызывать процедуру с отключением всех этих on each row триггеров. Но тоже это не особо удобно. Чтобы потом обновить эту процедуру, опять придется сначала отключать statement триггера, обновлять, перекомпилить триггера, потом включать.
Может кто предложит более элегантный способ решения этой проблемы?


 
Reindeer Moss Eater ©   (2005-07-26 10:20) [1]

Какой смысл их дисэйблить, если они все равно инвалидные и ничего не делают?
Дропай их.


 
Reindeer Moss Eater ©   (2005-07-26 10:26) [2]

Организуй вставку через динамический SQL c обработкой исключений.
Триггера при этом не будут зависеть от объектов второго сервера.


 
evvcom ©   (2005-07-26 10:54) [3]


> Какой смысл их дисэйблить, если они все равно инвалидные
> и ничего не делают?

Они-то ничего не делают, но и данные не вставляются/обновляются. У клиента сразу ошибка валится "ORA-04098: trigger trigger_name is invalid and failed re-validation"
А дропать их нельзя, потому как надо их просто перекомпилировать, и чтобы дальше работали.

> Организуй вставку через динамический SQL c обработкой исключений.

Вот это вроде дельная мысль. Сейчас подумаю, попробую. Спасибо.


 
Reindeer Moss Eater ©   (2005-07-26 10:56) [4]

А дропать их нельзя, потому как надо их просто перекомпилировать, и чтобы дальше работали.

Если просто перекомпилить, то проблем-то нет.
Но их же сначала править надо.


 
evvcom ©   (2005-07-26 11:03) [5]


> Если просто перекомпилить, то проблем-то нет.
> Но их же сначала править надо.

Иногда править, иногда просто перекомпиляции достаточно. Сейчас с динамическим SQL попробую.


 
evvcom ©   (2005-07-26 14:11) [6]

С динамическим SQL все отлично получилось. Еще раз спасибо за идею.



Страницы: 1 вся ветка

Текущий архив: 2005.09.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
9-1113469655
Xeno
2005-04-14 13:07
2005.09.04
Сценаристы откликнетесь?!


3-1121958144
Prohodil Mimo
2005-07-21 19:02
2005.09.04
клонирование записей из 3х связанных таблиц


1-1123834976
Санек
2005-08-12 12:22
2005.09.04
Как сделать неактивной TabSheet


14-1123724503
inew
2005-08-11 05:41
2005.09.04
Вопрос по теории СУБД.


3-1122030759
GekaNaz
2005-07-22 15:12
2005.09.04
Настройка Yaffil сервера