Sunteți pe pagina 1din 14

INSTITUTO TECNOLGICO

DE MINATITLN

Nombre de los integrantes:
Gnesis Mariel zarate Ortiz
Cesar Luis murillo canteros
Christina Flores Daz

Nombre del catedrtico:
M.C.I Mara Elena Reyes Castellanos

Nombre del trabajo:

REPORTE DE TRANSACCIONES

Fecha de entrega: 31 de mayo del 2013


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 prctica


---------------------------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;







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;


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
insercin 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 transaccin el cliente 1 logro ver la insercin que
haba 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;



Pregunta Qu cambios se producen con respecto al caso anterior?
En el cliente 1 no se visualiz ningn 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 transaccin read only.


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 transaccin en proceso con COMMIT el cliente 2 no puede
manipular el mismo registro.
Grabamos los cambios en A1::
A1: commit

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 transaccin. 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 transaccin esto fue debido al commit; sin embargo
cada cliente solo visualizo sus propios cambios.
Ya que el cliente 2 realizo el commit en su sesin los cambios realizados por l;
tambin fueron visualizados en el cliente 1.


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 usaramos para comprobar que hay sitio,
que Bertoldo no tiene ya un billete para ese vuelo (la compaa 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 ms.


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 sesin del
cliente 2 contine es necesario hacer commit en el cliente 1. Finalmente hacer
commit en el cliente2. La segunda operacin tambin se ha realizado con xito,
pero slo haba una plaza en el avin.

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;

-- 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 actualizacin.

Rollbacks y Savepoints
La instruccin rollback permite al usuario de Oracle acabar la transaccin sin
xito. De esta forma ninguno de los cambios realizados tras el ltimo commit
se llegar a grabar fsicamente en la base de datos. Veamos un ejemplo (esta
seccin 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,'Pekn');
insert into tpasajeros values('Nicasio','LHE 100');
Rollback;
Pregunta: Introducir un savepoint en la transaccin 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,'Pekn');
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,'Pekn');
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? Cmo 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.


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;

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;

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