Share via


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

Actualizado: 12 de diciembre de 2006

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 principal no puede conectarse al coordinador de transacciones distribuidas del servidor principal anterior que utiliza el mismo Id. de recurso. Por tanto, el nuevo servidor principal 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 por error automática. 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 principal 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 principal. 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 principal contacta con MS DTC. Sin embargo, MS DTC.no tiene conocimiento del nuevo servidor principal y termina las transacciones que están "preparadas para confirmar" y que otras bases de datos consideran confirmadas.

Vea también

Conceptos

Transacciones distribuidas (motor de base de datos)
Transacciones distribuidas de MS DTC

Otros recursos

Creación de reflejo de la base de datos

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido modificado:
  • Se revisó para indicar que la creación de reflejo de la base de datos no está admitida con transacciones entre bases de datos o transacciones distribuidas y para explicar el motivo.