【问题标题】:Java query with DB Link does not close the Db Link connection使用 DB Link 的 Java 查询不会关闭 Db Link 连接
【发布时间】:2020-08-03 10:19:13
【问题描述】:

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

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

我仍然看到数据库 B 上的数据库链接连接是打开的。它没有关闭。知道为什么吗? 我假设它应该在内部处理吧?

想法?

【问题讨论】:

  • 可以加代码吗?
  • Select col1, col2 from schemaA.Table T1 join schemaB.table2@Dblinkname T2 on (T1.pk=T2.pk)
  • 代码很简单。 1) 从 EntityManager 打开 trsnaciton 2) 选择上面的查询 3) 使用 Merge 对数据库 A 进行一些其他更新 4) 提交。

标签: java database oracle jpa database-link


【解决方案1】:

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

因此,如果您观察到打开的链接会话,它们源于其他尚未关闭的连接。

数据库链接连接出于性能原因不会在每次分布式查询后立即关闭,而是有意保持打开状态以便在潜在的下一条语句中重复使用。

无论如何,您都可以通过调用任何一个来明确关闭链接连接

 alter session close database link  link_name

DBMS_SESSION.CLOSE_DATABASE_LINK('link_name')

插图here。这主要是在您达到最大 open links 的限制时完成的

【讨论】:

  • 谢谢@Marmite Bomber 1。是的,我正在关闭连接,但数据库链接保持打开状态。我的工作每小时运行一次,并且多个链接保持打开状态。 2.如果出于性能原因DB链接连接保持打开状态 - 有没有办法重用它们,如果没有,我的连接数量正在增长并且会用完。 3) 我是否应该在处理后立即运行另一个 JPA 查询来更改会话关闭数据库链接链接名称?
  • 1) 请描述您观察到的情况以及您如何推断 DB B 中的会话与 DB A 中的 已关闭 会话相关。(这将是 Oracle 的情况支持)。 2)它们会在下一个分布式语句中自动重用,但只能从它们打开的会话中重用。 3) 如果你知道你只使用一个分布式查询后跟一个长时间运行的本地会话,这可能是有意义的。
  • 1) 我让 DBA 关闭数据库上的所有会话。我的工作按小时运行 - 上午 11:00、下午 12:00、下午 1:00。在确切的时间 - 新连接已打开,但它永远不会关闭。我可以在它打开时跟踪它们。 3 小时后,三个连接打开,打开时间戳为上午 11:00、下午 12:00、下午 1:00。 2)每次创建新连接时 - 这意味着新会话。该事务完成后连接关闭(如上所述))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多