-*- coding:iso-8859-1.unix; -*-
$Id$

Unidad 3 - Procesamiento de transacciones. 

    Procesamiento de transacciones. Operaciones de lectura y escritura
    en una transacción. Control de concurrencia. Problemas si no hay
    control de concurrencia. Tipos de fallos en las
    transacciones. Necesidad de la recuperación. Estados de las 
    transacciones y operaciones. Bitácora del sistema. Punto de
    confirmación. Punto de control. Propiedades deseables en las
    transacciones.

Objetivos:

* Enumere las propiedades deseables de las transacciones
* Describa las operaciones de lectura y escritura en una transacción.
* Enumere los problemas que acontecen si no se usa control de concurrencia
* Enumere los tipos de fallos que pueden impedir que una transacción
  se complete. 
* Describa los estados de una transacción y las operaciones de cambio
  de estado. 
* Describa el uso de la bitácora del sistema
* Explique el significado del punto de confirmación de una transacción.
* Describa el procedimiento y significado de un punto de control en la
  bitácora. 

%%%------------------------  Clase 3

Hay clasificación de los SGBD por cantidad de usuarios que lo pueden
usar de manera _concurrente_: monousuario, multiusuario.

Multiprogramación: permite al computador procesar simultáneamente
varios programas (transacciones).  Con una CPU hay ejecución
_intercalada_; con varias CPUs hay ejecución _concurrente_ y
simultánea.

   --- Operaciones de lectura y escritura en una transacción

   leer_elemento(X): lee un elemento de la base de datos llamado X y
		     lo coloca en una variable del programa.
		     Supondremos que la variable del programa también
		     se llama X, para simplificar.

   escribir_elemento(X): Escribe el valor de la variable X en el
			 elemento de la base de datos que se llama X.


Describir los pasos seguidos para cada una de las operaciones
enunciadas más arriba.

Ejemplos de problemas en las transacciones:

1) Actualización perdida
Cuando dos transacciones deben modificar un elemento de datos luego de
leer su valor original.  Si las instrucciones son intercaladas, puede
darse que la priemr transacción lea X, luego la segunda lee X, luego
la primera escribe el X modificado y luego la segunda escribe el X
modificado (se perdió la modificación debida a la primer transacción).

2) Actualización temporal o lectura sucia
Una transacción modifica un elemento X, otra transacción lee el X
modificado y a su vez lo modifica.  Si la primera transacción falla,
va a poner X a su valor original, con lo cual se pierde el efecto de
la segunda transacción.

3) Resumen incorrecto
Si una transacción calcula una función de agregación sobre varios
registros, y mientras tanto otra rtansacción modifica los valores en
los registros, puede darse que algunos de los registros se lean
_antes_ de la modificación por la segunda transacción, y otros se lean
_después_.

4) Lectura no repetible
Una transacción lee un elemento; otra transacción lo modifica; la
primer transacción vuelve a leer el elemento y encuentra otro valor.

   --- ¿Porqué es necesaria la recuperación?

Para asegurarse que sólo ocurre uno de los dos casos siguientes:

a) todas las operaciones de la transacción se completen con éxito y su
   efecto quede asentado permanentemente en la base de datos.

b) la transacción no tiene efecto alguno sobre la base de datos ni
   sobre otra transacción.



Tipos de fallos:

1. Fallo en el computador.  Se pierde el contenido de la RAM.

2. Error de la transacción o del sistema. Ej: división por cero,
   desbordamiento, argumentos de tipo erróneo, error lógico de
   programación, Ctrl-C.

3. Errores locales o condiciones de excepción en la transacción.  No
   hay datos para la transacción.  Una condición (ej saldo negativo)
   puede cancelar una transacción (instrucción ABORTAR).

4. Imposición del control de concurencia.  Se aborta una transacción
   para evitar que se viole la seriabilidad, o para romper un abrazo
   mortal.  Luego puede reiniciarse.

5. Fallo del disco. Aterrizaje de cabezas.

6. Problemas y catástrofes físicos. Falta energía, incendio, robo,
   sabotaje, sobreescritura de discos y/o cintas por error.



   --- Conceptos de transacciones y sistemas

TRANSACCIÓN: es la ejecución de un programa que incluye operaciones de
	     acceso a la base de datos.

TRANSACCIÓN SÓLO DE LECTURA: cuando en latransacción sólo se leen los
			     datos.


   --- Estados de las transacciones

* INICIO_DE_TRANSACCIÓN

* LEER ó ESCRIBIR

* FIN_DE_TRANSACCIÓN: las operaciones de lectura y escritura han
		      terminado. 

* CONFIRMAR_TRANSACCIÓN: señala que la transacción _terminó_ _con_
			 _éxito_. 

* REVERTIR (ABORTAR): indica que la transacción _terminó_ _sin_
		      _éxito_. 

Algunas técnicas de recuperación requieren de las siguientes
operaciones adicionales:

* DESHACER: similar a REVERTIR, pero se aplica a una sola operación, y
	    no a toda la transacción.

* REHACER: especifica que ciertas operaciones de la transacción se
	   deben _repetir_ para asegurar que todas las operaciones de
	   una transacción confirmada se hayan aplicado con éxito a la
	   base de datos.

                    ,.
                   /  \ LEER
                   |  | ESCRIBIR
INICIO_DE_         V  |
TRANSACCIÓN   ,------./           ,------------. CONFIRMAR  ,----------.
------------>( ACTIVA )--------->| PARCIALMENTE |--------->( CONFIRMADA )
              `------'  FIN_DE_  | CONFIRMADA   |           `----------'
                 |    TRANSACCIÓN `------------'               |
                 |                 /                           |
                  \               /ABORTAR                     |
           ABORTAR \             /                             |
                    \           V                              V
                     V ,-------.                          ,---------.
                      ( FALLIDA )----------------------->( TERMINADA )
                       `-------'                          `---------'


   --- La bitácora o diario del sistema

Sigue la pista a todas las operaciones de transacciones que afectan el
valor de los elementos de la base de datos.

La bitácora se mantiene en disco.  Se la respalda periódicamente para
salvarla de los fallos catastróficos.

Tipos de entrada en la bitácora:

1. [inicio_de_transacción, T]
	 se ha iniciado la ejecución de la transacción T.

2. [escribir_elemento, T, X, valor_anterior, nuevo_valor] 
	 la transacción T cambió el valor de X, desde el valor
	 valor_anterior al nuevo_valor.

3. [leer_elemento, T. X]
         la transacción T leyó el valor del elemento de base de datos
         X. 

4. [confirmar, T]
         la transacción T terminó con éxito, y su efecto se puede
         confirmar permanentemente en la base de datos.

5. [abortar, T]
         asienta que se abortó la transacción T.







   --- Propiedades deseables de las transacciones (ACID)

Atomicidad:   una transacción es una unidad atómica de procesamiento;
              o bien se realiza por completo o nada en absoluto. 

Consistencia: una ejecución correcta de la transacción lleva a la base
	      de datos desde un estado consistente a otro.

Isolation:    una transacción no debe dejar que otras transacciones
	      puedan ver sus actualizaciones antes de ser confirmada.

Durabilidad:  una vez que una transacción ha modificado una base de
	      datos y se han confirmado las modificaciones, éstas no
	      pueden perderse debido a un fallo posterior.


El método de recuperación es responsable de garantizar la Atomicidad,
y la Durabilidad.

El método de control de concurrencia impone la Isolation
(aislamiento).  Hay definidos niveles de aislamiento en una
transacción:

  Nivel	  Propiedad
    0	  no sobreescribe las lecturas sucias de transacciones de
	  nivel más alto

    1	  no tiene actualizaciones perdidas

    2	  no tiene actualizaciones perdidas ni lecturas sucias

    3	  no tiene actualizaciones perdidas ni lecturas sucias, y
	  tiene lecturas repetibles.

Al aislamiento de grado 3 se lo denomina "aislamiento verdadero".



EOF

    Source: geocities.com/ar/uap_sd2

               ( geocities.com/ar)