Oracle JDBC Connection-Pooling mit Datenbank-Link
Frage
Ich baue eine J2EE-Web-Anwendungen mit Oracle-Datenbank. Der App-Server verwendet JDBC Connection-Pooling zu Oracle-Datenbank A (beispielsweise 20 Verbindungen max), und einige der Verwendungstabellen in Remote-Oracle-Datenbank B über Datenbank-Link ausgeführt Abfragen.
Wenn die App Server erstellt 20 Verbindungen zur Datenbank A, und alle Anfragen werden aufzublicken Daten in der Datenbank B, wird Datenbank A erstellen 20 Verbindungen zur Datenbank B? Oder alle Abfragen sind durch den gleichen Verbindungstunnel?
Lösung
Es gibt eine Eins-zu-eins-Beziehung zwischen den lokalen und Remote-Datenbanksitzungen. Es hat für die folgenden Situationen sein: Session A1 auf der lokalen DB verläuft INSERT INTO table @ B VALUES ( 'A1'); Das Insert ist Teil der Session A1 der Transaktion.
Session A2 kommt zusammen und macht eine SELECT * FROM Tabelle @ B. Da Session A1 noch nicht begangen hat, Sitzung A2 sollte die Zeile nicht sehen. Deshalb braucht es eine Remote-Sitzung, die von diesem gehört A1 verschieden ist.
Ebenso können Sie alle 20 Sitzungen auf Datenbank gleichzeitig eine laufende haben Abfragen auf Datenbank B.
Es gibt ein DBMS_SESSION.CLOSE_DATABASE_LINK Verfahren, das die Remote-Verbindung trennen wird. Ich hatte ein paar Probleme mit dem (9i-Datenbank), wenn er weigerte sich, sie zu schließen ‚ausstehenden Transaktionen‘ sogar unmittelbar nach einem Commit behaupten. Es schien zwischengespeichert PL / SQL-Cursor zu beziehen. Es kann nicht mehr ein Thema sein.