Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.012 c
8-1114008866
Katy
2005-04-20 18:54
2005.09.04
Контрастность и яркость картинки


1-1123662088
webpauk
2005-08-10 12:21
2005.09.04
Hint с кнопкой закрытия


1-1123677130
Ксардас
2005-08-10 16:32
2005.09.04
Как програмно переставить курсор в Richedit?


14-1123534105
GanibalLector
2005-08-09 00:48
2005.09.04
Наш человек ;) Я рыдалЪ


4-1121767285
bobah
2005-07-19 14:01
2005.09.04
Асинхронный ввод/выод com-порта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский