Форум: "Базы";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
ВнизОтключение триггеров в Оракл Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c