Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
BLOQUEOS
Los bloqueos evitan que varias sesiones cambien los mismos datos al mismo tiempo.
Se obtienen automticamente en el nivel ms bajo posible para una sentencia determinada.
No escalan.
Bloqueos
Para que la base de datos permita que una sesin modifique datos, la sesin debe bloquear
primero los datos que se van a modificar. Un bloqueo ofrece a la sesin el control exclusivo
sobre los datos, para que ninguna otra transaccin pueda modificar los datos bloqueados hasta
que se libera el bloqueo.
Las transacciones pueden bloquear filas individuales de datos, varias filas o incluso tablas
completas. La base de datos Oracle 10g soporta tanto bloqueo manual como el automtico.
Los bloqueos adquiridos automticamente eligen siempre el nivel de bloqueo ms bajo posible
para minimizar posibles conflictos con otras transacciones.
Mecanismo de Bloqueo
Alto nivel de simultaneidad de datos:
Bloqueos de nivel de fila para inserciones,
actualizaciones y supresiones
No se necesita ningn bloqueo en las consultas
Gestin automtica de la cola
Bloqueos retenidos hasta que finaliza la transaccin
(con la operacin COMMIT o ROLLBACK)
Mecanismo de Bloqueo
El mecanismo de bloqueo est diseado para proporcionar el mximo grado posible de
simultaneidad de datos en la base de datos. Las transacciones que modifican datos adquieren
bloqueos de nivel de fila en lugar de bloqueos de nivel de tabla o de bloque. Las modificaciones
de objetos (como movimientos de tabla) obtienen bloqueos de nivel de objeto en lugar de
bloqueos de todo el esquema o base de datos.
Las consultas de datos no necesitan ningn bloqueo y una consulta se realiza correctamente
aunque los datos estn bloqueados (mostrando siempre el original, el valor previo al bloqueo
reconstruido a partir de informacin de deshacer).
Cuando varias transacciones necesitan bloquear el mismo recurso, la primera transaccin que
solicita el bloqueo lo obtiene. Las dems transacciones esperan hasta que termina la primera
transaccin. El mecanismo de cola es automtico y no necesita la interaccin del administrador.
Todos los bloqueos se liberan al final de una transaccin. Las transacciones se completan cuando
se emite un comando COMMITo ROLLBACK. En caso de una transaccin fallida, el mismo
proceso en segundo plano que automticamente realiza un rollback de los cambios de la
transaccin fallida libera todos los bloqueos retenidos por esa transaccin.
Simultaneidad de Datos
El mecanismo de bloqueo es por defecto un modo de bloqueo
detallado de nivel de fila. Distintas
transacciones pueden estar actualizando diferentes filas dentro
de la misma tabla sin interferir las
unas en las otras.
Aunque el modelo por defecto es el bloqueo en el nivel de fila,
la base de datos Oracle soporta el
bloqueo manual en niveles superiores si es necesario:
SQL> LOCK TABLE employees IN EXCLUSIVE MODE;
Table(s) Locked.
Con la sentencia anterior, cualquier otra transaccin que intente
actualizar una fila de la tabla
bloqueada debe esperar hasta que termine la transaccin que emiti la solicitud de bloqueo.
EXCLUSIVE es el modo de bloqueo ms absoluto. Los otros modos de bloqueo son los
siguientes:
ROW SHARE: Permite el acceso simultneo a la tabla bloqueada, pero prohbe que las
sesiones bloqueen toda la tabla para un acceso exclusivo.
ROW EXCLUSIVE: Igual que ROW SHARE, pero tambin prohbe el bloqueo en el modo
SHARE. Los bloqueos ROW EXCLUSIVE se obtienen automticamente al actualizar,
insertar o suprimir datos.
Simultaneidad de Datos (continuacin)
SHARE: Permite consultas simultneas, pero prohbe actualizaciones en la tabla bloqueada.
Es necesario un bloqueo SHARE(y se solicita automticamente) para crear un ndice en
una tabla.
SHAREROWEXCLUSIVE: Se utiliza para consultar una tabla completa y permitir que
otros consulten filas de la misma, pero prohbe que los dems bloqueen la tabla en modo
SHAREo actualicen filas.
EXCLUSIVE: Permite realizar consultas de la tabla bloqueada pero prohbe las dems
actividades en ella. Es necesario un bloqueo EXCLUSIVEpara borrar una tabla.
Como cualquier solicitud de bloqueo, las sentencias de bloqueo manual esperan hasta que todas
las sesiones que ya tienen bloqueos o que los han solicitado con anterioridad liberen sus
bloqueos. El comando LOCKacepta un argumento especial que controla el comportamiento de
espera, NOWAIT.
NOWAITdevuelve el control inmediatamente si la tabla especificada ya est bloqueada por otra
sesin:
SQL>LOCKTABLEhr.employeesINSHAREMODENOWAIT;
LOCKTABLEhr.employeesINSHAREMODENOWAIT
*
ERRORatline1:
ORA00054:resourcebusyandacquirewithNOWAITspecified
Bloqueos de DML
Transaccin 1
SQL> UPDATE employees
2 SET salary=salary*1.1
3 WHERE employee_id= 106;
1 row updated.
SQL> UPDATE employees
2 SET salary=salary*1.1
3 WHERE employee_id= 107;
1 row updated.
Transaccin 2
Las transacciones de DML deben adquirir dos bloqueos:
Bloqueo EXCLUSIVE de fila para la fila o filas que se
van a actualizar
Bloqueo de nivel de tabla ROW EXCLUSIVE para la
tabla que contiene las filas
Bloqueos de DML
Las transacciones de DML obtienen dos bloqueos:
Bloqueo EXCLUSIVEde fila para la fila o filas que se van a actualizar.
Bloqueo de nivel de tabla ROWEXCLUSIVEen la tabla que se va a actualizar. Sirve para
evitar que otra sesin bloquee la tabla completa (posiblemente para borrarla o truncarla)
mientras se realiza el cambio.
CONFLICTOS DE BLOQUEO
Conflictos de Bloqueo
Los conflictos de bloqueo se producen con
frecuencia, pero normalmente se resuelven
con el
tiempo y el mecanismo de cola. En algunos
casos excepcionales, puede que sea necesaria
la
intervencin del administrador en un
conflicto de bloqueo. En el caso de la
diapositiva, la
transaccin 2 obtiene un bloqueo de una
nica fila a las 9:00:00 y no se realiza la
confirmacin,
dejando el bloqueo en su lugar. La transaccin 1 intenta actualizar toda la tabla a las 9:00:05, lo
que necesita un bloqueo de todas las filas. La transaccin 2 bloquea la transaccin 1 hasta que la
transaccin 2 realiza la confirmacin a las 16:30:01.
El usuario que intenta realizar la transaccin 1 se pondra en contacto casi con toda probabilidad
con el administrador para solicitar ayuda en este caso, y el DBA debera detectar y resolver el
conflicto.
Interbloqueos
Interbloqueos
Un interbloqueo es un ejemplo especial de conflicto de bloqueo. Los
interbloqueos surgen
cuando dos o ms sesiones esperan los datos que bloquean entre
ellas. Puesto que cada una
est esperando a la otra, ninguna puede terminar la transaccin para
resolver el conflicto.
La base de datos Oracle detecta automticamente los interbloqueos y termina la sentencia con un
error. La respuesta adecuada a ese error es una accin de confirmacin o de rollback, que libera
cualquier otro bloqueo de esa sesin para que la otra sesin pueda continuar con su transaccin.
En el ejemplo de la diapositiva, la transaccin 1 debe realizar una confirmacin o un rollback
como respuesta al error detectado de interbloqueo. Si realiza una confirmacin, necesitar
volver a enviar la segunda actualizacin para terminar su transaccin. Si realiza un rollback,
debe volver a enviar ambas sentencias para terminar su transaccin.