powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-00164: autonomous transaction disallowed within distributed transaction
7 сообщений из 7, страница 1 из 1
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32072655
imklmnoprst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Помогите, пожалуйста, разобраться со следующей проблемой.

Вобщем есть PLSQL скрипт , PLSQL пакет и PLSQL процедура. В скрипте происходт вызов процедуры из пакета и процедуры отдельной от пакета. При выполнении скрипта возникает ошибка ORA-00164: autonomous transaction disallowed within distributed transaction.
Структурно скрипт можно описать так:

declare
cursor cur is
select *
from clients@dblink;

begin
open cur;
--
fetch cur into yy;
--
if cur%notfound then
--
close cur;
exit;

--
end if;
--
close cur;
--
-- далее идет несколько селектов из другой базы
-- через db link. Селекты типа:
--
select *
into aa
from sale@dblink
where
sale_id=yy.sale_id;
--
-- потом вызывается процедура из пакета. в пакете
-- нету обращений к другой базе через линки.
--
package_body.package(yy.id,aa.name ...);
--
-- затем вызывается отдельная процедура в которой
-- нет обращения к другой базе через линк, но есть
-- автономная транзакция и как раз на этой процедуре
-- вознакие ошибка ORA-00164.
--
oth_procedure();
--
end;


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


Заранее БОЛЬШОЕ спасибо!
...
Рейтинг: 0 / 0
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32072684
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>package_body.package(yy.id,aa.name ...);

Я думаю, что проблема тут во входных параметрах, которые хоть и независимые переменные, но наверняка имеют тип записи курсора открытого на удаленной базе. Возможно, что тип проверяется в run-time, отсюда и ошибка.

если б Вы привели тексты процедур полностью было бы понятней.
...
Рейтинг: 0 / 0
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32072689
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Problema coctoit b tom chto transaksiiy nachinaetcy c COMMIT
i zakanchivaetcy COMMIT(ROLLBACK).

pockolku mezdu
> select *
> into aa
> from sale@dblink
> where sale_id=yy.sale_id;--

i proceduroiy c pragmoy AUTONOMOUS_TRANSACTION net COMMIT
to poluchaetciy
ORA-00164: autonomous transaction disallowed within distributed transaction.

dalee avtonomnaia tranzakciya eto to chto yavno obyavleno kak
AUTONOMOUS_TRANSACTION
a ne:
-- затем вызывается отдельная процедура в которой
-- нет обращения к другой базе через линк, но есть
-- автономная транзакция и как раз на этой процедуре
-- вознакие ошибка ORA-00164.
...
Рейтинг: 0 / 0
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32072975
imklmnoprst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. что, мне надо поставить commit после селектов и до вызова процедуры?
...
Рейтинг: 0 / 0
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32073156
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
primer oformleniya avtonomnoiy tranzakcii

create or replace
function is_another_module(p_course_id number, p_module_id number) return boolean is
pragma autonomous_transaction;
n number;
begin
select 1 into n from modules
where p_course_id = course_id and p_module_id <> module_id;
return true;
exception when no_data_found then return false;
when too_many_rows then return true;
when others then return false;

end;
/
show errors;
...
Рейтинг: 0 / 0
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32073198
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2imklmnoprst: Да, именно так. Тебе нужно commit'ом отделить транзакцию состоящую из выборок из через линк, от собственно обработки, которая уже локальная, и зовёт твою автономно-транзакционную процедуру.
...
Рейтинг: 0 / 0
ORA-00164: autonomous transaction disallowed within distributed transaction
    #32074521
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу добавить, что впервые с сабжем столкнулся после перехода с 8.1.6 на 8.1.7, что заставило переписывать некоторые участки кода. В 9.0.1 ситуация не изменилась, но после перехода на 9.2.0 заново заработали вещи, связанные с использованием вызова процедур с pragma autonomous_transaction через db link. Так что версия оракла в данном случае весьма существенна.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-00164: autonomous transaction disallowed within distributed transaction
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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