powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка с автономными транзакциями
20 сообщений из 20, страница 1 из 1
Ошибка с автономными транзакциями
    #39910518
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Опишу процесс.
Есть две подсистемы. Подсистема один (A) создаётся документ в подсистеме два (B) посредством вызова функции Schema_B.pkg_name.func() через dblink.
Функция вызывается не на прямую, а через самописное ядро коннекта (внутри используется DBLink).

Ядро берет функцию из таблицы настроек и вызывает функцию через динамический SQL.
Примерная структура ядра для подсистемы B такая:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
FUNCTION send()
RETURN NUMBER
  /*Формирование запроса через динамический SQL и таблицу настроек*/
  v_response := execute_actions();

  /*Автономная транзакция*/
  ins_log ();

  RETURN v_response;
  EXCEPTION
    WHEN OTHERS
    THEN
      /*Автономная транзакция*/
      ins_log ();
      RETURN v_response;
END;



Структура таблицы
ID actionObject functionName1 Doc1 pkg_name.func12 Doc2 pkg_name.func2

Теперь про ошибку.
Документы нужно выгрузить пачкой. Сейчас документов около 4000.
Когда подсистема A начинает выгружать в подсистему B документы, то на количестве запросов (коннектов DBLink) 98 штук (очень странное число) выдаёт ошибку:

Код: plsql
1.
ORA-55524: Too many recursive autonomous transactions for temporary undo



Автономные транзакции так же используются для логирования в подсистеме A, но доступа туда нет, поэтому структуру ядра привести не могу. Плюс я так же посмотрел функцию, которая берется из таблицы настроек: нет ли там использования других функций с автономными транзакциями. Их нет.

Короче, что делать? Куда смотреть?
Может есть какая настройка в оракле, которая отвечает за "Общее количество транзакций в системе" или что-то вроде того, и её можно расширить?
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910520
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия Oracle 12.1
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910522
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С Новым Годом!
В первую очередь WHEN OTHERS
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910526
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO
Может есть какая настройка в оракле, которая отвечает за "Общее количество транзакций в системе" или что-то вроде того, и её можно расширить?
"У меня говнокод, но перебирать его не хочется" :|
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910527
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
"У меня говнокод, но перебирать его не хочется" :|

Да я не против перебрать код, просто подскажите куда смотреть. С чего начать? Может вьюшки какие?
Мы со вчерашнего вечера втроём сидим не можем понять, что происходит.

И почему валится именно на 98 запросах? Откуда оно берет 98? Ну точнее это число явно как-то считается. Так вот вопрос, как оно считается?
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910528
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO
просто подскажите куда смотреть.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM и сможешь забрать своих два молочных коктейля.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910530
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
В первую очередь WHEN OTHERS

Elic
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM и сможешь забрать своих два молочных коктейля.


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

Самое интересное, что на наших базах для разработки мы только что импортировали 168 документов. Ошибки не было.
Ошибка с 98 запросов это на проде. Ну и соответственно ins_log из OTHERS убирали на проде.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910534
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO
Так, то есть вы утверждаете, что при создании документов, большая часть запросов падает в
Хочешь поговорить сам с собой - говори.
IMNO
он уже делал. Ошибка не исчезла.
Метод тыка.


IMNO
Только что поговорил с разработчиком, который писал ядро.
Говорить тебе нужно только с ним. Раз уж ты сформулировать не можешь, может у него получится.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910535
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оффтоп
Elic
Хочешь поговорить сам с собой - говори.


Ну да, ну да. Пошёл я нахер :)


Ладно. Я изначально так и предполагал, что из-за недостаточной формулировки, так как не я писал ядро, ничего не выйдет.
Ну я хотя бы попытался.
В любом случае спасибо, что хоть обратили внимание на мою тему.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910536
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не, чувак
Отследить рекурсивность не сложно
Самое простое -- перестать вызывать в обработчике ЛЮБЫХ ошибок саму подозреваемую процедуру

Да и вообще никогда не использовать подобный код
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910537
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, насколько мое пьяное тело помнит -- в PL/SQL отслеживается рекурсивность до 50 вложений
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910543
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
в PL/SQL отслеживается рекурсивность до 50 вложений
Чересчур общё. В триггерах - может быть.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910544
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я видел только такое

Код: 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.
55.
56.
57.
58.
59.
60.
61.
62.
psi> select * from v$version;

BANNER
--------------------------------------------------------------------------------
BANNER_FULL
-----------------------------------------------------------------------------------------------------
BANNER_LEGACY                                                                        CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production                    0


psi> create function f1 return number
  2  as
  3   r number;
  4  begin
  5   select f1() into r from dual;
  6   return r;
  7  end;
  8  /

Function created.

psi> select f1() from dual;
select f1() from dual
       *
ERROR at line 1:
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-06512: at "SYSTEM.F1", line 5
ORA-065


psi> 
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910546
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров
Ну, я видел только такое
Это не PL/SQL - это рекурсивный SQL.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910548
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это просто самое простое
Мне (как DBA) приходится сталкиваться с подобным кодом
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910549
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO

просто подскажите куда смотреть. С чего начать?

Добавьте в код фиксацию (в таблице какой или в аутпут), какой именно документ и какая функция из таблицы
IMNO

Структура таблицы
ID actionObject functionName1 Doc1 pkg_name.func12 Doc2 pkg_name.func2


обрабатываются.
так вы локализуете, на чём падает.
И потом смотрите эту функцию и документ, что там не так.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910553
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и народ подтянулся
Не мозгами, так хоть участием...
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39910576
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO,

не слетает ли сама програмулька логирования?
нет ли в ней
EXCEPTION
WHEN OTHERS
THEN
/*Автономная транзакция*/
ins_log ();

зы
возможно ошибка из-за данных (напр 2020год), поетому на тестовой и не слетает
добавлять отладочную информацию до выявления причины
зыы
Вячеслав Любомудров привел пример с 50
мож 98 ето ~ 50*2 (раз за два вызова считаете/49 раз отработало на 50 слет)

....
stax
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39911215
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNO
Короче, что делать? Куда смотреть?

Смотреть, откуда и почему там взялось recursive. Например, вывести dbms_utility.format_error_backtrace. Или просто логировать последовательность вызовов (только аккуратно. раз у вас кривизна с автономными транзакциями, значит делайте это, например, через dbms_pipe). Ну и по результатам вставлять фитиля тому, кто эту рекурсию допустил.
...
Рейтинг: 0 / 0
Ошибка с автономными транзакциями
    #39915733
microbash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте сравнить параметр базы temp_undo_enabled на продуктивном комплекте и тестовом.
Если различаются, выставите на боевом комплекте аналогично тестовому и запустите свою задачу.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка с автономными транзакциями
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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