Upload
bonishopaccesorieschiclayo
View
21
Download
0
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.