Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка с автономными транзакциями / 20 сообщений из 20, страница 1 из 1
03.01.2020, 09:36
    #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
03.01.2020, 09:54
    #39910520
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
Версия Oracle 12.1
...
Рейтинг: 0 / 0
03.01.2020, 10:04
    #39910522
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
С Новым Годом!
В первую очередь WHEN OTHERS
...
Рейтинг: 0 / 0
03.01.2020, 10:17
    #39910526
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
IMNO
Может есть какая настройка в оракле, которая отвечает за "Общее количество транзакций в системе" или что-то вроде того, и её можно расширить?
"У меня говнокод, но перебирать его не хочется" :|
...
Рейтинг: 0 / 0
03.01.2020, 10:24
    #39910527
IMNO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
Elic
"У меня говнокод, но перебирать его не хочется" :|

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

И почему валится именно на 98 запросах? Откуда оно берет 98? Ну точнее это число явно как-то считается. Так вот вопрос, как оно считается?
...
Рейтинг: 0 / 0
03.01.2020, 10:29
    #39910528
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
IMNO
просто подскажите куда смотреть.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM и сможешь забрать своих два молочных коктейля.
...
Рейтинг: 0 / 0
03.01.2020, 10:39
    #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
03.01.2020, 10:46
    #39910534
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
IMNO
Так, то есть вы утверждаете, что при создании документов, большая часть запросов падает в
Хочешь поговорить сам с собой - говори.
IMNO
он уже делал. Ошибка не исчезла.
Метод тыка.


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


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


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

Да и вообще никогда не использовать подобный код
...
Рейтинг: 0 / 0
03.01.2020, 11:07
    #39910537
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
И да, насколько мое пьяное тело помнит -- в PL/SQL отслеживается рекурсивность до 50 вложений
...
Рейтинг: 0 / 0
03.01.2020, 12:25
    #39910543
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
Вячеслав Любомудров
в PL/SQL отслеживается рекурсивность до 50 вложений
Чересчур общё. В триггерах - может быть.
...
Рейтинг: 0 / 0
03.01.2020, 12:39
    #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
03.01.2020, 12:47
    #39910546
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
Вячеслав Любомудров
Ну, я видел только такое
Это не PL/SQL - это рекурсивный SQL.
...
Рейтинг: 0 / 0
03.01.2020, 12:51
    #39910548
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
Это просто самое простое
Мне (как DBA) приходится сталкиваться с подобным кодом
...
Рейтинг: 0 / 0
03.01.2020, 13:07
    #39910549
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка с автономными транзакциями
IMNO

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

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

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


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

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

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

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

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


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