+ All Categories
Home > Documents > Estado de Bloqueo de base de datos

Estado de Bloqueo de base de datos

Date post: 17-Jan-2016
Category:
Upload: bonishopaccesorieschiclayo
View: 19 times
Download: 2 times
Share this document with a friend
Description:
Estado de Bloqueo de base de datos
10
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
Transcript
Page 1: Estado de Bloqueo de base de datos

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.

BloqueosPara que la base de datos permita que una sesión modifique datos, la sesión debe bloquearprimero los datos que se van a modificar. Un bloqueo ofrece a la sesión el control exclusivosobre los datos, para que ninguna otra transacción pueda modificar los datos bloqueados hastaque se libera el bloqueo.Las transacciones pueden bloquear filas individuales de datos, varias filas o incluso tablascompletas. 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 posiblepara 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 BloqueoEl mecanismo de bloqueo está diseñado para proporcionar el máximo grado posible desimultaneidad de datos en la base de datos. Las transacciones que modifican datos adquierenbloqueos de nivel de fila en lugar de bloqueos de nivel de tabla o de bloque. Las modificacionesde objetos (como movimientos de tabla) obtienen bloqueos de nivel de objeto en lugar debloqueos de todo el esquema o base de datos.Las consultas de datos no necesitan ningún bloqueo y una consulta se realiza correctamenteaunque los datos estén bloqueados (mostrando siempre el original, el valor previo al bloqueoreconstruido a partir de información de deshacer).Cuando varias transacciones necesitan bloquear el mismo recurso, la primera transacción quesolicita el bloqueo lo obtiene. Las demás transacciones esperan hasta que termina la primeratransacción. El mecanismo de cola es automático y no necesita la interacción del administrador.Todos los bloqueos se liberan al final de una transacción. Las transacciones se completan cuandose emite un comando COMMIT o ROLLBACK. En caso de una transacción fallida, el mismoproceso en segundo plano que automáticamente realiza un rollback de los cambios de latransacción fallida libera todos los bloqueos retenidos por esa transacción.

Page 2: Estado de Bloqueo de base de datos

Simultaneidad de DatosEl mecanismo de bloqueo es por defecto un modo de bloqueo detallado de nivel de fila. Distintastransacciones pueden estar actualizando diferentes filas dentro de la misma tabla sin interferir lasunas en las otras.Aunque el modelo por defecto es el bloqueo en el nivel de fila, la base de datos Oracle soporta elbloqueo manual en niveles superiores si es necesario:SQL> LOCK TABLE employees IN EXCLUSIVE MODE;Table(s) Locked.Con la sentencia anterior, cualquier otra transacción que intente

actualizar una fila de la tablabloqueada debe esperar hasta que termine la transacción que emitió la solicitud de bloqueo.EXCLUSIVE es el modo de bloqueo más absoluto. Los otros modos de bloqueo son lossiguientes:• ROW SHARE: Permite el acceso simultáneo a la tabla bloqueada, pero prohíbe que lassesiones bloqueen toda la tabla para un acceso exclusivo.• ROW EXCLUSIVE: Igual que ROW SHARE, pero también prohíbe el bloqueo en el modoSHARE. Los bloqueos ROW EXCLUSIVE se obtienen automáticamente al actualizar,insertar o suprimir datos.Simultaneidad de Datos (continuación)• SHARE: Permite consultas simultáneas, pero prohíbe actualizaciones en la tabla bloqueada.Es necesario un bloqueo SHARE (y se solicita automáticamente) para crear un índice enuna tabla.• SHARE ROW EXCLUSIVE: Se utiliza para consultar una tabla completa y permitir queotros consulten filas de la misma, pero prohíbe que los demás bloqueen la tabla en modoSHARE o actualicen filas.• EXCLUSIVE: Permite realizar consultas de la tabla bloqueada pero prohíbe las demásactividades en ella. Es necesario un bloqueo EXCLUSIVE para borrar una tabla.Como cualquier solicitud de bloqueo, las sentencias de bloqueo manual esperan hasta que todaslas sesiones que ya tienen bloqueos o que los han solicitado con anterioridad liberen susbloqueos. El comando LOCK acepta un argumento especial que controla el comportamiento deespera, NOWAIT.NOWAIT devuelve el control inmediatamente si la tabla especificada ya está bloqueada por otrasesió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 specifiedNormalmente no es necesario bloquear manualmente los objetos. El mecanismo de bloqueoautomático proporciona la simultaneidad de datos necesaria para la mayoría de las aplicaciones.

Page 3: Estado de Bloqueo de base de datos

Bloqueos de DMLTransacción 1SQL> UPDATE employees2 SET salary=salary*1.13 WHERE employee_id= 106;1 row updated.SQL> UPDATE employees2 SET salary=salary*1.13 WHERE employee_id= 107;1 row updated.

Transacción 2Las transacciones de DML deben adquirir dos bloqueos:• Bloqueo EXCLUSIVE de fila para la fila o filas que sevan a actualizar• Bloqueo de nivel de tabla ROW EXCLUSIVE para latabla que contiene las filasBloqueos de DMLLas 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 paraevitar que otra sesión bloquee la tabla completa (posiblemente para borrarla o truncarla)mientras se realiza el cambio.

Mecanismo de Puesta en ColaEl mecanismo de puesta en cola realiza el seguimientode lo siguiente:• Sesiones en espera de bloqueos• Modo de bloqueo solicitado• Orden en el que las sesiones solicitaron el bloqueo

Mecanismo de Puesta en ColaLas solicitudes de bloqueos se ponen en cola automáticamente. En cuanto termina la transacciónque retiene un bloqueo, la siguiente sesión de la cola recibe el bloqueo.El mecanismo de puesta en cola realiza el seguimiento del orden en el que se han solicitado losbloqueos y el modo de bloqueo solicitado.Las sesiones que ya retienen un bloqueo pueden solicitar convertir dicho bloqueo sin tener que iral final de la cola. Por ejemplo, si una sesión retiene un bloqueo SHARE en una tabla, la sesiónpuede solicitar convertir el bloqueo SHARE en un bloqueo EXCLUSIVE. Siempre que nadie mástenga ya un bloqueo EXCLUSIVE o SHARE de la tabla, se otorgará un bloqueo SHARE a lasesión que retiene el bloqueo EXCLUSIVE sin tener que volver a esperar en la cola.

Page 4: Estado de Bloqueo de base de datos

CONFLICTOS DE BLOQUEOConflictos de BloqueoLos conflictos de bloqueo se producen con frecuencia, pero normalmente se resuelven con eltiempo y el mecanismo de cola. En algunos casos excepcionales, puede que sea necesaria laintervención del administrador en un conflicto de bloqueo. En el caso de la diapositiva, latransacción 2 obtiene un bloqueo de una única fila a las 9:00:00 y no se realiza la

confirmación,dejando el bloqueo en su lugar. La transacción 1 intenta actualizar toda la tabla a las 9:00:05, loque necesita un bloqueo de todas las filas. La transacción 2 bloquea la transacción 1 hasta que latransacción 2 realiza la confirmación a las 16:30:01.El usuario que intenta realizar la transacción 1 se pondría en contacto casi con toda probabilidadcon el administrador para solicitar ayuda en este caso, y el DBA debería detectar y resolver elconflicto.

Posibles Causas de Conflictos de Bloqueo• Cambios sin confirmar• Transacciones con una ejecución muy larga• Niveles altos de bloqueo innecesariosPosibles Causas de Conflictos de BloqueoLa causa más común de conflictos de bloqueo es un cambio sin confirmar, aunque existenalgunas otras causas posibles:• Transacciones con una ejecución muy larga: Muchas aplicaciones utilizan elprocesamiento por lotes para realizar actualizaciones en bloque. Estos trabajos por lotesnormalmente 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 ejecutarsedurante el período de baja actividad. Los conflictos de bloqueo son comunes cuando latransacción y el procesamiento por lotes se están realizando simultáneamente.• Niveles altos de bloqueo innecesarios: No todas las bases de datos soportan el bloqueo denivel de fila (Oracle introdujo el soporte para los bloqueos de nivel de fila en 1988 con laversión 6). Algunas bases de datos aún realizan bloqueos en el nivel de tabla o de página.Los desarrolladores que escriben aplicaciones destinadas a ejecutarse en muchas bases dedatos diferentes suelen escribir sus aplicaciones con niveles de bloqueo artificialmentealtos para que la base de datos Oracle se comporte de manera similar a aquellos sistemasde base de datos con menos posibilidades. Además, los desarrolladores nuevos en Oraclea veces codifican innecesariamente en niveles de bloqueo más altos de los que necesita labase de datos Oracle.

Page 5: Estado de Bloqueo de base de datos

Detección de Conflictos de BloqueoSeleccione Blocking Sessions en la página Performance.

Haga clic en el enlace Session ID para ver informaciónsobre la sesión bloqueante, que incluye la sentenciaSQL real.

Detección de Conflictos de BloqueoUtilice la página Blocking Sessions de Enterprise Manager para localizar conflictos de bloqueo.Las solicitudes de bloqueo en conflicto se muestran con un diseño jerárquico en el que la sesiónque retiene el bloqueo se sitúa en la parte superior, seguidas de todas las sesiones que están encola para el bloqueo.Para cada sesión implicada en el conflicto se proporciona el nombre de usuario, el identificadorde sesión y el número de segundos que la sesión ha estado en espera. Acceda al identificador desesión para ver las sentencias SQL reales ejecutadas o solicitadas por la sesión en ese momento.El monitor de diagnóstico de base de datos automático (ADDM) también detecta de maneraautomática los conflictos de bloqueo y puede avisarle de las tendencias de bloqueo ineficaces

Resolución de Conflictos de BloqueoPara resolver un conflicto de bloqueo:• Haga que la sesión que retiene el bloqueo realiceuna confirmación o un rollback• Termine la sesión que retiene el bloqueo comoúltimo recurso

Resolución de Conflictos de BloqueoPara resolver un conflicto de bloqueo, la sesión que retiene el bloqueo debe liberarlo. El mejormodo de que la sesión libere el bloqueo es ponerse en contacto con el usuario y pedir quetermine la transacción.En caso de emergencia, el administrador puede terminar la sesión que retiene el bloqueohaciendo clic en el botón Kill Session. Recuerde que cuando se mata una sesión todo el trabajode la transacción actual se pierde (se realiza un rollback). Un usuario cuya sesión se ha matadodebe volver a conectarse y rehacer todo el trabajo desde la última confirmación de la sesiónmatada.Los usuarios cuyas sesiones se han matado recibirán el siguiente error la siguiente vez queintenten emitir una sentencia SQL:ORA-03135: connection lost contact

Page 6: Estado de Bloqueo de base de datos

Resolución de Conflictos de Bloqueo mediante SQLLa manipulación de sesiones, al igual que la mayoría del resto de tareas realizadas en EnterpriseManager, también se puede realizar mediante la emisión de sentencias SQL. La tablav$session contiene detalles de todas las sesiones conectadas. blocking_session es elidentificador de sesión de la sesión que se está bloqueando. De esta forma, si consulta el valorde SID y SERIAL#, donde SID se corresponde con un identificador de sesión

de bloqueo,dispondrá de la información necesaria para realizar la operación kill sesión

InterbloqueosInterbloqueosUn interbloqueo es un ejemplo especial de conflicto de bloqueo. Los interbloqueos surgencuando dos o más sesiones esperan los datos que bloquean entre ellas. Puesto que cada unaestá esperando a la otra, ninguna puede terminar la transacción para resolver el conflicto.

La base de datos Oracle detecta automáticamente los interbloqueos y termina la sentencia con unerror. La respuesta adecuada a ese error es una acción de confirmación o de rollback, que liberacualquier otro bloqueo de esa sesión para que la otra sesión pueda continuar con su transacción.En el ejemplo de la diapositiva, la transacción 1 debe realizar una confirmación o un rollbackcomo respuesta al error detectado de interbloqueo. Si realiza una confirmación, necesitarávolver a enviar la segunda actualización para terminar su transacción. Si realiza un rollback,debe volver a enviar ambas sentencias para terminar su transacción.


Recommended