Reporte Transacciones

14
INSTITUTO TECNOLÓGICO DE MINATITLÁN Nombre de los integrantes: Génesis Mariel zarate Ortiz Cesar Luis murillo canteros Christina Flores Díaz Nombre del catedrático: M.C.I María Elena Reyes Castellanos Nombre del trabajo: REPORTE DE TRANSACCIONES Fecha de entrega: 31 de mayo del 2013

Transcript of Reporte Transacciones

Page 1: Reporte Transacciones

INSTITUTO TECNOLÓGICO

DE MINATITLÁN

Nombre de los integrantes:

Génesis Mariel zarate Ortiz

Cesar Luis murillo canteros

Christina Flores Díaz

Nombre del catedrático:

M.C.I María Elena Reyes Castellanos

Nombre del trabajo:

REPORTE DE TRANSACCIONES

Fecha de entrega: 31 de mayo del 2013

Page 2: Reporte Transacciones

PRACTICA DE TRANSACCIONES

REQUISITOS:

3 computadoras interconectadas en una misma red.

Tener instalado Oracle SQL y acceso a la consola PL/SQL.

Tener instalado en dos maquina Oracle sql cliente.

Tener instalado en una maquina Oracle sql servidor.

Tablas de la práctica

---------------------------SERVIDOR------------------------

create table taviones(

tipo varchar(15) primary key,

capacidad int);

create table tvuelos(id varchar(10) primary key,

tipoavion references taviones,

pasajeros int,

destino varchar(20));

insert into taviones values ('Airbus A300',120);

insert into taviones values ('Boeing 707',210);

insert into taviones values ('Douglas DC-9',190);

insert into tvuelos values ('LHE 100','Airbus A300',110,'Roma-Fiumicino');

insert into tvuelos values ('IBE 398','Boeing 707',209,'Barcelona-El Prat');

commit;

Page 3: Reporte Transacciones

Modos de consistencia: Read Write/Read Only

select tipoavion,count(*) from tvuelos group by tipoavion;

2. A2: insert into tvuelos values ('TWA','Airbus A300',89,'Madrid-Barajas');

3. A1: select tipoavion,count(*) from tvuelos group by tipoavion;

4. A2: commit;

5. A1: select tipoavion,count(*) from tvuelos group by tipoavion;

Page 4: Reporte Transacciones

Pregunta ¿Qué diferencias observas entre los resultados en 3 y 5? ¿Por qué?

En el paso 3 [A1: select tipoavion,count(*) from tvuelos group by tipoavion;] la

inserción que realizo el cliente 2 (A2) no se visualizó en el cliente 1 (A1); y el

paso 5 [A1: select tipoavion,count(*) from tvuelos group by tipoavion;] ya que

el cliente 2 comprometió la transacción el cliente 1 logro ver la inserción que

había realizado el cliente 2.

Read Only:

1. A1: commit;

set transaction read only;

select tipoavion,count(*) from tvuelos group by tipoavion;

A2: insert into tvuelos values ('KLM','Douglas DC-9',21,'Las Palmas');

commit;

A1: select tipoavion,count(*) from tvuelos group by tipoavion;

Page 5: Reporte Transacciones

Pregunta ¿Qué cambios se producen con respecto al caso anterior?

En el cliente 1 no se visualizó ningún cambio realizado por el cliente2

Pregunta ¿Qué resultado se obtiene?

Al intentar insertar un registro en el cliente 1 que se encuentra en modo read

only, marco un error debido a que no se puede realizar operaciones de

insertar, suprimir y actualizar en una transacción read only.

Page 6: Reporte Transacciones

Niveles de aislamiento: Serializable/Read Committed

show autocommit;

Para ver el efecto del nivel de aislamiento vamos a realizar los siguientes pasos: 1. Escribir (el A2: del principio indica que se refiere al terminal 2 y no debe teclearse): A2: commit; alter session set isolation_level = SERIALIZABLE;

Escribir en el terminal A1:

A1: update tvuelos set pasajeros=50 where id='LHE 100';

select * from tvuelos;

A2: update tvuelos set pasajeros=0 where id='LHE 100'; select * from tvuelos

Pregunta: ¿qué ocurre? ¿Se debe al modo serializable?

Debido a que el cliente 1 está en modo READ COMMITTED y no ha

comprometido la transacción en proceso con COMMIT el cliente 2 no puede

manipular el mismo registro.

Grabamos los cambios en A1:: A1: commit

Page 7: Reporte Transacciones

Pregunta: ¿qué ocurre en A2? ¿Se debe al modo serializable?

Mostro un error al intentar actualizar el registro, “no se puede serializar el

acceso para esta transacción”. Esto ---------------------------

Escribir:: A2: commit; alter session set isolation_level = READ COMMITTED; update tvuelos set pasajeros=0 where id='LHE 100'; commit;

Repetir los pasos 2,3,4 y 5

¿Qué cambios ocurren y por qué?

Al actualizar y visualizar el registro en el cliente1 no hubo problema alguno,

entonces al actualizar en el cliente 2 el mismo registro no lo realizo hasta que el

cliente 1 comprometió la transacción esto fue debido al commit; sin embargo

cada cliente solo visualizo sus propios cambios.

Ya que el cliente 2 realizo el commit en su sesión los cambios realizados por él;

también fueron visualizados en el cliente 1.

Page 8: Reporte Transacciones

Bloqueos

Pregunta. : Estamos en la agencia A1. Llega un cliente (de nombre Bertoldo, por ejemplo), que quiere un billete para el vuelo LHE 100, si no está completo. Escribir las sentencias que usaríamos para comprobar que hay sitio, que Bertoldo no tiene ya un billete para ese vuelo (la compañía impide comprar varios billetes a la misma persona para el mismo vuelo) y para, suponiendo que se cumplen estas condiciones apuntar que queda un sitio menos y grabar en tpasajeros que Bertoldo va a volar en ese vuelo. Queremos

asegurarnos de que no se venden billetes de más.

R= El update en el cliente2 se queda bloqueado por el primer update del

cliente1, ya que ambos intentan acceder a la misma fila y update es una

sentencia que bloquea para evitar inconsistencias. Para que la sesión del

cliente 2 continúe es necesario hacer commit en el cliente 1. Finalmente hacer

commit en el cliente2. La segunda operación también se ha realizado con éxito,

pero sólo había una plaza en el avión.

Page 9: Reporte Transacciones

Deadlocks

Se cononce como Deadlock o interbloqueo el proceso en el que dos operaciones concurrentes quedan esperando cada una a la otra. Probar la secuencia siguiente en los terminales A y B

-- A CREATE TABLE deadlock ( id NUMBER, fld VARCHAR2(1)); INSERT INTO deadlock VALUES (1,'A'); INSERT INTO deadlock values (2,'B'); COMMIT; SELECT * FROM deadlock; UPDATE deadlock SET fld = 'M' WHERE id = 1;

-- B UPDATE deadlock SET fld = 'N' WHERE id = 2;

-- A UPDATE deadlock SET fld = 'X' WHERE id = 2;

Page 10: Reporte Transacciones

-- B UPDATE deadlock SET fld = 'Y' WHERE id = 1;

Pregunta: ¿Qué ocurre? ¿Por qué?

Se creó un interbloqueo entre los clientes porque estuvieron modificando los

mismos registros uno tras otro en cada cliente (terminal) sin haber

comprometido las modificaciones realizadas por cada cliente antes de

proseguir a la siguiente actualización.

Page 11: Reporte Transacciones

Rollbacks y Savepoints

La instrucción rollback permite al usuario de Oracle acabar la transacción sin

éxito. De esta forma ninguno de los cambios realizados tras el último commit

se llegará a grabar físicamente en la base de datos. Veamos un ejemplo (esta

sección se puede probar en cualquiera de los dos terminales):

Supongamos que estamos actualizando la base de datos porque tenemos un

nuevo pasajero:

update tvuelos set pasajeros=pasajeros +1 where id='LHE 100';

insert into tpasajeros values('Herminia','LHE 100');

select * from tvuelos;

select * from tpasajeros;

rollback;

select * from tvuelos;

select * from tpasajeros;

insert into taviones values('BAE HARRIER', 2); insert into taviones values('Concorde', 240); insert into tvuelos values('UNA 100', 'Concorde',10, 'Barajas'); insert into tvuelos values('UTA 600', 'Boeinj', 20,'Pekín'); insert into tpasajeros values('Nicasio','LHE 100');

Rollback;

Page 12: Reporte Transacciones

Pregunta: Introducir un savepoint en la transacción formada por:

insert into taviones values('BAE HARRIER', 2);

insert into taviones values('Concorde', 240);

insert into tvuelos values('UNA 100', 'Concorde',10, 'Barajas');

insert into tvuelos values('UTA 600', 'Boeinj', 20,'Pekín');

insert into tpasajeros values('Nicasio','LHE 100');

SAVEPOINT ERROR_INSERT;

insert into taviones values('BAE HARRIER', 2);

insert into taviones values('Concorde', 240);

insert into tvuelos values('UNA 100', 'Concorde',10, 'Barajas');

insert into tvuelos values('UTA 600', 'Boeinj', 20,'Pekín');

insert into tpasajeros values('Nicasio','LHE 100');

Muestra un error en la inserccion de datos, para evitar todo lo realizado

regresamos al punto de guardado con

ROLLBACK TO SAVEPOINT ERROR_INSERT;

Pregunta: Probar a hacer:

delete from tpasajeros;

drop table tpasajeros;

rollback;

select * from tpasajeros;

¿Qué ocurre? ¿Cómo puedes explicarlo?

Se borran los datos de la tabla tpasajeros.

Se escribe: rollback uno y verificamos con un select que las modificciones no

se hayan llevado a cabo.

Se borra la tabla tpasajeros.

Y con el rollback se intenta deshace los cambios.

Se observa que las modificaciones no han sido revertidas, esto ocurre debido a

que rollback solo borra las modificaciones a nivel registros, si utilizamos Un

drop table y queremos regresar la tabla, esto no es posible, ni aun creando Un

savepoint.

Para verificarlo al declarar la sentencia select nos muestra que la tabla

tpasajeros no existe.

Page 13: Reporte Transacciones

Perfiles y usuarios

create profile p_genesis limit

sessions_per_user 2

cpu_per_session 10000

cpu_per_call 1

connect_time 1

idle_time 10;

create profile p_uno limit

sessions_per_user 2

cpu_per_session 10000

cpu_per_call 1

connect_time 1

idle_time 1

private_sga 1m

failed_login_attempts 2

password_life_time 10;

Page 14: Reporte Transacciones

create user luis identified by unodostres;

grant dba to luis;

alter user luis profile p_uno;

create profile p_dos limit

sessions_per_user 2

cpu_per_session 10000

cpu_per_call 1

connect_time 1

idle_time 1

private_sga 1m

failed_login_attempts 2

password_life_time 10;

alter profile p_uno limit idle_time 1

create user mariel identified by unodostres;

grant dba to mariel;

alter user mariel profile p_uno;

Timestamp

select current_timestamp from dual;