bancaria encargada de realizar dicha trasferencia, pues pues el monto depositado depositado no provendría del cliente que solicito la operación. En este caso, es necesario implementar una transacción que involucre las operaciones de retiro y depósito para asegurar que ambas se ejecuten en su totalidad o que ninguna de las dos sufra efecto. Commit
Una transacción siempre termina, aun en la presencia de fallas. Si ninguna de las operaciones englobadas por una transacción representa una falla se dice que la transacción es exitosa. En este caso, la transacción hace efectiva las modificaciones realizadas por las operaciones que involucra, llevando el sistema a un nuevo estado consistente. A este proceso se le conoce como hacer un commit.
Rollback
Si existe por lo menos una falla dentro de las operaciones de una transacción, se dice que esta abortada. Su ejecución es detenida es detenida y todas las operaciones ejecutadas hasta en momento del error son deshechas, deshechas, regresando la base de de datos al estado consistente en que se entraba antes de iniciar la transacción. A esta operación se le conoce como hacer un rollback.
5.1.1 Estructura de transacciones. La estructura de una transacción usualmente viene dada según el modelo de la transacción, estas pueden ser planas (simples) o anidadas. Transacciones planas: Consisten en una secuencia de operaciones primitivas encerradas entre las palabras clave BEGIN y END. Por ejemplo:
BEGIN _TRANSACTION Reservación .... END. Transacciones Anidadas: Consiste en tener transacciones que dependen de otras, estas transacciones están incluidas dentro de otras de un nivel superior y se las conoce como subtransacciones. La transacción de nivel superior puede producir hijos (subtransacciones) que hagan más fácil la programación del sistema y mejoras del desempeño.
En las transacciones anidadas las operaciones de una transacción pueden ser así mismo otras transacciones. Por ejemplo: BEGIN _TRANSACTION Reservación
1.
T=
i
i , para todos los i = 1, 2, ..., n
2.
i
3.
Para cualesquiera dos operaciones en conflicto Oij y Okl
T, ó Oij
Okl
La primera condición establece simplemente que el dominio de la calendarización es la unión de los dominios de las transacciones individuales. La segunda condición define la relación de ordenamiento como un superconjunto de la relación de ordenamiento de transacciones individuales. Esto mantiene el ordenamiento de las operaciones dentro de cada transacción. La condición final define el orden de ejecución entre dos operaciones en conflicto. Ejemplo 6.2. Considere las tres transacciones del Ejemplo 6.1, una posible calendarización completa está dada por la siguiente gráfica dirigida acíclica (DAG).
Una calendarización se define como un prefijo de una calendarización completa. Un prefijo de un orden parcial se define como sigue. Dado un orden parcial P = {
, < }, P’ = {
’, <’ }, es un prefijo
de P si
1.
’
i
2.
ei
’, e1 <’ e2, si y solamente si, e1 < e2, y
3.
ei
’, si
ej
y ej < ei, entonces, ej
’
Las primeras dos condiciones definen a P’ como una restricción de P en el dominio
’, en donde
las relaciones de ordenamiento en P se mantienen por P’. La última condición indica que para cualquier elemento de
’, todos sus predecesores en
deben ser incluidos también en
’.
Ejemplo 6.3. La siguiente calendarización es un prefijo de la calendarización del Ejemplo 6.2.