lunes, 17 de marzo de 2008

Bloqueo Base de Datos

ORACLE usa automáticamente diferentes tipos de bloqueos para el control del acceso concurrente a los datos y prevenir la interacción destructiva entre usuarios.
Bloquea automáticamente los datos fuente durante la transacción para evitar que otras transacciones hagan algo requiriendo acceso exclusivo de los mismos datos fuente.
Oracle clasifica los bloqueos en estas categorías:
·Data Locks (DML Locks) El Data Locks protege los datos (Table Locks: protege la tabla entera, Row Locks a nivel de filas).
·Dictionary Locks (DDL Locks) Protege la estructura de los objetos, las definiciones de las tablas y de las vistas.
·Internal Locks and Latches Protege las estructuras internas de la base de datos como los archivos de datos. Son totalmente automáticos.
·Distributed Locks Aseguran que los datos y otras fuentes distribuidas entre varias instancias del servidor en paralelo de Oracle sean consistentes.
·Parallel ce management (PCM) locks Son bloqueos distribuidos que cubren uno o más bloques de datos (bloques de tablas o índices) en el buffer de la caché.

Los bloqueos que se han producido están dentro de las dos primeras categorías. Obtenemos un tipo de bloqueo de la segunda categoría cuando trabajamos con el índice.
Dentro de la categoría Data Locks obtenemos:

El propósito de un data lock es garantizar la integridad de los datos durante el acceso concurrente de múltiples usuarios.
TX Row Locks Una transacción adquiere un bloqueo de datos exclusivo para cada fila individual modificada por una de los siguientes cláusulas INSERT, UPDATE, DELETE and SELECT with the FOR UPDATE.
Se mantiene el bloqueo hasta que la transacción no haga commit o rollback.
TM Table Locks Una transacción adquiere un table locks en las siguientes instrucciones: INSERT, UPDATE, DELETE and SELECT with the FOR UPDATE.
Estas operaciones DML requieren bloqueos de tabla para dos propósitos: uno para controlar el acceso a la tabla durante la transacción y dos para prevenir los conflictos que estas operaciones pudieran producir.
Un bloqueo de tabla se puede mantener en varios modos RS(Row Share) , RX (Row exclusive), S (share), SRX (share row exclusive) y X (exclusive).
Row Exclusive Locks (RX) Indica que la transacción que mantiene el bloqueo ha hecho uno o más updates sobre filas de la tabla.

Un row exclusive es adquirida automáticamente para una tabla que ha sido modificada por uno de las siguientes cláusulas:

INSERT INTO table
UPDATE table
DELETE FROM table .....
LOCK TABLE table IN ROW EXCLUSIVE MODE;

Se permite a otras transacciones para consultas como insert, update, delete o bloqueos de filas concurrentes en la misma tabla. Permiten a múltiples transacciones obtener simultáneamente bloqueos exclusivos y compartidos sobre la misma tabla.
No se permite otra transacción no puede bloquear concurrentemente la tabla usando las siguientes cláusulas.

LOCK TABLE table IN SHARE MODE;
LOCK TABLE table IN SHARE EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;

Exclusive Table Locks (X) Es el modo más restrictivo de la tabla de bloqueos, permite a la transacción que tiene el bloqueo exclusivo escrituras en la tabla.
Es adquirido mediante:

LOCK TABLE table IN EXCLUSIVE MODE;

Sólo una transacción puede obtener el bloqueo exclusivo para una tabla. Sólo permite a otras transacciones hacer consultas (query).
La transacción que obtiene el bloqueo impide a las demás transacciones realizar cualquier tipo de operaciones de manejo de datos o realizar cualquier tipo de bloqueo.
Share Table Locks (S) Un bloqueo compartido es adquirido automáticamente por la tabla especificada en la siguiente sentencia.

LOCK TABLE table IN SHARE MODE;

Una transacción que mantiene un bloqueo compartido permite a otras transacciones sólo consultas a la tabla, bloquear filas específicas con SELECT ... FOR UPDATE, o ejecutar LOCK TABLE ... IN SHARE MODE. No permite que otras transacciones hagan actualizaciones. Múltiples transacciones pueden mantener bloqueos compartidos para la tabla.
No permite que otras transacciones modifiquen la tabla que una transacción mantiene bloqueada por un bloqueo compartido.

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;
LOCK TABLE table IN EXCLUSIVE MODE;
LOCK TABLE table IN ROW EXCLUSIVE MODE;

Los otros tipos de bloqueos que se pueden dar dentro de esta categoría no se han producido durante las transacciones realizadas en la práctica.
Durante la creación del índice se obtiene un nuevo tipo de bloqueo.
DL Direct Loader Index Creation Cuando creas un índice de una tabla se adquiere un bloqueo compartido exclusivo.

1 comentario:

Anónimo dijo...

Hola que tal, estoy empezando a ver Oracle, el articulo esta completo y explicito me para mi tarea de Oracle. Gracias por publicarlo Jorge Niño.