带有数据库链接的 Oracle JDBC 连接池
Posted
技术标签:
【中文标题】带有数据库链接的 Oracle JDBC 连接池【英文标题】:Oracle JDBC connection pooling with database link 【发布时间】:2009-11-26 04:51:00 【问题描述】:我正在使用 Oracle 数据库构建 J2EE Web 应用程序。应用服务器使用 JDBC 连接池连接到 Oracle 数据库 A(例如,最多 20 个连接),并且执行的一些查询通过数据库链接使用远程 Oracle 数据库 B 中的表。
如果应用服务器创建了 20 个到数据库 A 的连接,并且所有查询都在数据库 B 中查找数据,那么数据库 A 会创建 20 个到数据库 B 的连接吗?还是所有查询都通过同一个连接隧道?
【问题讨论】:
【参考方案1】:本地和远程数据库会话之间存在一对一的关系。 必须有以下情况: 本地数据库上的会话 A1 运行 INSERT INTO table@B VALUES ('A1'); 该插入是 Session A1 事务的一部分。
会话 A2 出现并执行 SELECT * FROM table@B。 因为会话 A1 尚未提交,所以会话 A2 不应该看到该行。因此,它需要一个不同于属于 A1 的远程会话。
同样,您可以让数据库 A 上的所有 20 个会话同时在数据库 B 上运行查询。
有一个 DBMS_SESSION.CLOSE_DATABASE_LINK 过程将断开远程连接。我遇到了一些问题(9i 数据库),当它拒绝关闭它们声称“未完成的事务”时,即使在提交后立即。它似乎与缓存的 PL/SQL 游标有关。这可能不再是问题了。
【讨论】:
以上是关于带有数据库链接的 Oracle JDBC 连接池的主要内容,如果未能解决你的问题,请参考以下文章