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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top