Sunteți pe pagina 1din 46

Recuperacin de fallos

6.1 Conceptos generales de recuperacin


EMPLEADO
codEmp nomEmp

depto

1
12

Jos
Antonio

10
20

Cristina

30

22
5

Julia
Rubn

20
10

...

...

...

DEPARTAMENTO
codDep nomDep

ciudSede numEmp

20
10

Produccin Murcia
Direccin
Madrid

2
2

30

Sistemas

Valencia

...

...

...

...

Transaccin T: Aadir a la base de datos la empleada (14, Eva, 30)

6.1 Conceptos generales de recuperacin


El cdigo de T podra ser el siguiente: (SQL embebido)
...
(1) EXEC SQL INSERT INTO Empleado VALUES (14, Eva, 30);
(2) EXEC SQL UPDATE Departamento SET numEmp=numEmp+1
WHERE codDep = 30;
(3) EXEC SQL COMMIT;
...
nica transaccin con varias operaciones/sentencias SQL
Cul es el estado de la BD entre las sentencias (2) y (3)?

6.1 Conceptos generales de recuperacin


Idea bsica: atomicidad y durabilidad de toda transaccin
Secuencia de operaciones que llevan la BD de un estado
consistente a otro estado consistente
Debe garantizarse frente a todo tipo de fallos posible

El SGBD debe asegurar que toda transaccin T ...


ejecute todas sus operaciones con xito y su efecto
quede permanente en la BD,
o bien que ...
no tenga ningn efecto sobre la BD ni otras transacciones
Nunca deben ejecutarse slo algunas operaciones de T
Ni siquiera por culpa de un fallo a mitad de T
4

6.1 Conceptos generales de recuperacin


Recuperacin
dejar la informacin de la BD en un estado correcto,
tras un fallo del sistema que ha dejado la BD
en un estado inconsistente o sospechoso de serlo
El Subsistema Gestor de Recuperacin del SGBD vela por
que...
No se pierda ninguna transaccin
Ninguna transaccin quede a medio ejecutarse
Ninguna transaccin se ejecute ms de una vez

6.1 Conceptos generales de recuperacin


Tipos de fallos
1. Locales previstos por la aplicacin

Saldo insuficiente en transaccin de reintegro Fallo local:

2. Locales no previstos
Error de programacin (bug), interrupcin

3. Por imposicin del control de


concurrencia

Slo afecta a la T
fallida
Prdida de datos
de T en memoria
princ. y bfer E/S

Violacin de seriabilidad; bloqueo mortal

4. Fallos del sistema


Mal funcionamiento hardware o error software (SGBD, SO)

Afectan a todas las transacciones


Prdida de la memoria principal y bfer E/S
No daan el disco
6

6.1 Conceptos generales de recuperacin


Tipos de fallos

(y 2)

5. Fallos de disco
Fallos en dispositivos de almacenamiento

Afectan a todas las transacciones


Prdida de la memoria principal y bfer E/S
Algunos bloques del disco pueden perder sus datos
6. Fallos fsicos o catastrficos
Corte de suministro elctrico, robo del disco, incendio, sabotaje,
sobreescritura por error, etc.

6.1.1 Concepto de transaccin


Unidad lgica de procesamiento
Secuencia de operaciones que implican accesos a la base de datos
ejemplo: transferencia de dinero entre dos cuentas bancarias

Pero tambin se considera...


Unidad lgica de integridad
Unidad lgica de concurrencia
Unidad lgica de recuperacin

Una transaccin es atmica


O se ejecutan todas las operaciones
que componen la transaccin,
o no se realiza ninguna

6.1.1 Concepto de transaccin


Inicio de una transaccin
Sentencia SQL (LDD o LMD) interactiva
Sentencia SQL incluida en un programa (si no tiene ya transaccin en
progreso)

Fin de una transaccin


Confirmar (COMMIT) xor Anular (ROLLBACK)
Ambas operaciones pueden ser de tipo explcito o implcito
Fin
OK

T1

COMMIT T1

SGBD
T2

K
O

BD
ROLLBACK T2

6.1.2 Propiedades de una transaccin


Atomicidad

SubSistema de
Recuperacin

Todo o nada

Conservacin de la Consistencia

SS de Integridad
+ Programadores

T lleva la BD de un estado de consistencia a otro


No necesariamente se mantiene la consistencia a mitad de T

Aislamiento (Isolation)

SS de Control de
T no muestra los cambios que produce hasta que finaliza
Puede no imponerse de forma estricta (niveles de aislamiento) Concurrencia

Durabilidad
Una vez que T finaliza con xito y es confirmada,
los cambios perduran aunque el sistema falle despus

Conocidas como propiedades ACID

SubSistema de
Recuperacin

10

6.1.3 y 6.1.4 Operaciones y Estados de


una transaccin
Diagrama de Transicin de Estados
de la ejecucin de una transaccin
INICIO DE
TRANSACCIN

LEER /
ESCRIBIR

FIN DE
TRANSACCION

ACTIVA

Verificaciones para
control de concurrencia
y recuperacin
PARCIALMENTE
CONFIRMADA

CONFIRMAR

CONFIRMADA

ABORTAR

ABORTAR

Otras:
* DESHACER una operacin
* REHACER (algunas operaciones de)
una transaccin

FALLIDA

TERMINADA

11

6.1 Conceptos generales de recuperacin


Recuperabilidad de planes de transacciones
Hay que asegurar que una vez que T se ha confirmado,
nunca ser necesario anularla (cancelarla, revertirla, abortarla)
Un plan P es recuperable si ninguna transaccin T
de P se confirma antes de haberse confirmado toda
transaccin T que ha escrito un dato que T lee
Una transaccin Tj lee de la transaccin Tk ,
si Tk escribe un elemento X y luego Tj lo lee

12

6.1 Conceptos generales de recuperacin


Recuperabilidad de planes de transacciones (2)
As, Tj no lee de Tk...
Si Tk ha abortado antes de que Tj lea el elemento X
Si otras transacciones escriben X despus de que Tk lo haya
escrito y antes de que Tj lo lea
Ejemplo de plan no recuperable

Pc: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e2(X) ; c2 ; ...


Solucin: postergar la confirmacin de T2 hasta que T1 se confirme

Pd: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e2(X) ; e1(Y) ; c1 ; c2;

13

6.1 Conceptos generales de recuperacin


Recuperabilidad de planes de transacciones (3)
En un plan recuperable ninguna T confirmada tiene que
anularse jams, pero puede ocurrir el fenmeno de la
reversin en cascada
Tk no confirmada debe anularse porque
ha ledo X de Tj , y Tj ha sido abortada
Ejemplo de plan con reversin en cascada

Pe: l1(X) ; e1(X) ; l2(X) ; l1(Y) ; e2(X) ; e1(Y) ; r1 ;

La cancelacin en cascada puede consumir mucho tiempo

Un plan P es sin cascada si toda T en el plan slo lee


datos escritos por transacciones confirmadas
Cmo transformamos Pe para que evite la cancelacin en cascada?

Un plan sin cancelacin en cascada, es recuperable


14

6.1 Conceptos generales de recuperacin


Recuperabilidad de planes de transacciones (y 4)
Un plan P es estricto si las transacciones no pueden
leer ni escribir un elemento X hasta que sea
confirmada o abortada toda T que haya escrito X
Si T1 es abortada, es necesario deshacer todas sus
operaciones de escritura
Deshacer una operacin de escritura e1(X,5) consiste en
restaurar el valor anterior del elemento X
Pero esto puede no funcionar correctamente si el plan
no es estricto:
Pf: e1(X,5) ; e2(X,8) ; r1 ;
Un plan estricto es recuperable y sin cancelacin en cascada
15

6.1 Conceptos generales de recuperacin


Bitcora
Cuando ocurre un fallo...
... cmo restaurar la base de datos a un estado consistente?

Redundancia + Tcnica de Recuperacin


Seguir la pista de
la ejecucin de
cada transaccin
Cundo se inicia,
confirma o aborta
Qu operaciones
realiza sobre qu
datos

FICHERO
DE
BITCORA

Acciones para restablecer


el contenido de la BD a un
estado que asegure:
Consistencia de la BD
Atomicidad de transacciones
Durabilidad de transacciones

16

6.1 Conceptos generales de recuperacin


Bitcora

(2)

Fichero que almacena detalles sobre las operaciones


efectuadas como parte de las transacciones
Log, diario, journal, registro histrico...

Se mantiene en el disco
En un rea distinta a donde se almacenan los datos de la BD
No le afecta ningn tipo de fallo, salvo los de tipo 5 y 6
Se suele realizar peridicamente una copia de seguridad (en cinta)

Cada registro del fichero se denomina entrada, que puede


ser de diversos tipos

17

6.1 Conceptos generales de recuperacin


Bitcora

(3):

tipos de entradas

< INICIAR, T >


Indica que la transaccin T ha comenzado su ejecucin

< ESCRIBIR, T, X, valor_anterior, valor_nuevo >


Indica que T ha modificado el valor del elemento X

< LEER, T, X >


Indica que T ley el valor del elemento X de la base de datos

< COMMIT, T >


Indica que T finaliz con xito y su efecto puede ser confirmado en la
base de datos en disco: los cambios que ha realizado pueden quedar
permanentes en la BD

< ROLLBACK, T >


Indica que la transaccin T ha sido anulada de forma que ninguna de
sus operaciones tendr efecto sobre la BD: la transaccin ser
revertida, todas sus operaciones sern deshechas
18

6.1 Conceptos generales de recuperacin


Bitcora

(y 4)

Suponemos que...
Las transacciones no se pueden anidar
Toda modificacin permanente de la BD ocurre
dentro de una transaccin
Recuperar un fallo de T consistir en deshacer o rehacer
algunas de sus operaciones, a partir del contenido de la
bitcora (se ver)

19

6.1 Conceptos generales de recuperacin


Acceso a datos almacenados
Cada T posee un rea de trabajo privada donde guarda
todo elemento que lee/escribe
Espacio en memoria principal y local a la transaccin
Se crea al iniciarse T y se elimina cuando T finaliza

Bfer de base de datos que contiene temporalmente los


bloques de BD que las transacciones requieren
Uno o ms bloques en memoria principal (en la cach del SGBD)
Comn a todas las transacciones
MEMORIA PRINCIPAL

Area de
trabajo
de T

Bfer
de BD

BD
20

6.1 Conceptos generales de recuperacin


Punto de confirmacin de una transaccin
Cuando T termina de ejecutar COMMIT significa que...
Todas sus operaciones se ejecutaron con xito
El efecto de dichas operaciones se anot en bitcora,
incluyendo el COMMIT

T ha llegado a su punto de confirmacin


... y se puede suponer que...
T est confirmada
Sus cambios son permanentes en la BD
Bloqueos liberados y cursores cerrados

BD ok

T1

Bitcora

UPDATE... SELECT... INSERT... COMMIT


BD ok

...
<INICIAR,T1>
<ESCRIBIR,T1,...>
<LEER,T1,...>
<ESCRIBIR,T1,...>
<COMMIT,T1>
...
21

6.1 Conceptos generales de recuperacin


Punto de confirmacin de una transaccin

(y 2)

Cuando T termina de ejecutar ROLLBACK significa que...


T ha resultado fallida
El ROLLBACK se anot en bitcora

... y se puede suponer que...


T ha sido cancelada (deshecha)
Sus operaciones han sido anuladas: ningn efecto en la BD
Bloqueos liberados y cursores cerrados

UPDATE... SELECT... ROLLBACK


BD ok

T1

...
<INICIAR,T1>
<ESCRIBIR,T1,...>
<LEER,T1,...>
<ROLLBACK,T1>
...
22

6.2 El proceso de recuperacin del fallo de una


transaccin
Si el fallo ocurre cuando T est en curso de ejecucin,
entonces se debe deshacer T
Pues no alcanz su punto de confirmacin (no anot <COMMIT,T>)

Si el fallo ocurre cuando T ya ha sido confirmada,


entonces se debe rehacer T
No es seguro que todo cambio haya sido llevado a la BD en disco

UPDATE... SELECT...

COMMIT

23

6.2 El proceso de recuperacin del fallo de una


transaccin
deshacer T implica deshacer cada una de sus operaciones,
a partir de las anotaciones en bitcora, empezando por la
ltima (orden inverso)
< ESCRIBIR, T, X, valor_anterior, valor_nuevo >
deshacer (< ESCRIBIR, T, X, 10, 5 >) X = 10 en la BD

rehacer T implica rehacer cada una de sus operaciones, a


partir de las anotaciones en bitcora, empezando por la
primera (en el mismo orden)
< ESCRIBIR, T, X, valor_anterior, valor_nuevo >
rehacer (< ESCRIBIR, T, X, 10, 5 >) X = 5 en la BD

24

6.2 El proceso de recuperacin del fallo de una


transaccin
Las entradas < LEER,... > son necesarias para detectar

reversin en cascada

...
< ESCRIBIR, T1, X, 10, 5 >
...
< LEER, T2, X >
< ESCRIBIR, T2, X, 5, 25 >
...
< ROLLBACK, T1 >
...

T2 debe ser deshecha !

Si el mtodo de concurrencia / recuperacin garantizara


planes sin cascada o planes estrictos, no sera necesario
anotar entradas LEER en bitcora
25

6.2 El proceso de recuperacin del fallo de una


transaccin
Escritura anticipada en bitcora
La bitcora es un fichero almacenado en disco, por lo que
para insertar una nueva entrada es necesario...
Copiar el bloque adecuado del fichero a memoria principal
Actualizar el bloque en memoria, insertando la nueva entrada
Copiar el bloque desde memoria al disco

Una escritura de bloque en disco por cada nueva entrada!!


Bfer de bitcora, que contiene un bloque del fichero de
bitcora hasta que se llena de entradas, momento en el
que se escribe en el disco
Espacio en memoria principal (en la cach del SGBD)

Una nica escritura por bloque


26

6.2 El proceso de recuperacin del fallo de una


transaccin
Escritura anticipada en bitcora (2)
Cuando ocurre un fallo, algunas entradas pueden no haber
sido llevadas al fichero de bitcora en disco
Entradas del bloque incompleto, en el bfer de bitcora
Con el fallo se pierde el contenido de la memoria principal

Dichas entradas no sern consideradas en el proceso de


recuperacin, pues el SGBD acude al fichero bitcora
Esto puede impedir la restauracin correcta tras el fallo
de una transaccin
Es necesario seguir un protocolo de escritura anticipada en
bitcora, o bitcora adelantada
27

6.2 El proceso de recuperacin del fallo de una


transaccin
Escritura anticipada en bitcora (3)
Bitcora adelantada
No se puede grabar en disco los cambios realizados por T
hasta que se haya escrito en disco toda entrada de
bitcora para T hasta el momento actual
UPDATE... DELETE...

COMMIT

PUNTO DE CONFIRMACIN

T
BITCORA
a disco

CAMBIOS
a disco

El COMMIT de T no se completa hasta que se haya escrito


en disco toda entrada de bitcora para T pendiente
Se fuerza la escritura en disco de las entradas de bfer de bitcora
para T, antes de consolidar cambios hechos por T
28

6.2 El proceso de recuperacin del fallo de una


transaccin
Escritura anticipada en bitcora (y 4)
Nunca puede ocurrir...
UPDATE... DELETE...

ESCRITURA EN
DISCO DE CAMBIOS

COMMIT

ESCRITURA EN
DISCO DE BITCORA

Pero s puede suceder...


UPDATE... DELETE...

PUNTO DE CONFIRMACIN

COMMIT

T
BITCORA
a disco

SELECT... INSERT...

CAMBIOS
a disco

COMMIT

T
BITCORA
a disco

CAMBIOS
a disco
29

6.2 El proceso de recuperacin del fallo de una


transaccin
Puntos de validacin
T1

UPDATE... SELECT...

DELETE...

INSERT...

SELECT... COMMIT

T2
T3

UPDATE...

INSERT...

SELECT...

Cmo sabe el SGBD qu transacciones


Examinar TODA la bitcora:
debe deshacer?

ausencia de entradas COMMIT

Y cmo sabe cules debe rehacer?


Rehacer TODAS las Ti confirmadas

...
<INICIAR,T2>
<INICIAR,T3>
<ESCRIBIR,T2,...>
<INICIAR,T1>
<ESCRIBIR,T1,...>
<ESCRIBIR,T3,...>
<LEER,T1,...>
<ESCRIBIR,T3,...>
<LEER,T2,...>
<ESCRIBIR,T1,...>
<COMMIT,T2>
<LEER,T3,...>

mejora con
puntos de
validacin
30

6.2 El proceso de recuperacin del fallo de una


transaccin
Puntos de validacin

(2)

SGBD marca automticamente un punto de validacin...


Cada m minutos, o
Tras escribir t entradas <COMMIT,Ti> en bitcora desde
el ltimo punto de validacin

Es otro tipo de entrada en el fichero de bitcora


< registro_de_validacin >
Este registro contiene:

Lista de identificadores de transacciones activas en ese instante


Direccin en el fichero bitcora de 1 y ult entradas para cada Ti
activa

31

6.2 El proceso de recuperacin del fallo de una


transaccin
Puntos de validacin

(3)

Marcar un punto de validacin significa ...


1. Suspender la ejecucin de las transacciones
2. Forzar escritura en disco del bfer de bitcora
3. Forzar escritura en disco de todo bloque del bfer
de BD modificado
4. Escribir en bfer de bitcora el registro_de_validacin y
forzar su escritura en disco
5. Escribir en Fichero Especial de Arranque la direccin que
ocupa el registro_de_validacin dentro del fichero bitcora
6. Reanudar la ejecucin de las transacciones
32

6.2 El proceso de recuperacin del fallo de una


transaccin
Puntos de validacin

(4)

Al marcar un punto de validacin se transfiere al disco el


efecto de las operaciones ESCRIBIR realizadas hasta ese
instante por las transacciones
Pero no son los nicos momentos en los que se consolidan cambios
en disco... en qu otros se realiza?

El uso de puntos de validacin permite, en el proceso de


recuperacin...
Recorrer la bitcora a partir del ltimo punto de
validacin (y no desde el principio)
Ignorar Ti confirmadas antes del ltimo punto de
validacin (no es necesario rehacer todas las confirmadas)
33

6.3 Tcnicas de recuperacin de fallos


Estrategia de recuperacin representativa
Tras un fallo de tipo 5 o 6, que produjo daos en la BD...
Restaurar copia de seguridad de la BD
Reconstruir un estado ms actual: rehacer operaciones de T
confirmadas hasta el momento de la cada bitcora
Tras un fallo de tipos 1 a 4...
Invertir modificaciones que provocaron la inconsistencia:
deshacer algunas operaciones bitcora
Si es necesario, asegurar cambios correctos: rehacer algunas
otras operaciones bitcora
Es necesario seguir una tcnica de recuperacin
34

6.3 Tcnicas de recuperacin de fallos


Tcnica basada en la actualizacin diferida
Ninguna transaccin T modifica la BD antes de llegar a
su punto de confirmacin
Se difiere la consolidacin de cambios realizados por T hasta
despus de confirmarse T
UPDATE... DELETE...

COMMIT

BITCORA
a disco

CAMBIOS
a disco

T
Si el fallo ocurre antes de alcanzar T su punto de
confirmacin, no es necesario deshacer sus operaciones

Si el fallo ocurre despus de alcanzar T su punto de


confirmacin, es necesario rehacer sus operaciones
35

6.3 Tcnicas de recuperacin de fallos


Tcnica basada en la actualizacin diferida

(2)

Algoritmo NO-DESHACER / REHACER


1. Crear dos listas ACTIVAS y CONFIRMADAS, vacas
2. Inicializar ACTIVAS con la lista de transacciones activas almacenada en
el ltimo registro_de_validacin en bitcora
3. Examinar la bitcora a partir del ltimo punto de validacin en adelante
4. Si se encuentra una entrada <INICIAR,T>, aadir T a la lista ACTIVAS
5. Si se encuentra una entrada <COMMIT,T>, mover T de ACTIVAS a
CONFIRMADAS
6. Al terminar de examinar la bitcora:
Rehacer las operaciones <ESCRIBIR,...> de las transacciones en
CONFIRMADAS, en el mismo orden en que aparecen en bitcora
Ignorar transacciones de la lista ACTIVAS (ms adelante Reiniciar)
36

6.3 Tcnicas de recuperacin de fallos


Tcnica basada en la actualizacin diferida

(y 3)

En bitcora, las entradas <ESCRIBIR,...> slo necesitan guardar


el valor_nuevo: pueden rehacerse pero nunca deshacerse
La operacin reiniciar T es reintroducir T en el sistema, como si
fuera nueva
Puede hacerlo el SGBD de forma automtica
o el usuario manualmente
Las operaciones se reharn en el orden en que aparecen
anotadas en bitcora.
No se rehace cada T confirmada en aislado, sino que
se van rehaciendo todas las confirmadas a la vez,
operacin a operacin.
37

6.3 Tcnicas de recuperacin de fallos


Tcnica basada en la actualizacin inmediata
Una transaccin T puede modificar la BD antes de
llegar a su punto de confirmacin
Algunos cambios realizados por T pueden consolidarse en
disco antes de confirmarse T ( modificaciones no comprometidas )
BITCORA
a disco

UPDATE... DELETE...

CAMBIOS
a disco

COMMIT

Si el fallo ocurre antes de alcanzar T su punto de


confirmacin (quiz despus de grabar cambios en BD),
es necesario deshacer sus operaciones
Si el fallo ocurre despus de alcanzar T su punto de
confirmacin, es necesario rehacer sus operaciones
38

6.3 Tcnicas de recuperacin de fallos


Tcnica basada en la actualizacin inmediata

(2)

Algoritmo DESHACER / REHACER


1. Crear dos listas ACTIVAS y CONFIRMADAS, vacas
2. Inicializar ACTIVAS con la lista de transacciones activas almacenada en
el ltimo registro_de_validacin en bitcora
3. Examinar la bitcora a partir del ltimo punto de validacin en adelante
4. Si se encuentra una entrada <INICIAR,T>, aadir T a la lista ACTIVAS
5. Si se encuentra una entrada <COMMIT,T>, mover T de ACTIVAS a
CONFIRMADAS
6. Al terminar de examinar la bitcora:
Deshacer las operaciones <ESCRIBIR,...> de las transacciones de la
lista ACTIVAS, en orden inverso al que se anotaron en bitcora
Rehacer las operaciones <ESCRIBIR,...> de las transacciones en
CONFIRMADAS, en el mismo orden en que aparecen en bitcora
39

6.3 Tcnicas de recuperacin de fallos


Tcnica basada en la actualizacin inmediata

(3)

En bitcora, las entradas <ESCRIBIR,...> necesitan guardar el


valor_anterior y valor_nuevo: pueden deshacerse o rehacerse
Se debe deshacer primero, y rehacer despus
Las operaciones se desharn en el orden inverso al de
anotacin en bitcora
No se deshace cada T activa en aislado, sino que se
van deshaciendo todas las activas a la vez, operacin a
operacin
Las operaciones se reharn en el mismo orden en que
aparecen en bitcora
No se rehace cada T confirmada en aislado, sino que
se van rehaciendo todas las confirmadas a la vez,
operacin a operacin
40

6.3 Tcnicas de recuperacin de fallos


Tcnica de actualizacin inmediata: variacin
Una transaccin T puede modificar la BD antes de
alcanzar su punto de confirmacin
Todos los cambios hechos por T se llevan a la BD
antes de llegar T a su punto de confirmacin
BITCORA
a disco

UPDATE... DELETE...

CAMBIOS
a disco

PUNTO DE CONFIRMACIN

COMMIT

Si el fallo ocurre antes de alcanzar T su punto de


confirmacin (quiz despus de grabar cambios en BD),
es necesario deshacer sus operaciones
Si el fallo ocurre despus de alcanzar T su punto de
confirmacin, no es necesario rehacer sus operaciones
41

6.3 Tcnicas de recuperacin de fallos


Prctica
Aplicar los tres algoritmos al ejemplo de la diapositiva 27
Qu ocurre con transacciones que terminan con
ROLLBACK?

Lo que se deja como ejercicio...


Cdigo del Algoritmo DESHACER/NO-REHACER
Usado en la variacin de la tcnica de actualizaciones inmediatas

Cambios necesarios en los algoritmos si el sistema no


utilizara puntos de validacin/revisin

42

Anexo. Control de transacciones en Oracle


Inicio de transaccin
Cuando no hay ya una transaccin en progreso, y se ejecuta una sentencia
LDD o LMD (interactivamente o dentro de una aplicacin)
Cada sentencia LDD es tratada como una transaccin
No existe sentencia de tipo BEGIN TRANSACTION

Fin de transaccin
COMMIT
Finaliza la transaccin actual y hace permanentes (confirma) los cambios
realizados
COMMIT implcito (por parte del SGBD)
El programa finaliza de forma normal
Se sale de la herramienta (SQL*Plus, ...) correctamente
Se ejecuta una sentencia LDD
Oracle realiza COMMIT antes y despus (si tiene xito) de ejecutarla

COMMIT explcito (por parte del programador/usuario)


COMMIT [WORK] ;

43

Anexo. Control de transacciones en Oracle (2)


Fin de transaccin
ROLLBACK

(cont.)

Finaliza la transaccin actual y deshace los cambios realizados


ROLLBACK implcito (por parte del SGBD)
La aplicacin finaliza de forma anormal
Se sale de la herramienta (SQL*Plus, ...) cerrando la ventana

ROLLBACK explcito (por parte del programador/usuario)

ROLLBACK [WORK] [TO SAVEPOINT savepoint];

44

Anexo. Control de transacciones en Oracle (y 3)


Reversin parcial de una transaccin
SAVEPOINT savepoint ;
Establece un punto hasta el que se podr hacer ROLLBACK despus
UPDATE Empleado SET salario = 2000 WHERE nombre = 'Julia Ibez' ;
SAVEPOINT julia_salario ;
UPDATE Empleado SET salario = 1500 WHERE nombre = 'Cristina Ortn' ;
SAVEPOINT cristina_salario ;
SELECT SUM(salario) FROM Empleado ; no se cumple que sea 315.000
ROLLBACK TO SAVEPOINT julia_salario ;
UPDATE Empleado SET salario = 1300 WHERE nombre= 'Cristina Ortn' ;
COMMIT ;

45

6. Recuperacin de fallos
Bibliografa
[EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos de Sistemas de Bases de
Datos. 3 Edicin. Addison-Wesley. (Cap. 19 y 21)

[EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de bases de datos. Conceptos
fundamentales. 2 Edicin. Addison-Wesley Iberoamericana. (Cap. 17, 18
y 20)
[CBS 1998] Connolly, T.; Begg C.; Strachan, A.: Database Systems: A Practical
Approach to Design, Implementation and Management. 2nd Edition. AddisonWesley. (Cap. 17)

46

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