C#+ADO.NET+Oracle+SAVEPOINT = ORA-02074: cannot SET SAVEPOINT in a distributed transaction

Oleg Martynenko
Дата: 18.02.2005 11:36:27
Проблема: Вызываю хранимую процедуру через OracleCommand.ExecuteNonQuery();. Если в хранимой процедуре встречается SAVEPOINT xx, то возникает следующая ошибка:
ORA-02074: cannot SET SAVEPOINT in a distributed transaction
...
Та же самая процедура без ошибок выполняется из других программ (напр. SQL Navigator).
Идей уже никаких не осталось, может есть у кого идеи по этому поводу.

БД: Oracle 8.1.7; C#; ADO.NET; База имеет линки на другие базы ...
Va1entin
Дата: 18.02.2005 13:53:29
К сожалению, только идеи.
1. Можно попробовать как-нибудь исключить SET SAVEPOINT
из процедуры и вызывать как-нибудь в триггере.
2. Искать, откуда запускается распределённая транзакция.
Если другие программы запускают процедуру корректно,
значит, и .NET-платформу можно настроить соответственно.

Posted via ActualForum NNTP Server 1.1

Oleg Martynenko
Дата: 18.02.2005 14:02:22
Исключить SAVEPOINT не могу, т.к. процедура завраплена (не я писал, а автора уж нет 8( ).
Oleg Martynenko
Дата: 18.02.2005 14:03:02
А как настроить-то? 8(
Oleg Martynenko
Дата: 18.02.2005 14:05:34
У меня идеи кончились ... на MSDN и Oracle нету ничего по этому вопросу ...
Пробовал как-то использовать транзакции OracleConnection, но без толку (или я крив, или они тут непричём).
profil
Дата: 18.02.2005 14:10:33
дык может в форупе Oracle"а спросить...
Va1entin
Дата: 18.02.2005 14:15:25
Oleg Martynenko
А как настроить-то?

Вы просили идеи, вот я указал направление,
в котором надо искать.
Ищите, как .NET запускает процедуру.
Если в транзакции, а в процедуре есть линки
к другим базам, то транзакция становится распределённой.
Это подсказка.
Лично у меня работают процедуры
использующие транзакции, но на MSSQL.
Распределённых транзакций всегда можно избежать.

Posted via ActualForum NNTP Server 1.1

Oleg Martynenko
Дата: 21.02.2005 12:53:55
to Va1entin: Спасибо.