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: 检测到活动的自主事务并回滚的主要内容,如果未能解决你的问题,请参考以下文章