ORA-06519: 检测到活动的自主事务并回滚

Posted

技术标签:

【中文标题】ORA-06519: 检测到活动的自主事务并回滚【英文标题】:ORA-06519: active autonomous transaction detected and rolled back 【发布时间】:2017-11-08 16:53:53 【问题描述】:

我正在尝试在 java 函数中执行一些 DML 操作。并得到错误。

首先我打开连接并执行 DML。 然后在同一个函数中,我正在调用一个使用相同表进行 DML 操作的过程。过程中有commit语句。

我正在使用 XA oracle 数据源,所以自动提交是打开的,我不需要在 java 中进行提交。

但我收到 ORA-06519:检测到主动自主事务并回滚。我无法在 java 中指定提交选项,因为它会报错。

谁能帮帮我。

【问题讨论】:

我正在使用 IBM websphere 服务器以及使用配置的数据源的另一件事。是否需要在 WAS 配置中设置任何配置。我尝试在 java 中使用简单的 jdbc 运行相同的代码,没有错误。 【参考方案1】:

在函数和过程的开头使用pragma serially_reusable,如下所示:

创建或替换过程 pr_dml_operation 是

pragma serially_reusable;v_abc_1 号码; v_def_2 日期; ...开始

...

...

结束;

顺便说一句,永远不要在存储的编程块中使用 commit 语句,特别是。对外发行。否则,它可能会破坏您的某些 dml 操作的交易完整性

【讨论】:

我正在使用 IBM websphere 服务器以及使用配置的数据源的另一件事。是否需要在 WAS 配置中设置任何配置。我尝试在 java 中使用简单的 jdbc 运行相同的代码,没有错误。 @Sarbe85 好的,很好。我不了解 IBM Websphere。 抱歉给您带来了困惑。我使用 JDBC 连接运行我的代码而没有更改编译指示,它运行了。这在使用 WAS 数据源时不运行。现在我正在尝试合并上述更改,但必须在包规范中声明错误 Pragma SERIALLY_REUSABLE @Sarbe85 你必须将声明 Pragma SERIALLY_REUSABLE 嵌入到 oracle 的 function, procedure body or package's definition&body 中,就在它们的定义之后。 实际上有一个pragma自治事务。所以没有改变任何东西。按照建议从过程中删除了所有提交语句。然后它起作用了。谢谢

以上是关于ORA-06519: 检测到活动的自主事务并回滚的主要内容,如果未能解决你的问题,请参考以下文章

事务的4个要素及其工作原理

如何使 SET XACT_ABORT ON 回滚事务?

Spring 事务 转

关于项目中遇到的问题-- trycatch 手动回滚事务

Spring 的 TestNG 回滚事务不起作用

Wcf 事务和 SQL 存储过程