暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ora-01453设置事务必须是在3个数据库之间使用2个dblink时的第一个事务语句

askTom 2017-05-16
1197

问题描述

嗨,汤姆,
我有一个返回ref游标的存储过程,该过程在DB.1 (10g) 中运行,从DB.2 (11g) 上的远程视图中读取,该视图正在从DB.2中选择2个表的并集,另一个表来自远程DB.3 (11g)。

该过程是通过连接池从java程序调用的。最初,我不时收到错误 “ORA-02046分布式事务已经开始”,然后在光标打开之前添加以下行:

回滚;
设置事务只读;
立即执行 “alter session close dblink _ to _ db_2”;
打开cur1 for
选择 .....

现在,我不时收到另一个错误,ora-01453设置事务必须是事务的第一个语句,然后是ORA-02063: LINK_TO_DB_2的前一行。

使用sql plus或TOAD调用过程时,只有从Java程序调用时,才会发生此错误。请问有什么建议吗?


谢谢。

专家解答

很难通过互联网诊断这类问题。但听起来您在远程数据库上仍然有一个打开的事务。当你在SQL * Plus,TOAD等中运行你的代码时,你可能有一个新的会话。但是您的连接池可能在代码之前运行 “任何内容”,这会导致错误。

要深入了解它,请在代码中添加更多日志记录。具体捕获返回的内容:

select * from v$transaction
select * from v$dblink
复制


在本地和远程数据库上运行 “set transaction...” 语句之前和之后。

如果您仍在挣扎,请发布您正在运行的确切代码的详细信息以及从这些查询中获得的调试信息。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论