Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Síntomas

Cuando utiliza transacciones XA, controlador JDBC de Microsoft SQL Server y Microsoft SQL Server como base de datos back-end, puede haber huérfanos transacciones pendientes en el SQL Server si el Administrador de transacciones experimenta un error o un problema de conectividad.

Además, puede experimentar uno de los siguientes síntomas comunes:

  • Las transacciones son pendientes durante mucho tiempo en la instancia de SQL Server. Pueden tener un valor null o -2 ID de sesión en la base de datos.

  • Las transacciones están bloqueadas durante mucho tiempo por una transacción que tiene un identificador de sesión -2 . Esto hace un tiempo de espera de bloqueo o subprocesos para inmovilizar.

Causa

Si la conexión entre el Administrador de transacciones y SQL Server se pierde para una transacción sin preparación, a continuación, el controlador JDBC de SQL Server no se limpie estas transacciones y podrán seguir utilizar recursos y bloquear otras transacciones. Debido a la implementación de XA en el controlador JDBC de SQL Server, SQL Server no puede detectar desconexiones anormales de los administradores de transacciones. Por lo tanto, para SQL Server, estas transacciones permanecen en el sistema hasta que se agota el tiempo de espera de la transacción de XA o se reinicia la base de datos. El tiempo de espera infinito utiliza en la instancia de SQL Server y no es configurable en la base de datos.

Solución alternativa

Para resolver este problema, utilice uno de los métodos siguientes:

  • Reinicie el servidor de base de datos cuando experimenta los bloqueos de la máquina Virtual Java (JVM) o problemas de conectividad de red que se crean en estas transacciones huérfanas.

  • Detener individualmente las transacciones huérfanas en la base de datos para limpiar los recursos. Para comprobar que una transacción está huérfano, asegúrese de que no está en duda (preparado) transacción o que actualmente se está finalizando. Las transacciones que JVM y un ciclo de una recuperación exitosa última a través de un reinicio de los correspondientes deben quedar huérfanos.

  • Establecer un valor de tiempo de espera para las transacciones XA que es más largo que la transacción más larga para forzar que se detendrá tan pronto como se supera el valor de tiempo de espera. Puede hacerlo llamando al método XAResource.setTransactionTimeout() .

  • Para muchos administradores de transacciones de otros fabricantes, el objeto de XAResource no es accesible directamente para el código de llamada y el Administrador de transacciones no establece el valor de tiempo de espera de la transacción. En esta situación, puede utilizarse una aplicación externa para establecer el tiempo de espera de la transacción en un nuevo valor predeterminado. Todas las otras transacciones que no se especifica un tiempo de espera de transacción, se utilizará este nuevo valor predeterminado.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×