6

Supongamos que todas las bases de datos involucradas en una transacción distribuida implementada con señal de confirmación en dos fases están listas para comprometerse y tienen los bloqueos necesarios. El coordinador envía una señal para confirmar y todas las bases de datos ejecutan su parte de la transacción, pero una base de datos SQL encuentra un error de división por cero como resultado de una supervisión de programación que no considera esa posibilidad. Dado que el coordinador ya señaló comprometerse con todos, ¿qué sucede como resultado de esa división por cero?¿Commite dos fases contra fallas de confirmación final?

+0

¿Cómo y cuándo exactamente espera que ocurra este error? Supongo que tal error ocurriría durante la fase uno, causando una reversión. – Oded

+0

¿Quiere decir que la definición de la fase de precomisión es que todos ejecutan completamente su parte de la transacción y esa fase de compromiso se define simplemente escribiendo "" en un registro, pero el punto crítico es que no se produce la ejecución real de la transacción durante la fase de compromiso? Todos los artículos sobre confirmación de dos fases que he encontrado nunca indican exactamente con claridad cuándo cada base de datos ejecuta su parte de la transacción – user782220

+1

Bueno, lo que realmente sucede es específico de la implementación. Pero sí, eso sería más o menos lo que sucede (se realizan cambios y lo único que las bases de datos distribuidas están esperando es la respuesta del coordinador para "cerrar el trato" al comprometerse). – Oded

Respuesta

4

La segunda fase de confirmación normalmente no contiene código de usuario que puede fallar. Los administradores de recursos participantes deben garantizar que no se produzcan fallas. Si se infringe esta garantía, el protocolo no puede garantizarla.

La confirmación de dos fases intenta resolver el Two Generals Problem. No hay una solución completa a este problema. TPC es una aproximación.

Otra forma en que TPC puede fallar es en el caso de una partición de red. Algunos administradores de recursos pueden realizar la confirmación final, pero es posible que algunos no la reciban. De nuevo, este problema no tiene solución. Incluso los reintentos no pueden resolverlo.

Incluso puede desencadenar este problema en condiciones reales: ejecute todos los nodos participantes en una prueba de esfuerzo y tire del cable de red en un punto arbitrario. Con alta probabilidad, sus bases de datos distribuidas ahora son inconsistentes porque algunos mensajes de compromiso se perdieron en un momento muy inconveniente.

Cuestiones relacionadas