Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как обойти триггер / 20 сообщений из 20, страница 1 из 1
12.10.2016, 18:27
    #39325584
kubes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
В БД успешно долгое время работает триггер AFTER UPDATE OR INSERT OR DELETE FOR EACH ROW, но очень похоже, что на днях был update данных в таблице, на которой висит этот триггер, и он не сработал. База сторонняя, поэтому там могли нахимичить как угодно, но ALL_OBJECTS показывает, что триггер не отключался и не изменялся.

Отсюда вопрос, есть ли способы (какие-то опции или методы внесения данных), которые позволяют обновить записи мимо триггера?
...
Рейтинг: 0 / 0
12.10.2016, 18:33
    #39325589
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubes,

Интересно, каким образом ALL_OBJECTS может показать, что триггер не отключался?
По вашему вопросу - например exchange partition можно обновить данные в обход триггера, можно наверное поизмышлять еще как нибудь...

Best regards

Maxim
...
Рейтинг: 0 / 0
12.10.2016, 18:46
    #39325603
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
...
Рейтинг: 0 / 0
12.10.2016, 19:00
    #39325619
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubesмимо триггера?Ошибка в 17-ой строке.
...
Рейтинг: 0 / 0
12.10.2016, 19:01
    #39325622
veep
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubesВ БД успешно долгое время работает триггер AFTER UPDATE OR INSERT OR DELETE FOR EACH ROW, но очень похоже, что на днях был update данных в таблице, на которой висит этот триггер, и он не сработал. База сторонняя, поэтому там могли нахимичить как угодно, но ALL_OBJECTS показывает, что триггер не отключался и не изменялся.

Отсюда вопрос, есть ли способы (какие-то опции или методы внесения данных), которые позволяют обновить записи мимо триггера?

Надо смотреть код триггера. Может там какой нибудь exception when others или еще что.
...
Рейтинг: 0 / 0
12.10.2016, 20:24
    #39325663
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubes,

как варіант, прямая загрузка
наскоко помню мимо триггевов

....
stax
...
Рейтинг: 0 / 0
12.10.2016, 20:36
    #39325666
kubes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Maxim Demenko, да, с отключением я, пожалуй, погорячился, просто не было DDL. Данных пришло мало, поэтому exchange partition не подойдет.

Elic, тоже не подходит - LOB'ов нет.

veep, обработок исключений тоже никаких нет, как не было и ошибок при этом.


Из того, что удалось найти, вроде бы относительно интересный вариант - это dbms_xstream_gg.set_foo_trigger_session_contxt. Но как-то шибко хитро, не верится, что могло быть использовано что-то подобное.

Может быть, есть какой-то вариант проследить историю состояния триггера?
...
Рейтинг: 0 / 0
12.10.2016, 20:41
    #39325671
kubes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
stax.., ну просто append же вряд ли отключит, или ошибаюсь?
...
Рейтинг: 0 / 0
12.10.2016, 20:52
    #39325676
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Ну, вообще то при exchange partition порция измененных данных может быть любой - от 0% до 146%,
append hint игнорируется если есть триггер, проследить изменение состояния триггера имхо - или audit или logminer.

Regards

Maxim
...
Рейтинг: 0 / 0
13.10.2016, 07:42
    #39325835
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Editions?
...
Рейтинг: 0 / 0
13.10.2016, 08:06
    #39325840
Как обойти триггер
kubesНо как-то шибко хитро, не верится, что могло быть использовано что-то подобное.Если оно в репликации и триггер fire_once, то ничего хитрого - штатная ситуация. Применимо не только к ГГ, но и стримсам вообще.
...
Рейтинг: 0 / 0
13.10.2016, 08:50
    #39325864
!Z!
!Z!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubes,

Есть такая фича
dbms_xstream_gg.set_foo_trigger_session_contxt(fire=>true);
которая напрямую отключала триггеры на сессию в версиях Oracle до 11.2.0.4

Потом пофиксили, но все равно можно обойти ограничение довольно извратным способом https://www.pythian.com/blog/disabling-triggers-in-oracle-11-2-0-4/
...
Рейтинг: 0 / 0
13.10.2016, 12:51
    #39326176
kubes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Maxim Demenko, имел в виду, что малая часть партиции изменилась. Audit и LogMiner недоступны, тк БД чужая, но спасибо за дельные комментарии.

Elic, EE 11.2.0.3.

триггер фиринг проперты, штатная может, но маловероятно, что кто-то руками там ее запустил. Тут похоже, что цели такой такой не было, но случайно как-то обошли этот триггер, внеся данные особым способом.

!Z!, мы же как раз обсуждаем эту процедуру.
...
Рейтинг: 0 / 0
13.10.2016, 17:01
    #39326494
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Имхо для начала попробовать повторить этот же апдейт/инсерт (с такими же данными), если будет ощущение, что триггер как бы все равно не сработал, значит надо разбираться с самим триггером )
...
Рейтинг: 0 / 0
13.10.2016, 17:06
    #39326497
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Т.е. вариантов немного же:
- апдейта не было
- апдейт был, но триггер сработал не так, как ожидается
- триггер кто-то отключил, как-то обошел (самый маловероятный имхо, то есть сначала разобраться с первыми двумя))
...
Рейтинг: 0 / 0
13.10.2016, 20:36
    #39326626
kubes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
Avotge, предыдущие два отмел, поэтому перешел к третьему.
...
Рейтинг: 0 / 0
13.10.2016, 22:07
    #39326663
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubesAvotge, предыдущие два отмел, поэтому перешел к третьему.

А что-же тут переходить? С него и надо было начинать:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
SQL> create table tbl(n number);

Table created.

SQL> create or replace
  2    trigger tbl_bir
  3      before insert
  4      on tbl
  5      for each row
  6      begin
  7          null;
  8  end;
  9  /

Trigger created.

SQL> select to_char(last_ddl_time,'mm/dd/yyyy hh24:mi:ss')
  2    from user_objects
  3    where object_name = 'TBL_BIR'
  4  /

TO_CHAR(LAST_DDL_TI
-------------------
10/13/2016 15:02:48

SQL> alter trigger tbl_bir disable
  2  /

Trigger altered.

SQL> select to_char(last_ddl_time,'mm/dd/yyyy hh24:mi:ss')
  2    from user_objects
  3    where object_name = 'TBL_BIR'
  4  /

TO_CHAR(LAST_DDL_TI
-------------------
10/13/2016 15:04:00

SQL> alter trigger tbl_bir enable
  2  /

Trigger altered.

SQL> select to_char(last_ddl_time,'mm/dd/yyyy hh24:mi:ss')
  2    from user_objects
  3    where object_name = 'TBL_BIR'
  4  /

TO_CHAR(LAST_DDL_TI
-------------------
10/13/2016 15:04:23

SQL>




А вот кто - это уже в аудит или в log miner.

SY.
...
Рейтинг: 0 / 0
14.10.2016, 10:52
    #39326865
kubes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
SY, по USER_OBJECTS никаких изменений не было, в первом посте написал.
...
Рейтинг: 0 / 0
14.10.2016, 11:57
    #39326932
user1241
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubesочень похоже, что на днях был update данных в таблице, на которой висит этот триггер, и он не сработал
по LAST_DDL_TIME нельзя делать выводов, что триггер не сработал.
Очень похоже, что сработал, но не так как нужно, из-за какой-нибудь типичной ошибки
...
Рейтинг: 0 / 0
14.10.2016, 15:57
    #39327208
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обойти триггер
kubesUSER_OBJECTS никаких изменений не было, в первом посте написал.

Значит триггер (или eго часть) при каких-то условиях (например в триггере есть WHEN clause) не вызывается или есть проверка данных по результатам которой триггер не выполняет какую-то часть, и.т.п.

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


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