Bloqueo ( ing. bloqueo ) en el DBMS : una marca en la captura de un objeto por una transacción en acceso limitado o exclusivo para evitar colisiones y mantener la integridad de los datos .
Por ámbito, los bloqueos se clasifican en minúsculas, granulares y predicados. Según la gravedad de los bloqueos se dividen en conjuntos (en inglés shared ) y exclusivos (exclusive, en inglés exclusivo ). De acuerdo con la lógica de implementación, el bloqueo se divide en optimista y pesimista.
Bloqueo de fila : actúa solo en una fila de la tabla de la base de datos, sin restringir las manipulaciones en otras filas de la tabla.
Bloqueo granular : afecta a toda la tabla o a toda la página y todas las filas. Un bloqueo que restringe las manipulaciones con una página de datos en una tabla (un conjunto de filas unidas por un atributo de almacenamiento compartido) a veces se denomina bloqueo de página .
Un bloqueo de predicado actúa sobre el área delimitada por el predicado. Suele ser un bloqueo de rango de teclas . Con dicho bloqueo, la clave o índice especifica el valor o rango de valores a los que se aplica el bloqueo. Dicho bloqueo (así como un bloqueo de toda la tabla), entre otras cosas, protege contra lecturas fantasma y proporciona un nivel de aislamiento de transacciones Serializable.
Un bloqueo compartido se adquiere mediante una transacción sobre un objeto si la operación realizada por él es segura, es decir, no cambia ningún dato y no tiene efectos secundarios . Al mismo tiempo, todas las transacciones pueden realizar una operación del mismo tipo en un objeto si tiene un bloqueo compartido, generalmente dicho bloqueo se usa para operaciones de lectura.
Una transacción coloca un bloqueo exclusivo en un objeto si la operación que realiza cambia los datos. Solo una transacción puede realizar tal operación en un objeto si tiene un bloqueo exclusivo. No se puede colocar un candado en un objeto si ya tiene un candado compartido.
Se coloca un bloqueo pesimista antes de una modificación de datos propuesta en todas las filas a las que se espera que afecte la modificación. Durante la duración de dicho bloqueo, se excluye la modificación de datos de sesiones de terceros, los datos de filas bloqueadas están disponibles de acuerdo con el nivel de aislamiento de la transacción . Una vez completada la modificación prevista, se garantiza un registro consistente de los resultados.
El bloqueo optimista no restringe la modificación de los datos procesados por sesiones de terceros, sin embargo, antes del inicio de la modificación propuesta, solicita el valor de algún atributo seleccionado de cada una de las filas de datos (generalmente un nombre VERSIONy un tipo entero con se utiliza un valor inicial de 0). Antes de que las modificaciones se escriban en la base de datos, se vuelve a verificar el valor del atributo seleccionado y, si ha cambiado, la transacción se revierte o se aplican varios esquemas de resolución de colisiones. Si el valor del atributo seleccionado no ha cambiado, las modificaciones se confirman con un cambio simultáneo en el valor del atributo seleccionado (por ejemplo, incremento ) para señalar a otras sesiones que los datos han cambiado.