Sunteți pe pagina 1din 12

1

Prctica 4: Estudio
del SGBD Oracle 10
Gestin de Transacciones
El SGBD Oracle 10
Objetivos
estudio de la gestin de transacciones.
estudio de las estrategias para la
comprobacin de la integridad.
estudio de las estrategias para el control de la
concurrencia
2
Secuencia de operaciones de acceso a
la base de datos que constituyen una
unidad lgica de ejecucin
TRANSACCIN
Las operaciones de acceso a una BD se
organizan en transacciones
El SGBD ORACLE 10
Empleado (dni, nombre, dir, dpto)
CP: {dni} VNN={dpto}
CAj: {dpto} Departamento f(dpto)=cdigo
Departamento (cdigo, nombre, ubicacin)
CP: {cdigo}
R1: "Dx (Departamento(Dx)

Ex (Empleado(Ex) Dx.cdigo = Ex.dpto ) )


Actualizacin de la BD:
Insercin de un nuevo departamento <d2,Personal, Planta 3>
y asignacin al mismo del empleado de dni 20456 (ya existente en
la base de datos)
Gestin de Transacciones
3
1) Insercin en Departamento: <d2, Personal, Planta 3>
2) Modificacin en Empleado: modificacin del atributo dpto del
empleado con dni 20456
1) Modificacin en Empleado: modificacin del atributo dpto del
empleado con dni 20456
2) Insercin en Departamento: <d2, Personal, Planta 3>
ERROR: la restriccin R1 no se cumple
ERROR: la restriccin de CAj. no se cumple
necesidad del concepto de transaccin !
Gestin de Transacciones
INICIO T1
INSERT INTO Departamento VALUES (d2, Personal, Planta 3)
UPDATE Empleado SET dpto=d2 WHERE dni=20456
FIN T1
las restricciones se comprueban al final de la transaccin
la transaccin es rechazada si alguna restriccin se viola
Gestin de Transacciones
4
Gestin de Transacciones
Grafo de transiciones de estado de una transaccin
activa
confirmada
fallada terminada
confirmada
parcialmente fin
inicio
anulacin
anulacin
confirmacin
usuario
SGBD
usuario
SGBD
SGBD
usuario
Propiedades que deben cumplir las transacciones:
atomicidad: una transaccin es una unidad atmica de
ejecucin (o se ejecutan todas sus operaciones o ninguna).
consistencia: la transaccin debe conducir la BD de un
estado consistente a otro estado consistente (se cumplen
todas las restricciones de integridad).
aislamiento: una transaccin no debe hacer visibles sus
cambios a otras transacciones hasta que es confirmada.
persistencia: cuando una transaccin es confirmada sus
cambios deben ser grabados en la BD y no deben perderse
debido a fallos de otras transacciones o del sistema.
Gestin de Transacciones
5
Definicin de transacciones en SQL:
INICIO: no existe una instruccin para definir el inicio de una
transaccin. (INICIO implcito).
FIN (con confirmacin): COMMIT [WORK ] (transaccin
confirmada parcialmente)
FIN (con anulacin): ROLLBACK [WORK ] (transaccin anulada)
Gestin de Transacciones
En SQL no se pueden anidar las transacciones.
[[NOT] DEFERRABLE]
[INITIALLY {IMMEDIATE | DEFERRED}]
Comprobacin de la integridad en SQL:
Punto de comprobacin de la integridad (se define para cada
restriccin del esquema):
despus de cada operacin SQL (IMMEDIATE)
al final de la transaccin (DEFERRED) .
El punto de comprobacin de una restriccin puede ser fijo
(NOT DEFERRABLE) o se puede cambiar dinmicamente
durante la ejecucin de una transaccin (DEFERRABLE).
Gestin de Transacciones
6
La semntica de cada una de las versiones de la clusula es:
- si no se utiliza esta clusula la restriccin se define como no
diferible y con modo inmediato.
- la versin DEFERRABLE INITIALLY IMMEDIATE (resp.
DEFERRED) define una restriccin como diferible y con modo por
defecto inmediato (resp. diferido).
- la versin NOT DEFERRABLE INITIALLY IMMEDIATE coincide con
los valores por defecto.
- la versin NOT DEFERRABLE INITIALLY DEFERRED est
prohibida.
- la versin DEFERRABLE (resp. NOT DEFERABLE) define una
restriccin como diferible (resp. no diferible) y con modo por defecto
inmediato.
- la versin INITIALLY IMMEDIATE define una restriccin como no
diferible y con modo inmediato.
- la versin INITIALLY DEFERRED define una restriccin como
diferible y con modo inicial diferido.
Gestin de Transacciones
La instruccin SQL que permite cambiar, localmente en una transaccin,
el modo de una restriccin definida como diferible (DEFERRABLE), es:
SET CONSTRAINT {nombre_restriccin,... | ALL}
{IMMEDIATE | DEFERRED}
Cada restriccin especificada en la lista debe ser diferible y la opcin
ALL hace referencia a todas las restricciones diferibles del esquema de
la base de datos.
El alcance del cambio producido por la instruccin SET CONSTRAINT
es la transaccin en la que se incluye o el fragmento de transaccin
hasta la siguiente aparicin de la misma instruccin.
Si se incluye la instruccin en medio de la transaccin con la opcin
IMMEDIATE, las restricciones afectadas por la instruccin son
comprobadas cuando se ejecuta sta, si alguna de estas restricciones
falla, la instruccin SET falla y el modo de las restricciones permanece
sin modificar.
Gestin de Transacciones
7
Gestin de Transacciones
Empleado (dni, nombre, dir, dpto)
CP: {dni} VNN={dpto}
CAj: {dpto} Departamento f(dpto)=cdigo
Departamento (cdigo, nombre, ubicacin)
CP: {cdigo}
R1: "Dx (Departamento(Dx)

Ex (Empleado(Ex) Dx.cdigo = Ex.dpto ) )


Actualizacin de la BD:
Insercin de un nuevo departamento <d2,Personal, Planta 3>
y asignacin al mismo del empleado de dni 20456 (ya existente en
la base de datos)
Gestin de Transacciones
CREATE TABLE Empleado
(dni char(10) CONSTRAINT cp_socio PRIMARY KEY INITIALLY IMMEDIATE,
nombre varchar2 (60)
CONSTRAINT emp_nulo NOT NULL INITIALLY IMMEDIATE,
dir varchar2 (50),
dpto char(5)
CONSTRAINT dpto_nulo NOT NULL INITIALLY IMMEDIATE
CONSTRAINT caj_emp_dpto REFERENCES Departamento (codigo)
INITIALLY DEFERRED );
CREATE TABLE Departamento
(codigo char(5) CONSTRAINT cp_dpto PRIMARY KEY INITIALLY IMMEDIATE,
nombre varchar2 (50)
CONSTRAINT nombre_nulo NOT NULL INITIALLY IMMEDIATE,
ubicacin varchar2 (15),
CONSTRAINT dpto-emp
CHECK (NOT EXISTS (SELECT * FROM Departamento D
WHERE NOT EXISTS (SELECT * FROM Empleado E
WHERE E.dpto=D.codigo)
INITIALLY DEFERRED);
8
INSERT INTO Departamento VALUES (d2, Personal, Planta 3)
SGBD: comprobacin de las RI: cp_dpto, nombre_nulo
UPDATE Empleado SET dpto=d2 WHERE dni=20456
SGBD: comprobacin de la RI: dpto_nulo
COMMIT WORK
SGBD: comprobacin de las RI: caj_emp_dpto, dpto_emp
Actualizacin de la BD:
Insercin de un nuevo departamento <d2,Personal, Planta 3>
y asignacin al mismo del empleado de dni 20456 (ya existente en
la base de datos)
Transaccin confirmada por el SGBD: sus cambios sern
aplicados a la BD
Gestin de Transacciones
INSERT INTO Departamento (codigo, ubicacin)
VALUES (d5, Planta 2)
SGBD: comprobacin de la RI: cp_dpto,
comprobacin de la RI: nombre_nulo
SGBD ANULAR (transaccin)
Actualizaciones de la BD:
transaccin fallada por el SGBD: sus cambios que ya han sido
grabados sern deshechos.
Gestin de Transacciones
9
INSERT INTO Departamento (codigo, nombre, ubicacin)
VALUES (d8, Proyectos, Planta 1)
SGBD: comprobacin de las RI: cp_dpto, nombre_nulo
COMMIT WORK
SGBD: comprobacin de las RI: dpto_emp
SGBD ANULAR (transaccin)
Actualizaciones de la BD:
Gestin de Transacciones
transaccin fallada por el SGBD: sus cambios que ya han sido
grabados sern deshechos.
Transacciones diferibles:
Gestin de Transacciones
CREATE SCHEMA esquema1
.....
CREATE ASSERTION R1 CHECK ( )
DEFERRABLE INITIALLY IMMEDIATE
.....
10
Transacciones diferibles:
Gestin de Transacciones
Instruccin(1)-SQL
....
Instruccin(i)-SQL (relevante para R1)
SGBD: comprobacin de R1
....
COMMIT WORK
ANULAR
(transaccin)
viola R1
satisface R1
Transaccin T
1
Transacciones diferibles:
Gestin de Transacciones
SET CONSTRAINT R1 DEFERRED
Instruccin(1)-SQL
....
Instruccin(i)-SQL (relevante para R1)
....
COMMIT WORK
SGBD: comprobacin de R1
ANULAR
(transaccin)
viola R1
satisface R1
CONFIRMAR (transaccin)
Transaccin T
2
11
Definicin de transacciones en ORACLE:
INICIO: en el uso interactivo una transaccin se inicia con la
primera instruccin SQL ejecutada desde que finaliz la ltima
transaccin o desde que se inici la sesin. (INICIO implcito).
FIN (con confirmacin): COMMIT [WORK ] (transaccin
confirmada parcialmente)
FIN (con anulacin): ROLLBACK [WORK ] (transaccin anulada)
FIN (implcito): cierre de la sesin (confirmada parcialmente) o
anulacin del SGBD (anulada)
Gestin de Transacciones
Comprobacin de la integridad en ORACLE:
La sintaxis de ORACLE para la definicin del punto de
comprobacin de una restriccin coincide con la sintaxis de
SQL, con las siguientes excepciones:
restriccin con modo inmediato (IMMEDIATE): se anula
la operacin SQL que ha provocado la violacin.
(statement rollback)
restriccin con modo diferido (DEFERRED): se anula la
transaccin que ha provocado la violacin.
(transaction rollback)
Gestin de Transacciones
12
Prctica n 4: Estudio del SGBD ORACLE10
Gestin de transacciones.
Ejercicios

S-ar putea să vă placă și