Está en la página 1de 5

AA10 - Evidencia 3: Manejo de transacciones, bloqueos y control de concurrencia

Manejo de transacciones, bloqueos y control de concurrencia en un motor de


base de datos específico

Gestión y Seguridad de Base de Datos

Presentado por: Jose Hoveimar Martínez Ordoñez

Instructor: Freddy Méndez Ortiz

Servicio Nacional de aprendizaje SENA

Octubre, 2019

Cali Valle del Cauca


AA10 - Evidencia 3: Manejo de transacciones, bloqueos y control de concurrencia

MANEJO DE TRANSACCIONES EN ORACLE

Una transacción se puede definir como: Una unidad de trabajo compuesta por
diversas tareas, cuyo resultado final debe ser que se ejecuten todas o ninguna
de ellas. En Oracle serian sentencias SQL que se ejecutan a la base de datos
como una única operación confirmándose o deshaciéndose en manera total.

Oracle maneja las mismas opciones de procesamiento de transacciones tanto


como para SQL o PL/SQL que es su lenguaje de programación

SET TRANSACTION inicializa una transacción y define las características clave.


Este comando es utilizado para definir el inicio de una transacción. Alguno de los
efectos que se puede lograr con el set transaction es que la transacción pueda
ser definida de solo lectura (read-only). Ejemplos del uso del comando son:
SET TRANSACTION READ ONLY;
SET TRANSACTION READ WRITE;

COMMIT Finaliza la transacción actual salvando los cambios en la base de datos


e iniciando una nueva transacción.
Este comando podemos ejecutarlo después de haber realizado nuestras
transacciones sin presentar errores y queremos salvaguardar nuestro trabajo.
Oracle por defecto ejecuta un commit automático cuando el usuario sale de SQL
plus o en su caso SQL developer.
ROLLBACK Finaliza la transacción actual, descartando los cambios realizados
en la base de datos.
Este comando nos sirve en caso de que nos demos cuenta de que en la
transición hemos cometido un error podemos descartar los cambios hechos
ejecutando el rollback. Siempre se ejecuta un rollback cuando ocurre un error
SAVEPOINT Define un punto intermedio para que la transacción pueda realizar
rollbacks parciales.

En algunos casos tenemos transacciones muy grandes o que envuelven la


modificación de muchos datos, y no se desea reversar la misma por haber tenido
un pequeño error en la ejecución del último comando. Los savepoints permiten
dividir el trabajo de la transacción diferentes segmentos. De esta forma el usuario
puede ejecutar rollbacks para un savepoint solamente, dejando los cambios
previos intactos.
AA10 - Evidencia 3: Manejo de transacciones, bloqueos y control de concurrencia

Ejemplo
UPDATE products
SET quantity = 55
WHERE product= 59495;
SAVEPOINT A1;

UPDATE products
SET quantity = 504;
ROLLBACK TO SAVEPOINT A1;
COMMIT;
En el anterior ejemplo los cambios realizados por el segundo UPDATE no son
salvados cuando se realiza el COMMIT, dado que el ROLLBACK anterior a este
los revierte.
Debemos tener en cuenta que la base de datos de Oracle provee mecanismos
de bloqueo para que solo un usuario pueda modificar un registro a la base de
datos.
En el siguiente ejemplo podemos apreciar el uso del commit y/o el rollback en
esta ejecución de procedimiento solo se salvaguardará los cambios si no se ha
presentado ningún error en caso de presentarse una EXCEPTION se ejecutará
el comando ROLLBACK y la base de datos no tomará ningún cambio ejecutado.
-----
BEGIN
update alumnos set edad=20 where n_alumno=109;
update nuevos set apellido='perez' where n_alumno=200;
commit;
EXCEPTION
WHEN OTHERS THEN
rollback;
END; Transacciones

SI NO
ROLLBACK ¿Error? COMMIT
AA10 - Evidencia 3: Manejo de transacciones, bloqueos y control de concurrencia

CONCURRENCIA Y BLOQUEOS EN ORACLE


Oracle es SGBD de datos que permite la concurrencia, es decir que varios
usuarios realicen transacciones al mismo tiempo. Oracle asegura la consistencia
de los datos mediante un sistema de Control de Concurrencia Multiversión la
cual se divide en dos partes. 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
transacción) De esta forma se evita que la consulta acceda a datos que no fueron
confirmados (Uncommited Data) o que están siendo actualizados por otras
transacciones.
También se permite activar el control de concurrencia a nivel de transacciones,
esto se logra obligando a las consultas de una misma transacción a acceder a
una sola versión de los registros. Esto da como resultado que todas las consultas
dentro de una misma transacción utilicen la misma versión de los datos,
generando consistencia dentro de la transacción.
Niveles de aislamiento de Oracle
1. Lectura Confirmada: Una consulta solo utiliza datos que fueron
confirmados (Commited Data) antes del comienzo de la ejecución
de la consulta.
2. Serializable: Cada consulta utiliza los datos que fueron
confirmados antes del comienzo de la ejecución de la transacción,
además de acceder también a los cambios realizados por
sentencias INSERT, DELETE, UPDATE que hayan sido ejecutadas
dentro de esta transacción.
Solamente se ven los cambios realizados por transacciones
confirmadas + cambios efectuados por ella misma
3. Sólo Lectura: Sólo es visible la versión de los datos al momento
del comienzo de la transacción y no se permiten sentencias
INSERT, UPDATE, DELETE, dentro de la transacción.
transacciones de solo lectura ven datos confirmados antes de
empezar y no permiten modificaciones de los datos.
Bloqueos en Oracle
Oracle utiliza bloqueos a nivel de filas cuando se trabaja con régimen de lectura
confirmada o transacciones serialízales, Oracle bloquea el registro especifico
que será leído o modificado por la transición. En caso de que una segunda
transacción intente acceder al dato esta debe esperar a que sea desbloqueado
ya sea por un “commit” o un “rollback”.
El SMBD de Oracle maneja los bloqueos por cada consulta SQL de manera
automática facilitando el trabajo de los usuarios siempre utilizando bloqueos al
mas bajo nivel posible permitiendo un mayor grado de concurrencia.
AA10 - Evidencia 3: Manejo de transacciones, bloqueos y control de concurrencia

Bloqueo exclusivo: se encarga de bloquear un recurso y no permite ningún


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.
Bloqueo Compartido: Permite acceso de solo lectura al recurso; Si un grupo de
consultas posee un bloqueo compartido sobre un recurso y una transacción
quiere modificar ese recurso, esta debe esperar a que terminen su ejecución
todas las consultas. en caso contrario, si una transacción posee un bloqueo
exclusivo sobre un recurso, todas las transacciones que deseen ese recurso
deben esperar a que termine la transacción inicial. Los bloqueos sobre un
recurso tienen la misma duración que la transacción que posee el bloqueo.
Bloqueos DDL: se previene el acceso a los objetos que van a ser modificados
en su estructura. Oracle utiliza bloqueo Compartido si las modificaciones no son
destructivas y bloqueo Exclusivo en caso contrario.
Oracle también realiza bloqueos totales de sus objetos principales, tales como
Logs, Diccionario de Datos y Segmentos de los Tablespaces para asegurar que
ningún usuario manipule objetos vitales para el funcionamiento correcto de la
BD.

También podría gustarte