Oracle ORA-02089 с Java

Я получаю следующую ошибку при попытке вызвать хранимую процедуру PL/SQL из Java: ORA-02089: COMMIT is not allowed in a subordinate session

он отлично тестируется от Oracle. У кого-нибудь есть опыт в этом?

3 ответов


попробуйте эти способы;

  • измените источник данных для использования Non-XA (и проверьте " поддерживает глобальный Транзакции" & "эмуляция двухфазной фиксации" кнопки)
  • удалите фиксацию из кода.
  • используйте "PRAGMA AUTONOMOUS_TRANSACTION". Это вид создать отдельная транзакция, которая позволит использовать commit.Для пример: создать процедуру XXX как Pragma AUTONOMOUS_TRANSACTION; начать ...

Что говорит документация oracle об ошибке:

COMMIT был выпущен в сеансе, который не является двухфазным глобальным commit координатор.

в основном вы выполняете распределенную транзакцию. В рамках распределенной транзакции вы пытаетесь вызвать автономную транзакцию. Это невозможно, поскольку распределенные транзакции необходимы для выполнения 2PC.


Хм, я думаю, это связано с XA. Он отлично работает, когда я скобки хранимой процедуры с AUTONOMOUS_TRANSACTION Pragma:

PROCEDURE foo (val IN VARCHAR2(4000)) is
  PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN
  INSERT INTO tbl1 VALUES (val);
  DELETE FROM tbl2;
  COMMIT;
END foo;