Вы находитесь на странице: 1из 4

MANEJO DE TRANSACCIONES, BLOQUEOS Y

CONTROL DE CONCURRENCIA

INTRODUCCION
Oracle es un sistema manejador de bases de datos que permite concurrencia, es
decir, que varios usuarios realicen transacciones en el mismo instante de tiempo.
Dar soporte a esta solicitud es de vital importancia para los sistemas actuales y
deben tomarse medidas para garantizar que en ningn momento se pierdan datos
debido al acceso y modificacin concurrente en la BD.
En general, Oracle implementa un sistema basado en SCN (System Change
Number) que consiste en generar un nmero (relativo al tiempo del sistema) que
sirva de referencia para marcar una transaccin y que sta slo acceda a la versin
de los datos con un SCN cercano al suyo, evitando as que las transacciones
accedan a versiones modificadas de las tablas.
Oracle asegura la consistencia de los datos mediante un sistema de Control de
Concurrencia Multiversin, que se divide en dos partes. La primera es la
consistencia a nivel de sentencias y la segunda es la consistencia a nivel de
transacciones.
Por defecto, Oracle activa los protocolos de concurrencia a nivel de sentencias, que
consisten en que una consulta utilice los valores que se encontraban en
los registros justo antes de comenzar la consulta (y no antes de comenzar la
transaccin). De esta forma se evita que la consulta acceda a datos que no fueron
confirmados (Uncommited Data) o que estn siendo actualizados por otras
transacciones.
Tambin se permite activar el control de concurrencia a nivel de transacciones, esto
se logra obligando a las consultas de una misma transaccin a acceder a una sola
versin de los registros. Esto da como resultado que todas las consultas dentro de
una misma transaccin utilicen la misma versin de los datos, generando
consistencia dentro de la transaccin.
Como las transacciones son aisladas (segn las propiedades ACID), Oracle posee
distintos niveles de aislamiento para asegurar la consistencia. Entre ellos se
encuentran:

Lectura Confirmada: Una consulta solo utiliza datos que fueron confirmados
(Commited Data) antes del comienzo de la ejecucin de la consulta.
Serializable: Cada consulta utiliza los datos que fueron confirmados antes del
comienzo de la ejecucin de la transaccin, adems de acceder tambin a
los cambios realizados por sentencias INSERT, DELETE, UPDATE que
hayan sido ejecutadas dentro de esta transaccin.
Slo Lectura: Slo es visible la versin de los datos al momento del comienzo
de la transaccin y no se permiten sentencias INSERT, UPDATE, DELETE,
dentro de la transaccin.

Al trabajar bajo un rgimen de Lectura Confirmada o Transacciones Serializables,


Oracle utiliza bloqueos a nivel de filas, que consisten en bloquear un registro en
especfico que ser ledo o modificado por la transaccin. Si una segunda
transaccin intenta utilizar ese registro, esta debe esperar a que sea desbloqueado
(mediante un Commit o Rollback) para ejecutarse sobre el registro deseado.
Cmo escoger entre Lectura Confirmada y Transacciones Serializables?
Para la mayora de los casos, la Lectura Confirmada ser la mejor eleccin ya
que ofrece un mayor rendimiento y velocidad que las Transacciones Serializables
(a riesgo de problemas de lectura fantasma y lecturas no repetibles). Tambin es
una buena eleccin para sistemas que no ejecutan muchas transacciones
concurrentes porque este escenario minimiza los errores descritos anteriormente.
Las Transacciones Serializables son recomendadas en los casos en los que el
sistema posea un alto grado de separacin entre las transacciones y se asegure
que ellas no van a interferir entre s (no utilicen los mismos datos en el mismo
instante de tiempo). Tambin se debe utilizar este modo de aislamiento si las
transacciones ms largas son de slo lectura.
Tengo que definir explcitamente los bloqueos a un recurso exclusivo en
cada consulta?
Gracias a Oracle, la respuesta es un rotundo NO. El sistema manejador se encarga
de manejar todos los bloqueos por cada consulta SQL automticamente para
facilitar el trabajo de los usuarios. Oracle garantiza el mximo nivel de integridad
utilizando siempre los bloqueos al ms bajo nivel posible, para permitir un mayor
grado de concurrencia.
Para realizar esto, Oracle posee dos tipos de bloqueos. El bloqueo Exclusivo se
encarga de bloquear un recurso y no permitir ningn tipo de acceso a l; esto es til
cuando se realizan cambios DDL o DML que afecten la estructura o los valores de
un registro. El otro tipo de bloqueo es el Compartido, que permite un acceso de
slo lectura al recurso en disputa. Estos bloqueos no son compatibles entre s. Si
un grupo de consultas posee un bloqueo compartido sobre un recurso y una
transaccin quiere modificar ese recurso, esta debe esperar a que terminen su
ejecucin todas las consultas, en caso contrario, si una transaccin posee un
bloqueo exclusivo sobre un recurso, todas las transacciones que deseen ese
recurso deben esperar a que termine la transaccin inicial. Los bloqueos sobre un
recurso tienen la misma duracin que la transaccin que posee el bloqueo.
Adems de los bloqueos Exclusivos y Compartidos, Oracle implementa bloqueos
DDL y DML que hacen uso de estos conceptos.
Al realizar un bloqueo DDL, se previene el acceso a los objetos que van a ser
modificados en su estructura. Oracle uiliza bloqueo Compartido si las
modificaciones no son destructivas y bloqueo Exclusivo en caso contrario.

Para realizar bloqueos DML se escoge siempre el tipo de bloqueo ms bajo


posible. El bloqueo ms bajo es el TX (bloqueo por filas), que garantiza un mayor
grado de concurrencia al permitir acceso a las dems filas de una misma tabla.
Cuando este bloqueo no es posible debido a la magnitud de los cambios de la
transaccin, se procede a realizar un TM (bloqueo por tabla). Existen varios tipos
de TM, entre ellos:

X (Exclusivo): Consiste en bloquear toda la tabla, impidiendo la ejecucin de


sentencias DML sobre ella.
S (Compartido): Se marca la tabla como Slo Lectura. Varias transacciones
pueden adquirir este bloqueo sobre una misma tabla.
RS (Filas Compartidas): Este bloqueo se utiliza para indicar que se va a
realizar en un futuro cercano alguna modificacin a las filas de esta tabla.
RX (Filas Exclusivas): Con este bloqueo se indica que ya se realizaron
modificaciones INSERT, UPDATE o DELETE a las filas de esta tabla.
SRX (Filas Compartidas Exclusivas): Slo una transaccin puede obtener
este bloqueo, ya que permite prohibirle a todas las dems transacciones la
modificacin de la fila, pero se permite la lectura.

Oracle tambin realiza bloqueos totales de sus objetos principales, tales como Logs,
Diccionario de Datos y Segmentos de los Tablespaces para asegurar que ningn
usuario manipule objetos vitales para el funcionamiento correcto de la BD.
En conclusin, el Sistema Manejador de Oracle posee mecanismos muy eficientes
para el control de concurrencia, que garantizan la consistencia y el aislamiento de
las transacciones.

Вам также может понравиться