Domanda

Sto costruendo app Web J2EE con database Oracle. Il server delle app utilizza il pool di connessioni JDBC al database Oracle A (ad es. 20 connessioni al massimo) e alcune delle query eseguite utilizzano tabelle nel database Oracle remoto B tramite collegamento al database.

Se l'App Server crea 20 connessioni al database A e tutte le query cercano dati nel database B, il database A creerà 20 connessioni al database B? O tutte le query si trovano nello stesso tunnel di connessione?

È stato utile?

Soluzione

Esiste una relazione uno a uno tra le sessioni del database locale e remoto. Devono esserci le seguenti situazioni: La sessione A1 sul DB locale esegue INSERT INTO table @ B VALUES ('A1'); Tale inserto fa parte della transazione della Sessione A1.

Arriva la sessione A2 ed esegue un SELECT * FROM tabella @ B. Poiché la sessione A1 non è stata ancora impegnata, la sessione A2 non dovrebbe vedere la riga. Pertanto ha bisogno di una sessione remota che sia distinta da quella appartenente ad A1.

Allo stesso modo potresti avere tutte e 20 le sessioni sul database A in esecuzione contemporaneamente sul database B.

Esiste una procedura DBMS_SESSION.CLOSE_DATABASE_LINK che disconnetterà la connessione remota. Ho avuto alcuni problemi con questo (database 9i) quando si è rifiutato di chiuderli rivendicando "transazioni in sospeso" anche immediatamente dopo un commit. Sembrava correlato ai cursori PL / SQL memorizzati nella cache. Potrebbe non essere più un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top