Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La agrupación de conexiones puede mejorar notablemente el rendimiento y la escalabilidad de una aplicación. El proveedor de datos de .NET Framework para Oracle proporciona automáticamente el sistema de agrupación de conexiones a la aplicación cliente de ADO.NET. También puede proporcionar varios modificadores en la cadena de conexión para controlar el funcionamiento del sistema de agrupación de conexiones (vea la sección "Controlar la agrupación de conexiones mediante palabras reservadas de cadenas de conexión" más adelante en este tema).
Nota El proveedor de datos de .NET Framework para Oracle no está incluido en .NET Framework versión 1.0. Si necesita utilizar el proveedor de datos de .NET Framework para Oracle y está utilizando la versión 1.0 de .NET Framework, puede descargar dicho proveedor desde el sitio https://msdn.microsoft.com/downloads.
Creación y asignación de agrupaciones
Al abrir una conexión, se crea una agrupación de conexiones basada en un preciso algoritmo de asociación que relaciona la agrupación con la cadena de conexión de esa conexión. Cada agrupación de conexiones se asocia a una cadena de conexión distinta. Cuando se abre una conexión nueva, si la cadena de conexión empleada no coincide exactamente con la de alguna de las agrupaciones existentes, se crea una agrupación nueva.
Las agrupaciones de conexión creadas sólo se destruyen cuando finaliza el proceso activo. El mantenimiento de las agrupaciones de conexión inactivas o vacías supone una sobrecarga mínima para el sistema.
Adición de conexiones
Se crea una agrupación de conexiones para cada cadena de conexión distinta. Cuando se crea una agrupación, se crean varios objetos de conexión que se agregan a la agrupación con el fin de satisfacer los requisitos de tamaño mínimo de la agrupación. Las conexiones se van agregando a la agrupación cuando es necesario hasta que ésta alcanza su tamaño máximo.
Cuando se produce una solicitud de un objeto OracleConnection, se obtiene de la agrupación si hay una conexión útil disponible. Para que una conexión sea útil es necesario que no esté siendo utilizada, debe tener un contexto de transacción coincidente o no tener ninguno asociado con él, además de un vínculo válido con el servidor.
Cuando la agrupación alcanza su tamaño máximo y no queda ninguna conexión útil, la solicitud entra en una cola de espera. El agrupador de conexiones responde a esas solicitudes en espera mediante la reasignación de las conexiones que van quedando libres en la agrupación. Las conexiones vuelven a quedar libres al llamar a Close o Dispose en el objeto Connection.
**PRECAUCIÓN **Se recomienda cerrar siempre el objeto Connection cuando termine de utilizarlo a fin de devolver la conexión a la agrupación. Esta operación se puede realizar mediante los métodos Close o Dispose del objeto Connection. Es posible que las conexiones que no se cierran de forma explícita no se agreguen ni se devuelvan a la agrupación. Por ejemplo, una conexión que ha quedado fuera de ámbito pero que no se ha cerrado explícitamente sólo se devolverá a la agrupación de conexiones si se ha alcanzado el tamaño máximo de la agrupación y la conexión sigue siendo válida.
Nota No llame a Close o Dispose en un objeto Connection, DataReader, o cualquier otro objeto administrado en el método Finalize de su clase. En un finalizador, libere sólo los recursos no administrados que pertenezcan directamente a su clase. Si la clase no dispone de recursos no administrados, no incluya un método Finalize en la definición de clase. Para obtener más información, vea Programar para la recolección de elementos no utilizados.
Eliminación de conexiones
El agrupador de conexiones quitará una conexión de la agrupación cuando se agote su período de conexión o cuando detecte que la conexión con el servidor se ha interrumpido. Tenga en cuenta que sólo se puede detectar esta interrupción al intentar comunicarse con el servidor. Si se encuentra una conexión que ya no está conectada al servidor, se marcará como no válida. El agrupador de conexiones examina periódicamente las agrupaciones de conexiones en busca de objetos que se hayan liberado en la agrupación y que estén marcados como no válidos. Esas conexiones se quitan de forma permanente.
Si se encuentra una conexión a un servidor que ha desaparecido, es posible que se elimine de la agrupación incluso en el caso de que el agrupador de conexiones no haya detectado la interrupción de la conexión y no la haya marcado, por tanto, como no válida. Cuando se da este hecho, se inicia una excepción. Sin embargo, debe cerrar la conexión para liberarla en la agrupación.
Compatibilidad con transacciones
Las conexiones se obtienen de la agrupación y se asignan en función del contexto de la transacción. El contexto del subproceso que efectúa la solicitud debe coincidir con el de la conexión asignada. Por eso, cada agrupación de conexiones está realmente dividida en conexiones, que no tienen ningún contexto de transacción asociado, y en N subdivisiones que contienen conexiones con un contexto de transacción en particular.
Al cerrar una conexión, ésta se libera en la agrupación y dentro de la subdivisión correspondiente en función de su contexto de transacción. Por tanto, puede cerrar la conexión sin generar ningún error, incluso en el caso de que una transacción distribuida quede aún pendiente. De esta forma, posteriormente puede confirmar o anular la transacción distribuida.
Controlar la agrupación de conexiones por medio de palabras clave de cadena de conexión
La propiedad ConnectionString del objeto OracleConnection permite usar pares de clave y valor de cadena de conexión que sirven para modificar el comportamiento del sistema de agrupación de conexiones.
En la tabla siguiente se describen los valores de ConnectionString que se pueden usar para ello.
| Nombre | Valor predeterminado | Descripción |
|---|---|---|
| Connection Lifetime | 0 | Cuando se devuelve una conexión a la agrupación, la hora de su creación se compara con la actual. La conexión se destruye cuando ese intervalo de tiempo (en segundos) supera el valor especificado para Connection Lifetime. Este sistema es muy útil en el caso de configuraciones agrupadas ya que permite equilibrar la carga entre un servidor que se está usando y otro que se ha puesto en conexión en este momento.
El valor cero (0) hace que las conexiones agrupadas tengan un tiempo de espera máximo. |
| Enlist | 'true' | Cuando tiene el valor true, el agrupador incluye automáticamente la conexión en el contexto de transacción actual del subproceso de creación, si hay un contexto de transacción. |
| Max Pool Size | 100 | Número máximo de conexiones permitidas en la agrupación. |
| Min Pool Size | 0 | Número mínimo de conexiones que se conservan en la agrupación. |
| Pooling | 'true' | Cuando tiene el valor true, la conexión se obtiene de la agrupación correspondiente o, si es necesario, se crea y se agrega a ella. |
Vea también
Conectar con un origen de datos mediante ADO.NET | Utilizar proveedores de datos de .NET Framework para obtener acceso a datos | OracleConnection (Clase)