Pregunta

Estoy creando una aplicación web J2EE con base de datos Oracle. El servidor de aplicaciones utiliza la agrupación de conexiones JDBC a la base de datos Oracle A (por ejemplo, 20 conexiones como máximo), y algunas de las consultas realizadas utilizan tablas en la base de datos B remota de Oracle a través del enlace de base de datos.

Si el servidor de aplicaciones crea 20 conexiones a la base de datos A, y todas las consultas buscan datos en la base de datos B, ¿la base de datos A creará 20 conexiones a la base de datos B? ¿O todas las consultas se realizan a través del mismo túnel de conexión?

¿Fue útil?

Solución

Existe una relación uno a uno entre las sesiones de bases de datos locales y remotas. Tiene que haber para las siguientes situaciones: La sesión A1 en el DB local ejecuta INSERT INTO table @ B VALUES ('A1'); Ese inserto es parte de la transacción de la Sesión A1.

La sesión A2 aparece y hace un SELECT * FROM table @ B. Como la sesión A1 aún no se ha comprometido, la sesión A2 no debería ver la fila. Por lo tanto, necesita una sesión remota que sea distinta de la que pertenece a A1.

Igualmente, podría tener las 20 sesiones en la base de datos A ejecutando consultas simultáneamente en la base de datos B.

Hay un procedimiento DBMS_SESSION.CLOSE_DATABASE_LINK que desconectará la conexión remota. Tuve algunos problemas con eso (base de datos 9i) cuando se negó a cerrarlos alegando 'transacciones pendientes' incluso inmediatamente después de una confirmación. Parecía estar relacionado con cursores PL / SQL en caché. Puede que ya no sea un problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top