30
Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 1 Unidad 4 Control de Transacciones 4.1 Propiedades de las transacciones e Instrucción COMMIT. 4.2 Instrucción ROLLBACK. 4.3 Niveles de aislamiento. 4.4 Grados de consistencia. Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 2 Cada vez que se ejecuta INSERT, UPDATE, DELETE, los datos se escriben a las tablas de la Base de Datos “inmediatamente”. Se dice que se entregan los datos (commit). 4.1 Propiedades de las transacciones En castellano algunos la traducen incorrectamente como comprometer

Unidad 4 [Modo de compatibilidad] - Felipe Alanís …felipealanis.org/ITD/Taller Bases de Datos/2x U4.pdf · Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 1 Unidad

Embed Size (px)

Citation preview

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 1

Unidad 4Control de Transacciones

4.1 Propiedades de las transacciones

e Instrucción COMMIT.

4.2 Instrucción ROLLBACK.

4.3 Niveles de aislamiento.

4.4 Grados de consistencia.

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 2

Cada vez que se ejecuta INSERT, UPDATE,DELETE, los datos se escriben a las tablasde la Base de Datos “inmediatamente”.

Se dice que se entregan los datos(commit).

4.1 Propiedades de las transacciones

En castellano algunos la traducen

incorrectamente como comprometer

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 3

Este proceso de entrega automática, esconveniente en la mayoría de los casospero en otros definitivamente no.

Analizaremos algunas situaciones paracomprobar que el automatic commitno siempre produce buenos resultados.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 4

Ejemplo A1

1. Crear una Base de Datos llamadaLaConsentida.

create database LaConsentida

2. Crear una tabla:

create table CtasBanc

(idCuenta int(10) auto_increment

primary key, saldo numeric(10,2))

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 5

3. Añadir 2 tuplas:

insert into CtasBanc values (0,1000)

insert into CtasBanc values (0,9000)

4. Consulte el contenido de la tabla:

select * from CtasBanc

La miscelánea “La Consentida” poseedos cuentas bancarias, la primera es unacuenta de cheques ($1,000.00) y lasegunda es de inversión ($9,000.00).

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 6

En este momento la BD está en un estadoconsistente porque el dueño de lamiscelanea sabe que posee $10,000 entotal ya que ese día no hará depósitos niretiros de ninguna de las cuentas.

Lo que el si podrá hacer es traspasos entreambas cuentas, pero el dinero que poseeen total siempre será $10,000.00 (al menospor ese día).

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 7

6. Conéctese a la BD mediante el Cliente deLínea de Comandos y por otro lado mediantela interfase GUI, ya que los siguientes pasosrequieren una simulación de dos usuarios.Haga un retiro de $2,000 de la inversión paradepositarse en la cuenta de cheques

update CtasBanc set saldo=saldo-2000

where idCuenta=2;

update CtasBanc set saldo=saldo+2000

where idCuenta=1;

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 8

Lo anterior hágalo desde el Cliente Líneade Comandos y observe el resultadodesde la Interfase GUI.

select * from CtasBanc

Como verá, los datos son entregadosinmediatamente a la BD, por esa razónel Cliente GUI puede ver el resultado.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 9

7. Haga otro traspaso (retiro/depósito) enLínea de Comandos y consulte desdeGUI después de cada update.

update CtasBanc set saldo=saldo-500

where idCuenta=2;

select * from CtasBanc

update CtasBanc set saldo=saldo+500

where idCuenta=1;

select * from CtasBanc

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 10

Observe que cuando el Cliente Línea deComandos hace el retiro y GUI consulta,la BD está inconsistente (el dinerototal que aparentemente hay, no escorrecto).

Ahora, imagine que después del retiro yantes del depósito se presenta una fallaen el equipo y se apaga.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 11

8. Un traspaso más.

update CtasBanc set saldo=saldo-500

where idCuenta=2;

{desconecte el equipo de la energía}

(simulando una falla)

9. Encienda el equipo y conectese a la BD.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 12

10.Consulte los saldos de las cuentas:

select * from CtasBanc

4.1 Propiedades de las transacciones

¿Es consistente el estado de la Base de Datos?

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 13

Ejemplo A2

1. Partamos de los saldos iniciales:

update CtasBanc set saldo=1000

where idCuenta=1;

update CtasBanc set saldo=9000

where idCuenta=2;

2. Consulte saldos:

select * from CtasBanc

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 14

3. Inicie un traspaso de la forma siguiente:

start transaction;

update CtasBanc set saldo=saldo-2000

where idCuenta=2;

{desconecte el equipo de la energía eléctrica}

4. Encienda el equipo, conectese a la BD yconsulte saldos.

4.1 Propiedades de las transacciones

¿Es consistente el estado de la Base de Datos?

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 15

Ejemplo A3

1. Partamos de los saldos iniciales:

update CtasBanc set saldo=1000

where idCuenta=1;

update CtasBanc set saldo=9000

where idCuenta=2;

2. Consulte saldos:

select * from CtasBanc

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 16

3. Realice un traspaso de la forma siguiente:

start transaction;

update CtasBanc set saldo=saldo-3000

where idCuenta=2;

update CtasBanc set saldo=saldo+3000

where idCuenta=1;

commit;

{desconecte el equipo de la energía eléctrica}

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 17

4. Encienda el equipo, conectese a la BD yconsulte saldos.

4.1 Propiedades de las transacciones

¿Es consistente el estado de la Base de Datos?

¿Se llevó a cabo el traspaso?

Si hubiéramos omitido commit, ¿cúal sería el resultado?

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 18

Ejemplo A4

1. Partamos de los saldos iniciales:

update CtasBanc set saldo=1000

where idCuenta=1;

update CtasBanc set saldo=9000

where idCuenta=2;

2. Consulte saldos:

select * from CtasBanc

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 19

3. Haga un traspaso en Línea de Comandosde la siguiente manera y consulte desdeGUI después de cada update.

start transaction;

select * from CtasBanc

update CtasBanc set saldo=saldo-4000

where idCuenta=2;

select * from CtasBanc

select * from CtasBanc

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 20

update CtasBanc set saldo=saldo+4000

where idCuenta=1;

select * from CtasBanc

select * from CtasBanc

commit;

select * from CtasBanc

select * from CtasBanc

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 21

Ejemplo B1

1. Crear una Base de Datos llamada CBTIS999.

create database CBTIS999

2. Crear las siguientes tablas:

create table Alumnos

(IdAlumno int auto_increment primary key,

Nombre char(40), NumMatCursadas int);

create table Materias

(IdMateria int auto_increment primary key,

Nombre char(20));

create table MatCursadas

(IdAlumno int, IdMateria int);

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 22

3. Añadir a las tablas siguientes las tuplas suficientespara que queden como se muestra (la tercera tabla nollevará tuplas):

4.1 Propiedades de las transacciones

AlumnosIdAlumno Nombre NumMatCursadas

1 Mickey Mouse 0

2 Atomic Ant 0

3 Donald Duck 0

MateriasIdMateria Nombre

1 Modales

2 Oratoria

3 Algebra

4 Lectura y Redacción

MatCursadasIdAlumno IdMateria

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 23

En este momento la BD está en un estado consistenteporque en la tabla MatCursadas y en el atributoNumMatCursadas de la tabla Alumnos se refleja queningún alumno ha cursado ninguna materia.

Este esquema tiene datos redundantes porque elnúmero de materias cursadas se puede obtener encualquier momento mediante una consulta, sin embargo,a veces es deseable diseñar de esta manera cuando lacomplejidad de los esquemas es grande (aunque este nosea el caso sirve como ejemplo).

Para mantener la consistencia, es indispensable que losdatos redundantes se incluyan en una transacción.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 24

6. Conéctese a la BD mediante el Cliente deLínea de Comandos y por otro lado mediantela interfase GUI, ya que los siguientes pasosrequieren una simulación de dos usuarios.Realice las operaciones que se indican acontinuación (desde Línea de Comandos):

insert into MatCursadas values (3,2);

update Alumnos set

NumMatCursadas=NumMatCursadas+1

where IdAlumno=3;

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 25

Observe el resultado desde la InterfaseGUI.

select * from MatCursadas

select * from Alumnos

Como verá, los datos son entregadosinmediatamente a la BD, por esa razónel Cliente GUI puede ver el resultado.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 26

7. Ejecute otras dos instrucciones en Líneade Comandos y consulte desde GUIdespués de cada una de ellas.

insert into MatCursadas values (1,1);

select * from MatCursadas

select * from Alumnos

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 27

update Alumnos set

NumMatCursadas=NumMatCursadas+1

where IdAlumno=1;

select * from MatCursadas

select * from Alumnos

Observe que cuando el Cliente Línea deComandos hace la primera operación y GUI hacelas consultas, la BD está inconsistente, ahoraimagine que antes de la ejecución de las segundaoperación se presenta una falla en el equipo y seapaga….

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 28

8. Otra materia cursada:

insert into MatCursadas values (3,4);

{desconecte el equipo de la energía}

(simulando una falla)

9. Encienda el equipo y conectese a la BD.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 29

10.Consulte el estado de las tablas:

select * from MatCursadas

select * from Alumnos

4.1 Propiedades de las transacciones

¿Es consistente el estado de la Base de Datos?

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 30

Ejemplo B2

1. Partamos del estado inicial de las tablas:

4.1 Propiedades de las transacciones

AlumnosIdAlumno Nombre NumMatCursadas

1 Mickey Mouse 0

2 Atomic Ant 0

3 Donald Duck 0

MateriasIdMateria Nombre

1 Modales

2 Oratoria

3 Algebra

4 Lectura y Redacción

MatCursadasIdAlumno IdMateria

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 31

2. Inicie las operaciones de la forma siguiente:

start transaction;

insert into MatCursadas values (3,2);

{desconecte el equipo de la energía eléctrica}

3. Encienda el equipo, conectese a la BD yconsulte el contenido de las tablas.

select * from MatCursadas

select * from Alumnos

¿Es consistente el estado de la Base de Datos?

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 32

Ejemplo B3

1. Partamos del estado inicial:

4.1 Propiedades de las transacciones

AlumnosIdAlumno Nombre NumMatCursadas

1 Mickey Mouse 0

2 Atomic Ant 0

3 Donald Duck 0

MateriasIdMateria Nombre

1 Modales

2 Oratoria

3 Algebra

4 Lectura y Redacción

MatCursadasIdAlumno IdMateria

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 33

2. Registre otra materia cursada pero ahorade la forma siguiente:

start transaction;insert into MatCursadas values (3,2);

update Alumnos set

NumMatCursadas=NumMatCursadas+1

where IdAlumno=3;

commit;{desconecte el equipo de la energía eléctrica}

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 34

3. Encienda el equipo, conectese a la BD yconsulte el estado de las tablas.

4.1 Propiedades de las transacciones

¿Es consistente el estado de la Base de Datos?

¿Se efectuaron las operaciones?

Si hubiéramos omitido commit, ¿cúal sería el resultado?

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 35

Ejemplo B4

1. Partamos del estado inicial una vez más:

4.1 Propiedades de las transacciones

AlumnosIdAlumno Nombre NumMatCursadas

1 Mickey Mouse 0

2 Atomic Ant 0

3 Donald Duck 0

MateriasIdMateria Nombre

1 Modales

2 Oratoria

3 Algebra

4 Lectura y Redacción

MatCursadasIdAlumno IdMateria

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 36

2. Haga las operaciones en Línea deComandos como se indica y consultedesde GUI después de cada una.

start transaction;

insert into MatCursadas values (3,2);

select * from MatCursadas

select * from Alumnos

select * from MatCursadas

select * from Alumnos

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 37

update Alumnos set

NumMatCursadas=NumMatCursadas+1

where IdAlumno=3;

select * from MatCursadas

select * from Alumnos

select * from MatCursadas

select * from Alumnos

commit;

select * from MatCursadas

select * from Alumnos

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 38

Propiedades de las transacciones:

�Atomicidad

�Consistencia

�Aislamiento (Isolation)�Durabilidad

Se les conoce como propiedades ACID.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 39

1. Atomicidad.Se requiere que todas lasoperaciones de una transacciónsean entregadas (commited) ala base de datos.

En caso de que una de ellas nosea entregada por cualquierrazón, ninguna debe hacerse.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 40

2. Consistencia.

Se requiere que si antes deejecutar una transacción, la BDes consistente, permanezcaigualmente consistente una vezterminada la transacción.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 41

3. Aislamiento.Si se presenta la ejecuciónconcurrente de transacciones,cada una de ellas debe tener laimpresión de que las demás noexisten, como si se ejecutaranen serie (una después de laotra).

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 42

4. Durabilidad.

Es indispensable que una vezfinalizada la transacción y losdatos entregados a la BD,estos no se pierdan inclusoaunque se produzca una falla.

4.1 Propiedades de las transacciones

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 43

Ejemplo A5

1. Abra una sesión, no importa si es en Líneade Comandos o en GUI Tools, parasimular el retroceso de transacciones.

2. A partir de los saldos iniciales:update CtasBanc set saldo=1000

where idCuenta=1;update CtasBanc set saldo=9000

where idCuenta=2;select * from CtasBanc;

4.2 Instrucción ROLLBACK

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 44

3. Haga el siguiente traspaso:

start transaction;

select * from CtasBanc;

update CtasBanc set saldo=saldo-15000

where idCuenta=2;

update CtasBanc set saldo=saldo+15000

where idCuenta=1;

select * from CtasBanc;

rollback;

select * from CtasBanc;

4.2 Instrucción ROLLBACK

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 45

Rollback termina una transación sin entregar los datos a la BD. Ejecutar rollback es lo adecuado para este caso ya que si el usuario trata de retirar más dinero del que tiene en la cuenta de cheques, el saldo de esa cuenta quedará NEGATIVO, lo que es incorrecto ya que las cuentas de cheques son cuentas de débito (aunque la consistencia se mantuvo porque la suma de las cuentas seguía siendo $10,000).

4.2 Instrucción ROLLBACK

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 46

start transaction;

update CtasBanc set saldo=saldo-15000 where idCuenta=2;

update CtasBanc set saldo=saldo+15000 where idCuenta=1;

If SaldoCuenta(2)<0 then

rollback

else

commit

end if

4.2 Instrucción ROLLBACK

La siguiente es una propuesta de seudocódigo para transaccionescomo la de nuestro ejemplo. Instrucciones como estas deberían serejecutadas cada vez que se haga una transacción para evitar datoserróneos (por ejemplo saldo negativo en cuentas de cheques o deinversiones como las de nuestro ejemplo).

SaldoCuenta() es una función escrita por nosotros, es indispensable hacer esta verificación ya que cuando terminen las transacciones que iniciaron antes que la nuestra, tal vez no haya saldo suficiente en la cuenta #2 para para traspasar a la #1. Vea la propiedad 4

(Aislamiento).

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 47

Un Nivel de Aislamiento describe elgrado en el cual los datos que están siendomanipulados por una sesión son visiblespara otras:

4.3 Niveles de Aislamiento

�Serializable (En serie).

�Repeatable Read (Lectura Repetible)

�Read Committed (Leer Entregados).

�Read Uncommitted (Leer NoEntregados).

u2

Diapositiva 47

u2 PARA PONER UNA DESCRIPCION SIMPLE DE LOS NIVELES DE AISLAMIENTO, BUSCAR EN GOOGLE "REPEATABLE READ" EN WIKIPEDIAVIENE ALGO .... DE ESA MANERA PODRIA PONER ALGUNOS EJEMPLOS MASusuario, 06/11/2007

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 48

Cada Nivel de Aislamiento tiene uncomportamiento distinto con respecto a losdemás, pero en algunos de los aspectosbásicos, es muy similar a los demás.

Los ejemplos siguientes ayudan a entenderla característica principal de algunos deellos.

4.3 Niveles de Aislamiento

u2

Diapositiva 48

u2 PARA PONER UNA DESCRIPCION SIMPLE DE LOS NIVELES DE AISLAMIENTO, BUSCAR EN GOOGLE "REPEATABLE READ" EN WIKIPEDIAVIENE ALGO .... DE ESA MANERA PODRIA PONER ALGUNOS EJEMPLOS MASusuario, 06/11/2007

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 49

Ejemplo A6

1. Abra 2 sesiones, una usando Línea deComandos y otra GUI Tools.

2. Partamos de los saldos acostumbrados:

update CtasBanc set saldo=1000

where idCuenta=1;

update CtasBanc set saldo=9000

where idCuenta=2;

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 50

3. Consulte saldos:

select * from CtasBanc;

select * from CtasBanc;

4. Inicie un traspaso en Línea de Comandos:

start transaction;

update CtasBanc set saldo=saldo-6000

where idCuenta=2;

update CtasBanc set saldo=saldo+6000

where idCuenta=1;

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 51

5. En GUI Tools intente modificar unade las cuentas:

update CtasBanc set saldo=0

where idCuenta=2;

{espere un tiempo prudente}

Registre sus observaciones.

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 52

Ejemplo A7

1. Abra 2 sesiones, una usando Línea deComandos y otra GUI Tools.

2. Asegúrese que el nivel de aislamiento en lasesión 1 sea Serializable (significa EnSerie):

select @@global.tx_isolation;

select @@tx_isolation;

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 53

3. Si se requiere, cambie el nivel deaislamiento de la siguiente forma:set sessiontransaction isolation levelserializable;

set global transaction isolation levelserializable;

Puede comprobar el resultado:select @@global.tx_isolation;select @@tx_isolation;

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 54

4. A partir de los saldos iniciales:

update CtasBanc set saldo=1000

where idCuenta=1;

update CtasBanc set saldo=9000

where idCuenta=2;

Consulte saldos:

select * from CtasBanc;

select * from CtasBanc;

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 55

5. Haga un traspaso en Línea deComandos:

start transaction;

update CtasBanc set saldo=saldo-6000

where idCuenta=2;

update CtasBanc set saldo=saldo+6000

where idCuenta=1;

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 56

6. En GUI Tools consulte los saldosantes y después de terminar latransacción (en Línea deComandos):

select * from CtasBanc;

commit;

select * from CtasBanc;

Registre sus observaciones.

4.3 Niveles de Aislamiento

Taller Bases de Datos ISC Ing. Felipe Alanís González -ITD- 57

Ejemplos A8 y A9

Realice los mismos pasos del Ejemplo 7 (comoestá con commit, ejemplo A8, y reemplazandoel commit con rollback, ejemplo A9), soloasegúrese que el nivel de aislamiento en laSesión de Línea de Comandos sea:

Read Uncommitted, “Leer NoEntregas”(Lectura de datos no entregados).

4.3 Niveles de Aislamiento