Conexiones de base de datos

Las bases de datos contienen datos empresariales que graban los flujos de mensaje desplegados y a los que se accede a través de los mismos. Debe crear conexiones desde el nodo de integración a la base de datos utilizando ODBC o JDBC.

Una conexión de base de datos es un archivo de configuración en el que se especifican los detalles físicos de una base de datos, como el tipo de base de datos y la versión, y los parámetros para habilitar una conexión JDBC de IBM® Integration Toolkit a la base de datos.

Las conexiones ODBC a bases de datos las gestiona internamente el nodo de integración y, por consiguiente, las opciones de agrupación de conexiones configurables disponibles en el controlador ODBC no se deben utilizar.

El nodo de integración requiere una conexión a la base de datos para cada nombre de origen de datos (DSN) al que se hace referencia en el flujo de mensajes, aunque diferentes DSN se resuelvan en la misma base de datos física.Si el flujo de mensajes esta operando en modalidad coordinada, también se requiere una conexión XA para cada DSN que participe en el flujo coordinado global.

El número de conexiones a una base de datos que requiere un nodo de integración depende de las acciones de los flujos de mensajes que acceden a la base de datos. Para cada hebra de flujo de mensajes, un nodo de integración que accede a una base de datos realiza una conexión para cada nombre de origen de datos (DSN). Si un nodo diferente de la misma hebra utiliza el mismo DSN, se utiliza la misma conexión, a menos que se utilice una modalidad de transacción diferente, en cuyo caso se necesita otra conexión. Para obtener más información sobre las transacciones, consulte Conexiones de base de datos para flujos de mensajes.

Normalmente, el nodo de integración realiza las conexiones cuando necesita utilizarlas en el flujo de mensajes. No obstante, en el caso de las conexiones con los orígenes de datos basados en ESQL, puede establecer la conexión inicial antes de que el flujo reciba un mensaje, y eliminar así cualquier conexión latente de los procesos de mensajes. Establezca esta opción seleccionando la propiedad Conectar antes de que se inicie el flujo en el nodo del origen de datos.

Si el flujo de mensajes contiene un nodo DatabaseInput , al menos una conexión de base de datos permanece abierta mientras flujo de mensajes se está ejecutando.

Plataforma LinuxPlataforma WindowsPlataforma UNIXOn Linux®, UNIX, and Windows systems, database connections are released under the following circumstances:

Las conexiones de base de datos iniciadas con la opción Conectarse antes de iniciar el flujo seleccionada no se liberan si el flujo de mensajes pasa a desocupado. Estos tipos de conexiones sólo se liberan en las circunstancias siguientes:

  • Se produce un error, al acceder a la base de datos, que requiere realizar una nueva conexión.
  • El flujo de mensajes se ha detenido.
  • El nodo de integración se detiene.

Todas las demás conexiones de base de datos permanecen abiertas hasta que se producen los siguientes sucesos:

  • Se produce un error, al acceder a la base de datos, que requiere realizar una nueva conexión.
  • El flujo de mensajes ha estado desocupado durante 1 minuto.
  • El flujo de mensajes se ha detenido.
  • El nodo de integración se detiene.

Plataforma z/OSEn z/OS®, las conexiones de base de datos se liberan si no se ha accedido a la base de datos durante 1 minuto.

Para cambiar el tiempo predeterminado de 1 minuto tras el cual se libera una conexión de base de datos para un flujo de mensajes inactivo, utilice el mandato siguiente:
mqsichangeproperties integration_node -e integration_server -o ComIbmDatabaseConnectionManager -n maxConnectionAge -v newValue
o el mandato siguiente, para cambiar el tiempo predeterminado para todos los grupos de ejecución:
mqsichangeproperties integration_node -o ComIbmDatabaseConnectionManager -n maxConnectionAge -v newValue
donde maxConnectionAge se especifica en segundos. Si maxConnectionAge se establece en la opción -1, las conexiones de base de datos no se liberan nunca hasta que el servidor de integración o el nodo de integración estén detenidos.

Si utiliza IBM DB2® para la base de datos, la acción predeterminada es limitar el número de conexiones simultáneas a una base de datos al valor del parámetro de configuración maxappls . El valor predeterminado de maxappls es 40. Si cree que las conexiones que puede necesitar el nodo de integración sobrepasan el valor de maxappls, aumente ese parámetro y el del parámetro asociado maxagents a los valores que crea conveniente según sus cálculos.

Para z/OS, el número de conexiones no cambia cuando se utilizan conexiones ODBC CAF (Call Attachment Facility) o RRSAF (Recoverable Resource Services Attachment Facility). Para obtener más información sobre el número de conexiones necesarias, consulte No sabe cuántas conexiones de base de datos requiere un nodo de integración.

Utilice el parámetro de configuración maxConnectionUseCount para liberar una conexión ODBC a la base de datos después de que se alcance un número especificado de transacciones en una hebra. Para activar esta función, establezca maxConnectionUseCount en un valor mayor que cero.

maxConnectionUseCount se supervisa en cada hebra individualmente. Por ejemplo, si tiene instancias adicionales de un flujo de mensajes, lo que significa que tiene varias hebras ejecutándose en paralelo, la conexión con la base de datos sólo se libera en las hebras que alcanzan el valor especificado en maxConnectionUseCount.

Establezca el valor de maxConnectionUseCount utilizando el mandato mqsichangeproperties . Por ejemplo, para restablecer la conexión ODBC después de cada 100 transacciones, incluidos los procesos de confirmación y retrotracción, para cada conexión de origen de datos en una hebra, emita el mandato siguiente:
mqsichangeproperties integration_node -e integration_server -o ComIbmDatabaseConnectionManager -n maxConnectionUseCount -v 100
Utilice el mandato mqsireportproperties para descubrir el número actual de transacciones completadas en cada conexión de origen de datos. Este valor se notifica en el campo transactionCount. Por ejemplo:
mqsireportproperties integration_node -e integration_server -o ComIbmDatabaseConnectionManager -r


ComIbmDatabaseConnectionManager
  uuid='ComIbmDatabaseConnectionManager'
  userTraceLevel='none'
  traceLevel='none'
  userTraceFilter='none'
  traceFilter='debugTrace'
  statementCacheSize='40'
  maxStatementAge='600'
  maxConnectionUseCount='100'
  maxConnectionAge='60'
  useDefaultSchemaForStoredProcedures='true'
  enableODBCTraceBridge='true'
  expireXAConnections='false'
DatabaseContext
  threadNumber='3819'
  ODBC_Version_3
    envHandle='139961038995136'
DatabaseContext
  threadNumber='3824'
  ODBC_Version_3
    envHandle='139961240340928'
    DataSource
      name='TESTDB1'
      timeoutEnabled='true'
      coordinated='false'
      state='2'
      transactionCount='2'
      connectionAge='33'
      ManagedStatement
        text='INSERT INTO TEST VALUES (?)'
        createTime='2020-07-14 07:30:23.280630 (1594711823)'
        lastExecuteTime='2020-07-14 07:30:23.282599 (1594711823)'
        executeCount='1'
    DataSource
      name='TESTDB2'
      timeoutEnabled='true'
      coordinated='false'
      state='2'
      transactionCount='2'
      connectionAge='33'
      ManagedStatement
        text='INSERT INTO TEST VALUES (?)'
        createTime='2020-07-14 07:30:23.369659 (1594711823)'
        lastExecuteTime='2020-07-14 07:30:23.372099 (1594711823)'
        executeCount='1'
Cuando la función de liberación se activa al establecer maxConnectionUseCount en un valor mayor que cero, se solicita la liberación de la conexión cuando se alcanza el valor de maxConnectionAge o maxConnectionUseCount (el que se alcance primero). Como ejemplo, considere un escenario donde maxConnectionUseCount está establecido en 100 y maxConnectionAge está establecido en 60. En este escenario:
  • Si se procesan 100 transacciones durante los 30 segundos posteriores a la creación de una conexión ODBC, la conexión ODBC se libera inmediatamente después de que el número de transacciones alcance 100. Se establecerá una nueva conexión ODBC en el siguiente mensaje.
  • Si, por ejemplo, se procesan 10 transacciones durante los 30 segundos posteriores a la creación de una conexión ODBC, y durante los 60 segundos siguientes, o más, no se procesa ningún mensaje en esta conexión ODBC, se alcanza el valor especificado en maxConnectionAge y se libera la conexión.
  • Si, por ejemplo, se procesan 10 transacciones cada 30 segundos, y la conexión nunca está desocupada durante más de 60 segundos, la conexión ODBC se libera después de que el recuento total de transacciones llegue a 100, lo que, en este ejemplo, es después de 300 segundos.
Nota: El campo connectionAge que se devuelve como parte de la salida del mandato mqsireportproperties no es una propiedad configurable; es una métrica de tiempo de ejecución que indica la antigüedad de la conexión. No hay ninguna relación entre connectionAge y maxConnectionAge. El valor de connectionAge puede superar el valor de maxConnectionAge tal como se muestra en la descripción del escenario de ejemplo anterior donde connectionAge sería 300 y maxConnectionAge es 60.

Si está utilizando otra base de datos, compruebe la documentación a la base de datos para obtener información sobre conexiones y los límites o las restricciones que se pueden aplicar.

Cuando un flujo de mensajes está desocupado, el servidor de integración libera periódicamente las conexiones de base de datos que no se han iniciado con la opción Conectar antes de iniciar el flujo . Por consiguiente, las conexiones que mantiene el nodo de integración reflejan el uso actual de estos recursos. Esta situación permite al nodo de integración responder a periodos de inmovilización de la base de datos, si el gestor de base de datos da soporte a la inmovilización. No todas las bases de datos soportan la función de inactividad y no todas las bases de datos se inmovilizan del mismo modo. Consulte la documentación de base de datos para obtener información sobre la inactividad de base de datos.