2009-11-26 154 views
1

我正在用Oracle數據庫構建J2EE Web應用程序。應用程序服務器使用JDBC連接池到Oracle數據庫A(例如,最多20個連接),並且通過數據庫鏈接執行的一些查詢使用遠程Oracle數據庫B中的表。Oracle JDBC連接池與數據庫鏈接

如果App Server創建了20個連接到數據庫A,並且所有查詢都在數據庫B中查找數據,那麼數據庫A是否會創建20個到數據庫B的連接?或者所有查詢都通過相同的連接隧道?

回答

2

本地和遠程數據庫會話之間存在一對一的關係。 必須針對以下情況: 本地DB上的會話A1運行INSERT INTO table @ B VALUES('A1'); 該插入是會話A1的事務的一部分。

會話A2出現並執行SELECT * FROM table @ B。 由於會話A1尚未提交,因此會話A2不應該看到該行。因此它需要一個與屬於A1的遠程會話不同的遠程會話。

同樣你可以有同時在數據庫B

有這將斷開遠程連接DBMS_SESSION.CLOSE_DATABASE_LINK程序對數據庫中的運行查詢的所有20次。當它拒絕關閉它們,甚至在提交後立即聲稱'未完成的事務'時,我在那個(9i數據庫)中遇到了一些問題。它似乎與緩存的PL/SQL遊標有關。它可能不再是一個問題。