Regroupement de connexions JDBC Oracle avec lien de base de données
Question
Je construis une application Web J2EE avec une base de données Oracle. Le serveur d'applications utilise le regroupement de connexions JDBC avec la base de données Oracle A (par exemple, 20 connexions maximum), et certaines des requêtes effectuées utilisent des tables de la base de données Oracle distante B via un lien de base de données.
Si le serveur d'applications crée 20 connexions à la base de données A et que toutes les requêtes recherchent des données dans la base de données B, la base de données A créera-t-elle 20 connexions à la base de données B? Ou toutes les requêtes passent par le même tunnel de connexion?
La solution
Il existe une relation un-à-un entre les sessions de base de données locale et distante. Il doit y avoir pour les situations suivantes: La session A1 de la base de données locale exécute INSERT INTO table @ B VALUES ('A1'); Cet insert fait partie de la transaction de la session A1.
La session A2 arrive et effectue un SELECT * FROM table @ B. Comme la session A1 n'a pas encore été validée, la session A2 ne devrait pas voir la ligne. Par conséquent, il nécessite une session à distance distincte de celle appartenant à A1.
De même, les 20 sessions de la base de données A pourraient être exécutées simultanément sur la base de données B.
Il existe une procédure DBMS_SESSION.CLOSE_DATABASE_LINK qui déconnecte la connexion distante. J'ai eu quelques problèmes avec cette base de données (9i) lorsqu'elle a refusé de les fermer, prétextant des "transactions en suspens", même immédiatement après un commit. Cela semblait lié aux curseurs PL / SQL mis en cache. Ce n'est peut-être plus un problème.