Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить триггер с помощью SQL ? Help! / 15 сообщений из 15, страница 1 из 1
04.08.2008, 10:23:51
    #35468054
esr
esr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
Мне приходится перекачивать данные в некую базу, которая имеет сильно много неправильных данных, и к тому же сильно зажата проверками и триггерами. Иногда надо поправить коды сразу в нескольких таблицах. Для этого я вручную через PL\SQL отключаю триггер, потом вношу изменения в таблицы, и затем снова включаю. А как сделать отключение и включение с помощью кода SQL ?
...
Рейтинг: 0 / 0
04.08.2008, 10:26:00
    #35468064
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
Код: plaintext
alter trigger schema.trigger_name disable
...
Рейтинг: 0 / 0
04.08.2008, 10:37:45
    #35468105
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
esrМне приходится перекачивать данные в некую базу, которая имеет сильно много неправильных данных, и к тому же сильно зажата проверками и триггерами. Иногда надо поправить коды сразу в нескольких таблицах. Для этого я вручную через PL\SQL отключаю триггер, потом вношу изменения в таблицы, и затем снова включаю. А как сделать отключение и включение с помощью кода SQL ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin
   execute immediate 'alter trigger schema.trigger_name disable';
   update ..... ;
   commit;
   execute immediate 'alter trigger schema.trigger_name enable';
EXCEPTION
WHEN OTHERS THEN
   rollback;
   execute immediate 'alter trigger schema.trigger_name enable';
   raise;
end;
Кстати, а как Вы - "вручную через PL\SQL отключаю триггер"?
...
Рейтинг: 0 / 0
04.08.2008, 11:09:01
    #35468216
esr
esr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
pravednik
Код: plaintext
alter trigger schema.trigger_name disable


Спасибо! А как отключить Foreign Key ?

Извиняюся за свою неграмотность (Oraclом приходится сейчас заниматься по необходимости...)
...
Рейтинг: 0 / 0
04.08.2008, 11:10:39
    #35468221
esr
esr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
andreymx esrМне приходится перекачивать данные в некую базу, которая имеет сильно много неправильных данных, и к тому же сильно зажата проверками и триггерами. Иногда надо поправить коды сразу в нескольких таблицах. Для этого я вручную через PL\SQL отключаю триггер, потом вношу изменения в таблицы, и затем снова включаю. А как сделать отключение и включение с помощью кода SQL ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin
   execute immediate 'alter trigger schema.trigger_name disable';
   update ..... ;
   commit;
   execute immediate 'alter trigger schema.trigger_name enable';
EXCEPTION
WHEN OTHERS THEN
   rollback;
   execute immediate 'alter trigger schema.trigger_name enable';
   raise;
end;
Кстати, а как Вы - "вручную через PL\SQL отключаю триггер"?

Ой, не совсем правильно выразился! Через PL\SQL Developer. Правой клавишей мышки.
...
Рейтинг: 0 / 0
04.08.2008, 11:22:16
    #35468271
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
esr pravednik
Код: plaintext
alter trigger schema.trigger_name disable


Спасибо! А как отключить Foreign Key ?

Извиняюся за свою неграмотность (Oraclом приходится сейчас заниматься по необходимости...)
Код: plaintext
alter table <table_name> disable CONSTRAINT <fk_name>;
...
Рейтинг: 0 / 0
04.08.2008, 11:24:29
    #35468284
Jannny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
esrИзвиняюся за свою неграмотность (Oraclом приходится сейчас заниматься по необходимости...)Безо всякого наезда, а Вы уверены, что Вам это действительно надо отключать, раз уж Вы с Ораклом не на ты?
ЗЫ: Просто очень похоже, что Вы пишите какую-то загрузку данных и делаете неправильный вывод...
...
Рейтинг: 0 / 0
04.08.2008, 11:25:17
    #35468287
pravednik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
Jannny esrИзвиняюся за свою неграмотность (Oraclом приходится сейчас заниматься по необходимости...)Безо всякого наезда, а Вы уверены, что Вам это действительно надо отключать, раз уж Вы с Ораклом не на ты?
ЗЫ: Просто очень похоже, что Вы пишите какую-то загрузку данных и делаете неправильный вывод...
+1
...
Рейтинг: 0 / 0
04.08.2008, 12:39:26
    #35468533
esr
esr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
Jannny esrИзвиняюся за свою неграмотность (Oraclом приходится сейчас заниматься по необходимости...)Безо всякого наезда, а Вы уверены, что Вам это действительно надо отключать, раз уж Вы с Ораклом не на ты?
ЗЫ: Просто очень похоже, что Вы пишите какую-то загрузку данных и делаете неправильный вывод...

Ну да, делаю загрузку данных в очень нехорошо спланированную базу. Спасибо за предостережение, но другого выхода в этой ситуации похоже нету. Мне и самому это в лом...
...
Рейтинг: 0 / 0
04.08.2008, 17:01:41
    #35469405
Jannny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
esrСпасибо за предостережение, но другого выхода в этой ситуации похоже нету. Мне и самому это в лом...Влом - это совсем другой смысл :) Вы уверены, что отключая констрейнты и триггера, Вы не вредите базе (с которой могут в этот момент работать не только Ваша сессия)?
...
Рейтинг: 0 / 0
04.08.2008, 18:00:05
    #35469584
esr
esr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
Jannny esrСпасибо за предостережение, но другого выхода в этой ситуации похоже нету. Мне и самому это в лом...Влом - это совсем другой смысл :) Вы уверены, что отключая констрейнты и триггера, Вы не вредите базе (с которой могут в этот момент работать не только Ваша сессия)?

Да, пока база не в работе. Спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.08.2016, 17:31:41
    #39300480
AndDem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
andreymx
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
   execute immediate 'alter trigger schema.trigger_name disable';
   update ..... ;
   commit;
   execute immediate 'alter trigger schema.trigger_name enable';
EXCEPTION
WHEN OTHERS THEN
   rollback;
   execute immediate 'alter trigger schema.trigger_name enable';
   raise;
end;

Кстати, а как Вы - "вручную через PL\SQL отключаю триггер"?

Вот такой вариант
Код: plsql
1.
2.
3.
4.
5.
6.
begin
  execute immediate 'alter trigger schema.trigger_name disable';
  update ..... ;
  commit;
  execute immediate 'alter trigger schema.trigger_name enable';
end;


мне выдает
Код: plsql
1.
ORA-04092: cannot COMMIT in a trigger


Любопытно, что та же ошибка появляется и при отсутствии commit внутри begin-end . Правда, выполняю не в "чистом" редакторе, а в некой оболочке, которая, возможно, добавляет что-то свое.
Если добавляю
Код: plsql
1.
2.
declare
  pragma autonomous_transaction;    


то триггер нормально отключается и потом включается, но update не отрабатывает (во всяком случае, данные не изменяются).
Сам триггер не содержит pragma autonomous_transaction .
Не подскажете, что можно сделать, чтоб и триггер отключался на момент update , и сам update отрабатывал?
...
Рейтинг: 0 / 0
30.08.2016, 17:48:01
    #39300494
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
AndDemНе подскажете, что можно сделать, чтоб и триггер отключался на момент update , и сам update отрабатывал?Этого достигают условностью в теле триггера.
А подход с отключением триггера допустим только при регламентных работах, когда никто другой не может одновременно изменять ту же таблицу.
...
Рейтинг: 0 / 0
30.08.2016, 18:02:21
    #39300511
AndDem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
Elic,

Да, Вы правы. Буду искать другое решение. Спасибо!
...
Рейтинг: 0 / 0
31.08.2016, 05:13:58
    #39300746
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить триггер с помощью SQL ? Help!
AndDemElic,

Да, Вы правы. Буду искать другое решение. Спасибо!

Сталкивался в реале, когда выполнение несколькими пользователями порядка 10000 простых операций одновременно вместо двух-трех минут парализовало нормальную работу БД на несколько часов/дней.
Потому как настоящие гуру умеют в процедурах через динамический SQL включать/выключать триггеры.

См. library cache locks по теме.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как отключить триггер с помощью SQL ? Help! / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]