Acceso exclusivo al almacén de datos
Un motor de mensajería establece un bloqueo en su almacén de datos de forma que tiene acceso exclusivo a los datos almacenados dentro. Este proceso garantiza la integridad de los datos dentro del almacén de datos. Tenga en cuenta que, en la práctica, existen varios factores que pueden afectar el bloqueo de acceso exclusivo.
Cada motor de mensajería establece un bloqueo exclusivo en su almacén de datos. Aunque el motor de mensajería esté ejecutándose, mantiene dicho bloqueo para garantizar la integridad de los datos del almacén de datos.
El bloqueo del almacén de datos utiliza los bloqueos de base de datos y, por lo tanto, es una parte intrínseca del propio almacén de datos. El sistema de gestión de base de datos relacional, RDBMS, confía en la infraestructura JDBC o en el protocolo TCP/IP subyacente para indicar la anomalía de un motor de mensajería o servidor de aplicaciones. RDBMS puede liberar automáticamente los bloqueos del almacén de datos en la base de datos.
La frecuencia con que se comprueba si está activa la conexión de red entre un motor de mensajería y el servidor de base de datos para su almacén de datos es un factor importante para habilitar la sustitución por anomalía puntual de un motor de mensajería que se ejecute en un clúster. Cuando los motores de mensajería que se ejecutan en un clúster se configuran para la migración tras error entre servidores, es posible que tenga que disminuir los parámetros de mantener activo (keep-alive) en el servidor de base de datos para minimizar el período de tiempo antes de que se pueda detectar una anomalía del motor de mensajería.
La tabla SIBOWNER del almacén de datos contiene el bloqueo como un par de identificadores exclusivos de una sola fila. Cuando se inicia, un motor de mensajería utiliza estos dos identificadores para adquirir y mantener su bloqueo exclusivo:
- MEUUID
- El identificador exclusivo de un motor de mensajería, que continúa siendo el mismo siempre que se detiene o reinicia el motor de mensajería.
- INCUUID
- El identificador de encarnación de un motor de mensajería, que cambia cada vez que se inicia el motor de mensajería.
Estos identificadores determinan qué motor de mensajería utiliza un almacén de datos. Estos identificadores también determinan si una instancia en ejecución de un motor de mensajería ha mantenido su bloqueo exclusivo durante el período de tiempo durante el cual se ha estado ejecutando.
La otra tabla utilizada en el proceso de bloqueo del almacén de datos es la tabla SIBOWNERO. Esta tabla sólo se utiliza para el bloqueo y no almacena datos en su única columna EMPTY_COLUMN.
A medida que se inicia un motor de mensajería, primero obtiene un bloqueo de tabla exclusivo en la tabla SIBOWNERO. A continuación, el motor de mensajería obtiene un bloqueo de tabla exclusivo en la tabla SIBOWNER y empieza a comprobar el contenido. El motor de mensajería espera encontrar una sola fila de datos en la tabla o ningún dato. Si existe una fila, el motor de mensajería sólo se inicia si el MEUUID encontrado coincide con su propio identificador exclusivo. Si el MEUUID no coincide, el motor de mensajería graba el mensaje de error CWSIS1535 en los registros cronológicos de errores del servidor y el motor de mensajería no se inicia.
Si no hay ninguna fila en la tabla SIBOWNER, el motor de mensajería inserta una fila que contiene sus propios MEUUID e INCUUID. Si hay una sola fila en la tabla y el MEUUID coincide con el identificador exclusivo para el motor de mensajería, actualiza el INCUUID con su propio identificador de encarnación e intenta obtener un nuevo bloqueo de tabla compartido en la tabla SIBOWNER. El motor de mensajería vuelve a comprobar que el INCUUID continúe coincidiendo con su propio identificador de encarnación, en caso de que otra instancia del mismo motor de mensajería en otro servidor se esté iniciando al mismo tiempo. Si el INCUUID de la tabla no coincide, el motor de mensajería no se iniciará.
El bloqueo de tabla compartido en la tabla SIBOWNER continuará hasta que se detenga el motor de mensajería, con renovaciones periódicas que garantizarán que el bloqueo continúa en vigor. A continuación, se libera el bloqueo de tabla exclusivo en la tabla SIBOWNERO. Si el motor de mensajería no puede renovar el bloqueo en la tabla SIBOWNER, o detecta a partir de los datos de la tabla SIBOWNER que otra encarnación del motor de mensajería está utilizando el almacén de datos, el motor de mensajería anota los mensajes CWSIS1594 y CWSIS1519 en los registros cronológicos de errores del servidor y el motor de mensajería se detiene de forma inmediata.
En algunos casos, cuando se configura el motor de mensajería para que se ejecute en un clúster, si el motor de mensajería no puede obtener el bloqueo, el motor de mensajería se detiene e impide que se la migración tras error en otro servidor del clúster. En estos casos, debe consultar los registros cronológicos de errores, ya que cuando se detiene el motor de mensajería se indica que no es seguro o que no puede iniciarse utilizando la configuración del almacén de datos actual. Para obtener las descripciones de las situaciones en las que pueden producirse errores y las soluciones posibles que puede analizar, consulte la sección Diagnóstico de problemas con bloqueos de acceso exclusivos al almacén de datos.