带有DB Link的Java查询未关闭DB Link连接

带有DB Link的Java查询未关闭DB Link连接,java,database,oracle,jpa,database-link,Java,Database,Oracle,Jpa,Database Link,我有一个连接到数据库a的Java代码。数据库a有到数据库B的DB链接。 这两个数据库都是oracle 我与数据库a建立了JPA连接 然后我运行一个查询,将数据库a中的表连接到数据库B中的表 然后关闭与数据库A的连接 简单的代码 我仍然看到数据库B上的DB链接连接处于打开状态。它没有关门。知道为什么吗? 我假设它应该由内部处理,对吗 想法?如果关闭与数据库的连接,所有数据库链接连接都将自动关闭 因此,如果你观察开放链接会话,它们来自其他尚未关闭的连接 由于性能原因,数据库链接连接没有在每次分布式查

我有一个连接到数据库a的Java代码。数据库a有到数据库B的DB链接。 这两个数据库都是oracle

我与数据库a建立了JPA连接 然后我运行一个查询,将数据库a中的表连接到数据库B中的表 然后关闭与数据库A的连接 简单的代码

我仍然看到数据库B上的DB链接连接处于打开状态。它没有关门。知道为什么吗? 我假设它应该由内部处理,对吗


想法?

如果关闭与数据库的连接,所有数据库链接连接都将自动关闭

因此,如果你观察开放链接会话,它们来自其他尚未关闭的连接

由于性能原因,数据库链接连接没有在每次分布式查询后立即关闭,而是有意保持打开状态,以便在下一个语句中重用

无论如何,您可以通过调用

 alter session close database link  link_name


插图。这主要是在达到最大

限制的情况下完成的,如果关闭到数据库的连接,所有数据库链接连接都将自动关闭

因此,如果你观察开放链接会话,它们来自其他尚未关闭的连接

由于性能原因,数据库链接连接没有在每次分布式查询后立即关闭,而是有意保持打开状态,以便在下一个语句中重用

无论如何,您可以通过调用

 alter session close database link  link_name


插图。这主要是在您达到最大值限制的情况下完成的

您可以添加代码吗?从schemaA中选择col1、col2。表T1连接schemaB。table2@Dblinknamet2on(T1.pk=T2.pk)代码很简单。1) 从EntityManager打开trsnaciton 2)选择上面的查询3)使用Merge 4)commit对数据库进行一些其他更新。是否可以添加代码?从schemaA中选择col1、col2。表T1加入schemaB。table2@Dblinknamet2on(T1.pk=T2.pk)代码很简单。1) 从EntityManager中打开trsnaciton 2)选择上面的查询3)使用Merge 4)commit对数据库进行一些其他更新。谢谢@Marmite Bomber 1。是的,我正在关闭连接,但数据库链接保持打开状态。我的作业每小时运行一次,多个链接保持打开状态。2.如果出于性能原因,DB链路连接保持打开状态-是否有办法重用它们,如果没有,我的连接数量将不断增加并将耗尽。3) 我是否应该在处理后立即运行另一个JPA查询来更改会话关闭数据库链接链接\u名称?1)请描述您观察到的情况,以及如何解释DB B中的会话与DB A中的关闭会话相关(Oracle支持就是这种情况)。2) 它们会在下一个分布式语句中自动重用,但只能从打开它们的会话中重用。3) 如果您知道只使用一个分布式查询,然后是一个长时间运行的本地会话,那么这可能是有意义的。1)我让DBA关闭了数据库上的所有会话。我的工作时间是上午11:00、下午12:00、下午1:00。在准确的时间-新连接已打开,但从未关闭。我可以在它打开的时候追踪到它们。3小时后,三个连接打开,打开时间戳分别为上午11:00、下午12:00、下午1:00。2) 每次创建一个新连接-这意味着新会话。在该事务完成后(如上所述),连接将关闭。)感谢@Marmite Bomber 1。是的,我正在关闭连接,但数据库链接保持打开状态。我的作业每小时运行一次,多个链接保持打开状态。2.如果出于性能原因,DB链路连接保持打开状态-是否有办法重用它们,如果没有,我的连接数量将不断增加并将耗尽。3) 我是否应该在处理后立即运行另一个JPA查询来更改会话关闭数据库链接链接\u名称?1)请描述您观察到的情况,以及如何解释DB B中的会话与DB A中的关闭会话相关(Oracle支持就是这种情况)。2) 它们会在下一个分布式语句中自动重用,但只能从打开它们的会话中重用。3) 如果您知道只使用一个分布式查询,然后是一个长时间运行的本地会话,那么这可能是有意义的。1)我让DBA关闭了数据库上的所有会话。我的工作时间是上午11:00、下午12:00、下午1:00。在准确的时间-新连接已打开,但从未关闭。我可以在它打开的时候追踪到它们。3小时后,三个连接打开,打开时间戳分别为上午11:00、下午12:00、下午1:00。2) 每次创建一个新连接-这意味着新会话。该事务完成后连接关闭(如上所述))