ORACLE DML - LOCK TABLE

google bookmarks delicious yahoo digg technorati meneame live IExplorer bookmarks rss
Más vistos:
  1. CREATE INDEX
  2. DECODE
  3. TO_CHAR
  4. TO_DATE
  5. SELECT
  6. GRANT
  7. INSERT
  8. TUNNING
  9. UPDATE
  10. CREATE USER

LOCK TABLE

Bloquea una tabla o vista.

   LOCK TABLE [esquema.] table [opciones] IN lockmode MODE [NOWAIT]

   LOCK TABLE [esquema.] view [opciones] IN lockmode MODE [NOWAIT]

donde opciones: PARTITION, SUBPARTITION, @dblink

donde lockmodes: EXCLUSIVE, SHARE, ROW EXCLUSIVE, SHARE ROW EXCLUSIVE
      ROW SHARE* | SHARE UPDATE*

Si no ponemos NOWAIT Oracle esperará hasta que la tabla este disponible.

Se pueden bloquear varias tablas en un solo comando si las escribimos separadas por comas.

LOCK TABLE tabla1,tabla2,tabla3 IN ROW EXCLUSIVE MODE;

Bloqueos por defecto

Las sentencias del DML pueden producir bloqueos sobre las filas de la tabla:

Una sentencia SELECT normal no bloquea filas.

Las sentencias INSERT, UPDATE o DELETE realiza un bloqueo ROW EXCLUSIVE de las filas afectadas por el WHERE.

La sentencia SELECT ... FOR UPDATE NOWAIT realiza un bloqueo ROW EXCLUSIVE de las filas afectadas por el WHERE.

Las sentencias COMMIT y ROLLBACK desbloquean las filas bloqueadas anteriormente dentro de la transacción actual.

Aunque una fila este bloqueada (por otra transacción), siempre podemos hacer una SELECT sobre esa fila. Los valores retornados son los anteriores al bloqueo.

Las sentencias UPDATE Y DELETE pueden provocar o sufrir esperas si hay conflictos con otra transacción.

Esta relacionado con el error ORA-00054.

Bloqueos Multiples en las mismas filas con LOCK TABLE

Ademas se pueden ejecutar distintos tipos de bloqueo:
ROW SHARE = Permite hacer bloqueos de tipo ROW EXCLUSIVE o ROW SHARE o SHARE 
sobre las filas bloqueadas.
ROW EXCLUSIVE = Permite hacer bloqueos de tipo ROW EXCLUSIVE o ROW SHARE 
sobre las filas bloqueadas.
SHARE ROW EXCLUSIVE = Permite hacer bloqueos de tipo ROW SHARE sobre las filas bloqueadas.
SHARE = Permite hacer bloqueos de tipo ROW SHARE or SHARE sobre las filas bloqueadas.
EXCLUSIVE = Solo permite hacer SELECT sobre las filas bloqueadas.

Explicación de la sintaxis utilizada para los comandos:
Las palabras en mayusculas son comandos de oracle.
Las palabras en minusculas son opiones modificables
Las partes enmarcadas con [] son opcionales
Las palabras en negrita son las opciones por defecto
Las partes enmarcadas con {} son alternativas (una u otra).
El simbolo | indica OR