Главная страница
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.041 c
4-1121430528
JohnSmith
2005-07-15 16:28
2005.09.04
Работа с Mutex


1-1123898980
DFR
2005-08-13 06:09
2005.09.04
Как отловить момент запуска Screen Save`r


1-1124110639
tormoz
2005-08-15 16:57
2005.09.04
Видимость отдельных закладок в TabbedNotebook


2-1123267874
MAVr
2005-08-05 22:51
2005.09.04
Работа с папками…


4-1121730983
[MHT]Tyz
2005-07-19 03:56
2005.09.04
Перехват печати в Windows