Creación de reflejo de la base de datos y transacciones entre bases de datos

La creación de reflejo de la base de datos no está admitida con transacciones entre bases de datos o transacciones distribuidas. Esto se debe a que la integridad o la atomicidad de las transacciones no se puede garantizar por las siguientes razones:

  • Para las transacciones entre bases de datos: después de una conmutación por error, la base de datos reflejada se encuentra en una instancia de servidor diferente y, normalmente, está en una base de datos independiente de la base de datos no reflejada. Aunque ambas bases de datos estén reflejadas entre los dos mismos asociados, no hay garantía de que ambas bases de datos realicen la conmutación por error al mismo tiempo.

  • Para las transacciones distribuidas: después de una conmutación por error, el nuevo servidor de la entidad de seguridad no puede conectarse al coordinador de transacciones distribuidas del servidor de la entidad de seguridad anterior que utiliza el mismo Id. de recurso. Por tanto, el nuevo servidor de la entidad de seguridad no puede obtener el estado de la transacción.

En el siguiente ejemplo se muestra cómo se produce una incoherencia lógica. En este ejemplo, una aplicación utiliza una transacción entre bases de datos para insertar dos filas de datos: una fila se inserta en una tabla de una base de datos reflejada, A, y la otra fila se inserta en una tabla de otra base de datos, B. La base de datos A se está reflejando en modo de alta seguridad con conmutación automática por error. Mientras la transacción se confirma, la base de datos A deja de estar disponible y la sesión de creación de reflejo se conmuta por error automáticamente al reflejo de la base de datos A.

Después de la conmutación por error, la transacción entre bases de datos podría confirmarse correctamente en la base de datos B, pero no en la base de datos conmutada por error. Esto se produciría si el servidor de la entidad de seguridad original de la base de datos A no hubiese enviado el registro de transacciones entre bases de datos al servidor reflejado antes del error. Después de la conmutación por error, esa transacción no existiría en el nuevo servidor de la entidad de seguridad. Las bases de datos A y B se volverían incoherentes porque los datos insertados en la base de datos B se mantienen intactos, pero los datos insertados en la base de datos A se pierden.

Su puede producir un escenario similar cuando se usa una transacción de MS DTC. Por ejemplo, después de la conmutación por error, el nuevo servidor de la entidad de seguridad contacta con MS DTC. Sin embargo, MS DTC.no tiene conocimiento del nuevo servidor de la entidad de seguridad y termina las transacciones que están "preparadas para confirmar" y que otras bases de datos consideran confirmadas.