Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
ORAngutang
Member

Откуда:
Сообщений: 1755
в коде выполняется:

begin
...
insert into XYZ ... ;
--тут никаких коммитов нет!!!!
exception
when others then
raise_application_error( -20000, 'Exception-SoAndSo here ..... in ... sqlerrm = ' || sqlerrm( sqlcode ) );
end;

уникальная стока от эксцепшена (Exception-SoAndSo) появляется, sqlcode является ни чем иным нежели ORA-04091*
ОДНАКО обнаруживаю что вставка произведена!!! (Дополнительно - ради теста - вставил в это место INSERTы и в другие таблицы - всё потом зафиксировано(закомичено!)!!!!!) Непонятно почему - ведь в случае других sqlcode всё откатывается! Неужто Оракл делает для ORA-04091 исключение из правил!!!? (типа рассматриваем сие как warning?)


* - "ORA-04091: table name is mutating, trigger/function may not see it."

____________________________________________________________
сейчас работаю на: Oracle 11.2.0.1.0, 64bit, standard edition, SLES-10. APEX 3.2
20 май 11, 19:43    [10686890]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
ORAngutang,

DDL ?
20 май 11, 19:53    [10686922]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
ORAngutang,

для начала - отследите, изменяется ли dbms_transaction.local_transaction_id
ну и ролбека то тут тоже не видно. возможно, эксепшен похерил кто-то выше по стеку вызовов.
20 май 11, 20:04    [10686938]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
ORAngutang,

вообще-то вы сами должны выполнять откат в обработке исключения.
20 май 11, 21:26    [10687168]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

Alexander Ryndin
вообще-то вы сами должны выполнять откат в обработке исключения.

Откат транзакции - туда-сюда, но разве ошибка, случившаяся в триггере, не должна
автоматически вызвать откат запроса, приведшего к ней?..

Posted via ActualForum NNTP Server 1.4

20 май 11, 21:47    [10687224]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4917
Блог
Dimitry Sibiryakov
Alexander Ryndin
вообще-то вы сами должны выполнять откат в обработке исключения.

Откат транзакции - туда-сюда, но разве ошибка, случившаяся в триггере, не должна
автоматически вызвать откат запроса, приведшего к ней?..
На возникшую ошибку я не глянул.

Тем не менее? этот INSERT (не транзакция) должен был откатиться, если ошибку с мутацией вызвал именно он. Хотя ХЗ, что там наверчено в этом триггере.

Ну а в обработчике exception должен быть ROLLBACK.
20 май 11, 22:04    [10687274]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
donner-gms
Member [заблокирован]

Откуда:
Сообщений: 1701
ORAngutang,

у вас нет отката в обработчике, вполне возмжно, кто-то дальше глотает исключение и коммитит
21 май 11, 11:34    [10688226]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Ora_ngutang
Guest
Alexander Ryndin
Dimitry Sibiryakov
пропущено...

Откат транзакции - туда-сюда, но разве ошибка, случившаяся в триггере, не должна
автоматически вызвать откат запроса, приведшего к ней?..
На возникшую ошибку я не глянул.

Тем не менее? этот INSERT (не транзакция) должен был откатиться, если ошибку с мутацией вызвал именно он. Хотя ХЗ, что там наверчено в этом триггере.

Ну а в обработчике exception должен быть ROLLBACK.


Cпасибо! Ну нифигаж себе в какой важной вещи я доселе заблуждался!!!

"Also, if a stored subprogram fails with an unhandled exception, PL/SQL does not roll back database work done by the subprogram."
21 май 11, 13:00    [10688346]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18367
Ora_ngutang
Cпасибо! Ну нифигаж себе в какой важной вещи я доселе заблуждался!!!

"Also, if a stored subprogram fails with an unhandled exception, PL/SQL does not roll back database work done by the subprogram."


Так-то оно так, только до конца ли Вы понимаете что конкретно имеется ввиду?

create or replace procedure ane_pr as
begin
  insert into ane_t(a) values(2/0);
end;
/
 
Procedure created

begin
  insert into ane_t(a) values(1);
  ane_pr;
  insert into ane_t(a) values(3);
end;
/
 
begin
  insert into ane_t(a) values(1);
  ane_pr;
  insert into ane_t(a) values(3);
end;
 
ORA-01476: divisor is equal to zero
ORA-06512: at "ANDREY.ANE_PR", line 3
ORA-06512: at line 4
select * from ane_t;
 
         A
----------
 
SQL> 
21 май 11, 13:31    [10688408]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63986
Блог
Alexander Ryndin
Ну а в обработчике exception должен быть ROLLBACK.

Неубедительно.

Если бы Вы сказали "в обработчике исключения в процедуре, обычно завершающейся коммитом" - можно согласиться.
21 май 11, 13:37    [10688415]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Ora_Ngutang
Guest
andrey_anonymous,

автор
только до конца ли Вы понимаете что конкретно имеется ввиду?


Надеюсь что, да! Т.е. в вашем случае откатил именно SQL-Plus (у которого такое поведение вроде как по умолчанию), а не PL-SQL-машина, о которой речь в доке.
22 май 11, 04:19    [10689952]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
Ora_Ngutang,

нет, плюс тут не причем, да и откатов "по умолчанию" в нем нет.
Попробуйте выполнить те же три строки, но не в блоке, а как скрипт, по очереди, невзирая на ошибку.

insert into ane_t(a) values(1);
ane_pr;
insert into ane_t(a) values(3);
22 май 11, 08:18    [10690015]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
Dimitry Sibiryakov
Alexander Ryndin
вообще-то вы сами должны выполнять откат в обработке исключения.

Откат транзакции - туда-сюда, но разве ошибка, случившаяся в триггере, не должна
автоматически вызвать откат запроса, приведшего к ней?..


откат запроса, а не всей транзакции!
А вот, что является запросом, зависит от способа вызова.
22 май 11, 08:23    [10690017]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51785

Bfink
А вот, что является запросом, зависит от способа вызова.

Насколько я понял из первого поста, это был обычный insert, один из триггеров которого
нарвался на мутацию.

Posted via ActualForum NNTP Server 1.4

22 май 11, 11:41    [10690208]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Ora_Ngutang
Guest
Dimitry Sibiryakov
Bfink
А вот, что является запросом, зависит от способа вызова.

Насколько я понял из первого поста, это был обычный insert, один из триггеров которого
нарвался на мутацию.


это был инсерт в некой процедуре пакета, вызываемой по некоему другому (statement-)триггеру!
Так что я снова нихрена не понимаю :-(
22 май 11, 13:42    [10690404]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
Ora_Ngutang
Dimitry Sibiryakov
пропущено...

Насколько я понял из первого поста, это был обычный insert, один из триггеров которого
нарвался на мутацию.


это был инсерт в некой процедуре пакета, вызываемой по некоему другому (statement-)триггеру!
Так что я снова нихрена не понимаю :-(


Про что я и говорю - важен способ вызова. И самое важное как отработал (или прервался) самый внешний вызов или тот до которого дошло прерывание (и где было обработано). Так что приведите полный стек вызова и что получилось, а мы вам объясним почему.
Важно также к какому тригеру относится ORA-04091, так как проблемы, возникшие при Insert никак не могут при такой схеме использования на уровне блока повлиять на уже внесенные в таблицу предыдущими insert-ами данные. Чтобы эти, внесенные до ошибки данные, откатить нужно или явно выдать Rollback или, не обрабатывая прерывания, получить его на уровне клиентской программы.
22 май 11, 16:43    [10690608]     Ответить | Цитировать Сообщить модератору
 Re: происходит необъяснимое: Отсутствие Rollback-a несмотря на Exception!!!  [new]
Bfink
Member

Откуда: Москва
Сообщений: 2797
Dimitry Sibiryakov
Bfink
А вот, что является запросом, зависит от способа вызова.

Насколько я понял из первого поста, это был обычный insert, один из триггеров которого
нарвался на мутацию.


Insert или блок, содержащий еще какие-либо операторы и обработку прерывания, - это "две большие разницы"!
22 май 11, 16:45    [10690611]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить