Bloqueo de dos fases
Para ello, previa a la inicialización de una transacción, se examinan los requisitos de información que esta presenta mediante el planificador intrínseco procedente del sistema.Si no existen otras transacciones en curso que se encuentren haciendo uso de los bloques de datos que la nueva transacción solicita, puede brindarse un espacio a aquella para que modifique libremente los apartes de información.A este espacio se le denomina bloqueo, y se encuentra asociado con toda información que sea solicitada en el proceso de consulta (entendiendo consulta como la lectura, modificación y posible actualización de los bloques de datos precisados).Si existe alguna transacción adicional entrante que requiera la modificación del mismo bloque de información, debe esperar a que la primera de las transacciones libere el bloqueo.Es decir, el planificador no concederá bloques adicionales al mismo aparte de datos que se encuentra en consulta actual.De esta manera, se asegura que únicamente una transacción posea bloqueos para bloques de información, en el tiempo que se encuentre ejecutando las consultas sobre el mismo bloque.En el algunos protocolos de bloqueo, se garantizan acciones preventivas y protectoras a favor de la coherencia en la información consultada de manera que adicional a los bloqueos normalmente deliberados, se afirma que, existen fase adicionales que, mientras el planificador intrínseco se encuentre concediendo bloques a transacciones entrantes, ninguna transacción en curso puede libarlos o alguno de ellos ninguno.Asimismo, cualquier otra transacción ajena a esta, que hubiese incluido resultados modificados previos a la cancelación del proceso, tendría que ser de igual manera detenida y abortada.Este margen lo hace menos propenso a atascos repentinos.Con la operación de lectura Ri[x] se establece como resultado el valor almacenado del bloque de datos x requerido por la transacción en curso Ti.La operación de escritura Wi[x] modifica y actualiza el valor propio del bloque de información solicitado y se establece en la base de datos este nuevo resultado, devolviendo el valor reciente a la transacción Ti que lo exigió.Si la primera fase termina exitosamente, la transacción finaliza y no podrá ser cancelada por ninguna circunstancia.Si ocurre una falla durante la primera fase, la transacción es abortada, y los valores copiados en el almacenamiento son omitidos radicalmente.Si la transacción falla durante la segunda fase, no es requerida la cancelación; sin embargo, los valores copiados en el almacenamiento son escritos en la base de datos cuando el espacio que ha fallado se recupere.Mediante el uso del 2PC, también se pueden evitar los abortos en cascada, debido a que las operaciones de escritura son aplicadas a la base de datos únicamente cuando las transacciones finalizan y la base de datos permanece en un estado consistente.Pero en muchas ocasiones los planificadores denotan facetas de versiones agresivas y conservativas.De esta manera, el planificador puede predecir cuáles de las operaciones que están programadas en el presente pueden entrar en conflicto con los procedimientos que llegarán en el futuro.En contraste, un planificador agresivo no requiere información del conjunto de bloques de datos, dado que programa las operaciones tan pronto como es posible, evitando retardos y/o atrasos, apoyándose en la cancelación transaccional para corregir posibles errores repentinos.Un planificador conservativo puede usualmente ser desarrollado si las transacciones declaran por anticipado sus conjuntos de lectura y escritura.Esta declaración adelantada puede ser consumada más eficazmente si las transacciones son detalladas por un pre-procesador, tal como un compilador, antes de iniciar el envío al sistema, en lugar de ser interpretadas sobre la marcha.Por ejemplo, el programa siguiente ejecuta una lectura sobre las variables x, y, z: Start; m∶ = Read(x); if (m<0) then n∶ = Read(y) else n∶ = Read(z); Commit End En este caso, la transacción debe declarar anticipadamente el conjunto de bloques de datos disponibles para sus acciones de lectura o escritura, lo que usualmente causa se extreme en la selección de dichos conjuntos.Considérese la siguiente situación: dos usuarios A y B de Departamentos X y Y, respectivamente, se encuentran simultáneamente con conexión a una base de datos cuyos requerimientos transaccionales implican actualizaciones del mismo contenido de información.Si es así, se generará una instrucción dirigida al establecimiento para que sea retirada del inventario, la cantidad necesaria de artículos concernientes con la petición.Si la transacción del usuario A se encuentra primero en curso, el inventario general que verá en el establecimiento será de 300 artículos, lo cual es suficiente para los requerimientos internos de inventario que presupone.Al continuar la segunda transacción en curso, el usuario evidencia una cantidad de artículos en inventario de 300, lo cual es suficiente para los requerimientos internos que este departamento presupone.Esto conlleva a concluir que al finalizar las operaciones transaccionales y conexiones con la base de datos, las acciones de actualización ejecutadas por el departamento X han sido canceladas por la inicialización de las transacciones del departamento Y, y el número de artículos en inventario posterior a la demanda del departamento X, que debió haber sido de 50 restantes, lo que hubiera dejado al departamento X sin artículos para surtimiento, es en realidad la cantidad original, debido a que se ha cancelado el pedido, sorpresivamente, del primer usuario.Algunos métodos para corregir estos errores indebidos y que afectan la integridad del sistema son los recursos de bloqueo.Sin embargo, en una base de datos los bloqueos deben ejecutarse en diferentes niveles.Esta acción de bloqueo, si bien es válida y útil, representa un gasto de implementación muy elevado, y controles adicionales que en ocasiones no pueden ser suplidos con rapidez.Si una transacción obtiene un Bloqueo Compartido sobre un conjunto de datos pertenecientes a una base de datos, significa que puede ejecutar lecturas sucesivas sobre la información, pero en ninguna instancia del proceso transaccional podrá desarrollar actualizaciones sobre esta información.