6
1 Estado de bloqueo: Los usuarios sólo pueden acceder a las cuentas “desbloqueadas”. BLOQUEOS • Los bloqueos evitan que varias sesiones cambien los mismos datos al mismo tiempo. • Se obtienen automáticamente en el nivel más bajo posible para una sentencia determinada. • No escalan. Bloqueos Para que la base de datos permita que una sesión modifique datos, la sesión debe bloquear primero los datos que se van a modificar. Un bloqueo ofrece a la sesión el control exclusivo sobre los datos, para que ninguna otra transacción 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 automático. Los bloqueos adquiridos automáticamente eligen siempre el nivel de bloqueo más 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 ningún bloqueo en las consultas • Gestión automática de la cola • Bloqueos retenidos hasta que finaliza la transacción (con la operación COMMIT o ROLLBACK) Mecanismo de Bloqueo El mecanismo de bloqueo está diseñado para proporcionar el máximo 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 ningún bloqueo y una consulta se realiza correctamente aunque los datos estén bloqueados (mostrando siempre el original, el valor previo al bloqueo reconstruido a partir de información de deshacer). Cuando varias transacciones necesitan bloquear el mismo recurso, la primera transacción que solicita el bloqueo lo obtiene. Las demás transacciones esperan hasta que termina la primera

Estado de Bloque1

Embed Size (px)

DESCRIPTION

base de datos

Citation preview

  • 1

    Estado de bloqueo: Los usuarios slo pueden acceder a las cuentas desbloqueadas. 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

  • 2

    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 COMMIT o 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.

    SHARE ROW EXCLUSIVE: 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

    SHARE o actualicen filas.

    EXCLUSIVE: Permite realizar consultas de la tabla bloqueada pero prohbe las dems

    actividades en ella. Es necesario un bloqueo EXCLUSIVE para 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 LOCK acepta un argumento especial que controla el comportamiento de

    espera, NOWAIT.

    NOWAIT devuelve el control inmediatamente si la tabla especificada ya est bloqueada por otra

    sesin: 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

    Normalmente no es necesario bloquear manualmente los objetos. El mecanismo de bloqueo

    automtico proporciona la simultaneidad de datos necesaria para la mayora de las aplicaciones.

    Bloqueos de DML Transaccin 1 SQL> UPDATE employees

    2 SET salary=salary*1.1

    3 WHERE employee_id= 106;

    1 row updated.

  • 3

    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 EXCLUSIVE de fila para la fila o filas que se van a actualizar.

    Bloqueo de nivel de tabla ROW EXCLUSIVE en 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.

    Mecanismo de Puesta en Cola El mecanismo de puesta en cola realiza el seguimiento de lo siguiente: Sesiones en espera de bloqueos Modo de bloqueo solicitado Orden en el que las sesiones solicitaron el bloqueo Mecanismo de Puesta en Cola Las solicitudes de bloqueos se ponen en cola automticamente. En cuanto termina la transaccin

    que retiene un bloqueo, la siguiente sesin de la cola recibe el bloqueo.

    El mecanismo de puesta en cola realiza el seguimiento del orden en el que se han solicitado los

    bloqueos y el modo de bloqueo solicitado.

    Las sesiones que ya retienen un bloqueo pueden solicitar convertir dicho bloqueo sin tener que ir

    al final de la cola. Por ejemplo, si una sesin retiene un bloqueo SHARE en una tabla, la sesin

  • 4

    puede solicitar convertir el bloqueo SHARE en un bloqueo EXCLUSIVE. Siempre que nadie ms

    tenga ya un bloqueo EXCLUSIVE o SHARE de la tabla, se otorgar un bloqueo SHARE a la

    sesin que retiene el bloqueo EXCLUSIVE sin tener que volver a esperar en la cola.

    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.

    Posibles Causas de Conflictos de Bloqueo Cambios sin confirmar Transacciones con una ejecucin muy larga Niveles altos de bloqueo innecesarios Posibles Causas de Conflictos de Bloqueo La causa ms comn de conflictos de bloqueo es un cambio sin confirmar, aunque existen

    algunas otras causas posibles:

    Transacciones con una ejecucin muy larga: Muchas aplicaciones utilizan el procesamiento por lotes para realizar actualizaciones en bloque. Estos trabajos por lotes

    normalmente se planifican para momentos de baja o ninguna actividad de los usuarios,

    pero puede que en algunos casos no hayan terminado o tarden demasiado en ejecutarse

    durante el perodo de baja actividad. Los conflictos de bloqueo son comunes cuando la

    transaccin y el procesamiento por lotes se estn realizando simultneamente.

    Niveles altos de bloqueo innecesarios: No todas las bases de datos soportan el bloqueo de nivel de fila (Oracle introdujo el soporte para los bloqueos de nivel de fila en 1988 con la

    versin 6). Algunas bases de datos an realizan bloqueos en el nivel de tabla o de pgina.

    Los desarrolladores que escriben aplicaciones destinadas a ejecutarse en muchas bases de

    datos diferentes suelen escribir sus aplicaciones con niveles de bloqueo artificialmente

    altos para que la base de datos Oracle se comporte de manera similar a aquellos sistemas

    de base de datos con menos posibilidades. Adems, los desarrolladores nuevos en Oracle

    a veces codifican innecesariamente en niveles de bloqueo ms altos de los que necesita la

    base de datos Oracle.

    Deteccin de Conflictos de Bloqueo Seleccione Blocking Sessions en la pgina Performance.

  • 5

    Haga clic en el enlace Session ID para ver informacin sobre la sesin bloqueante, que incluye la sentencia SQL real. Deteccin de Conflictos de Bloqueo Utilice la pgina Blocking Sessions de Enterprise Manager para localizar conflictos de bloqueo.

    Las solicitudes de bloqueo en conflicto se muestran con un diseo jerrquico en el que la sesin

    que retiene el bloqueo se sita en la parte superior, seguidas de todas las sesiones que estn en

    cola para el bloqueo.

    Para cada sesin implicada en el conflicto se proporciona el nombre de usuario, el identificador

    de sesin y el nmero de segundos que la sesin ha estado en espera. Acceda al identificador de

    sesin para ver las sentencias SQL reales ejecutadas o solicitadas por la sesin en ese momento.

    El monitor de diagnstico de base de datos automtico (ADDM) tambin detecta de manera

    automtica los conflictos de bloqueo y puede avisarle de las tendencias de bloqueo ineficaces

    Resolucin de Conflictos de Bloqueo Para resolver un conflicto de bloqueo: Haga que la sesin que retiene el bloqueo realice una confirmacin o un rollback Termine la sesin que retiene el bloqueo como ltimo recurso

    Resolucin de Conflictos de Bloqueo Para resolver un conflicto de bloqueo, la sesin que retiene el bloqueo debe liberarlo. El mejor

    modo de que la sesin libere el bloqueo es ponerse en contacto con el usuario y pedir que

    termine la transaccin.

    En caso de emergencia, el administrador puede terminar la sesin que retiene el bloqueo

    haciendo clic en el botn Kill Session. Recuerde que cuando se mata una sesin todo el trabajo

    de la transaccin actual se pierde (se realiza un rollback). Un usuario cuya sesin se ha matado

    debe volver a conectarse y rehacer todo el trabajo desde la ltima confirmacin de la sesin

  • 6

    matada.

    Los usuarios cuyas sesiones

    se han matado recibirn el

    siguiente error la siguiente

    vez que

    intenten emitir una

    sentencia SQL: ORA-03135:

    connection lost

    contact

    Resolucin de Conflictos de Bloqueo mediante SQL La manipulacin de sesiones, al igual que la mayora del resto de tareas realizadas en Enterprise Manager, tambin se puede realizar mediante la

    emisin de sentencias SQL. La tabla v$session contiene detalles de todas las sesiones conectadas. blocking_session es el identificador de sesin de la sesin que se est bloqueando. De esta forma, si consulta el valor de SID y SERIAL#, donde SID se corresponde con un identificador de sesin de bloqueo,

    dispondr de la informacin necesaria para realizar la operacin kill sesin Interbloqueos Interbloqueos Un

    interbloqu

    eo 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.