需要在XA事务中使用带有DBLink调用的旧版PLSQL,并且不能使用共享连接

时间:2014-08-01 20:32:00

标签: oracle java-ee distributed-transactions dblink xa

我在数据库A中有一个Oracle PLSQL程序,它通过DBLink从其他数据库B中选择数据。我从Java EE应用程序调用PLSQL程序。直到现在,一切正常。数据库B不在我的范围内,它属于外部提供商。

现在我必须升级Java EE应用程序,使用另一个Java EE应用程序(调用EJB),所以我需要一个XA数据源来管理分布式事务。然后它给出了“ORA-24777:不允许使用不可迁移的数据库链接”错误。我搜索了一个解决方案是通过MTS(共享)连接dblink连接到B.我无法将DBLink更改为共享连接(因为客户限制)。

有没有办法告诉数据库A中的Oracle,DBLink是用于select(只读数据)所以不必将分布式事务传播到数据库B? 我尝试定义一个AUTONOMOUS_TRANSACTION,并设置READ ONLY TRANSACTION,但不起作用。还尝试为远程表定义READ ONLY视图,不起作用

还有其他可能无法应用的解决方案,例如在A中有物化视图,从B读取数据(外部提供商不允许)。

这两个数据库都是ORacle 11g Release 11.2.0.2.0

1 个答案:

答案 0 :(得分:0)

我相信我以前见过这个错误,我认为我解决这个问题的方法是创建一个非xa数据源,因为没有必要将事务传播到远程数据库,因为我没有更改数据远程数据库。如果你在分布式事务中开始,你仍然可以在尾端使用非xa连接,如果你可以构造事务的执行路径以使用这个非xa last(非xa可以提交很长时间)因为这是最后一次提交)。我在别处读到的另一个解决方案是创建共享数据库链接。