Inicio » Oracle » Bloqueos » Bloqueos en la base de datos

Bloqueos en la base de datos

Tipos de bloqueos

El mecanismo de bloqueo en la base de datos por defecto es un bloqueo a nivel de fila. Las diferentes transacciones pueden actualizar diferentes filas dentro de la misma tabla sin interferirse unas a otras. A pesar de que el modo por defecto de bloque es a nivel fila, Oracle 10 permite bloqueos a un nivel superior si son necesarios.

  • EXCLUSIVE MODE Cualquier transacción que intenta actualizar un fila en la tabla bloqueada debe esperar encolada, hasta que la transacción que ha bloqueado la tabla termine.  Es la forma más estricta de bloqueo.

SQL> LOCK TABLE hr.employees IN EXCLUSIVE MODE;

  • ROW SHARE Permite el acceso concurrente a la tabla bloqueada, pero prohíbe a las sesiones hacer un bloqueo en EXCLUSIVE MODE.
  • ROW EXCLUSIVE Lo mismo que ROW SHARE, pero también prohíbe hacer un bloque ROW SHARE, Este es el tipo de bloqueo que se obtiene automáticamente cuando se hace un update, insert o delte.
  • SHARED Permite queries concurrentes pero prohíbe updates a una tabla bloqueada. Este tipo de bloque se produce automáticamente cuando se crea un índice o una tabla. Prohíbe a otras sesiones bloquear la tabla en modo SHARE o actualizar registros.
  • SHARE ROW EXCLUSIVE: Permite consultar toda la tabla y permite a los otros consultar registros dentro de la tabla, preo prohíbe a otros usuarios bloquear la tabla en modo SHARE o realizar actualizaciones de registros.
  • EXCLUSIVE, permite consultar la tabla bloqueada, pero prohíbe cualquier tipo de  actividad en ella. Este tipo de bloqueos se utiliza para el borrar una tabla (drop).

 

Como cualquier petición de bloqueo, los bloqueos manuales esperan encolados hasta que todas las sesiones previamente tenían bloqueos o que los habían solicitado, los deshagan. El comando LOCK acepta un argumento NOWAIT que permite regresar el control inmediatamente, si la tabla está bloqueada por otra sesión.

SQL> LOCK TABLE hr.employees IN SHARE MODE NOWAIT;

LOCK TABLE hr.employees IN SHARE MODE NOWAIT

*

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified

Bloqueos en sentencias DML

Las sentencias DML, realizan dos tipos de bloqueos:

  • Un bloqueo rew-exclusive en cada fila o filas que queremos actualizar, Habrá un solo bloqueo row-exclusive independientemente del número de filas que queramos cambiar.
  • Y un bloqueo shared a nivel tabla en la tabla que vamos a actualizar. Esto para prevenir que otra sesión bloquee la tabla completa, (puede darse el caso en un drop y en trúncate), mientras se realiza el cambio.

Bloqueos en sentencias DDL

 

Para ejecutar una sentencia DDL requiere un bloqueo exclusivo en el objeto a modificar. Este no se puede obtener hasta que todas las transacciones DML contra la tabla hayan finalizado, liberando sus bloqueos exclusivos y shared. El bloqueo exclusivo necesario para cualquier sentencia DDL se solicita automáticamente, pero si no se puede obtener, normalmente porque otra sesión tenga bloqueada la tabla termina inmediatamente con error.

About these ads

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s