Lab 1 Transacciones
Lab 1 Transacciones
Lab 1 Transacciones
Objetivo de la práctica
Asentar los conocimientos sobre gestión de transacciones y concurrencia presentados en las clases
teóricas y repasar los conocimientos sobre triggers. PáginasPKid nombre contador Enunciado
Para conocer el número de visitas a ciertas páginas de un sitio web, se utiliza una tabla en una
base de datos Oracle en la que se almacena el identificador de cada página, un nombre simbólico
de la página y el número de visitas que recibe. Cada vez que un usuario accede a una página, se
debe incrementar el número de visitas correspondiente.
El esquema relacional y una posible extensión inicial son las que pueden verse en la Figura 1.
paginas
Paginas
PK id
nombre
contador
Tabla Paginas
Id nombre contador
1 Portada 0
2 Noticias 0
3 Resumen 0
4 Comentarios 0
5 nombre 0
2. Inserte los datos correspondientes a la extensión inicial de la Figura 1 usando el código más
sencillo posible al aprovechar el trigger y los valores por defecto creados en el ejercicio anterior
(inserte filas asignando valores sólo a la columna nombre).
3. Abra una ventana SQL*Plus y pida a su compañero de prácticas que haga lo mismo en su
ordenador. Asegúrense de que el nivel de aislamiento es READ COMMITED mediante el
siguiente comando en SQL*Plus:
El objetivo de cada alumno es sumar al valor leído en la consulta anterior un número distinto (ej.:
un alumno le suma 100 y otro le suma 200). Actualicen cada uno los datos con la siguiente
instrucción en SQL*Plus:
commit;
5. Vuelvan a hacer el ejercicio 3 pero esta vez no utilicen la cláusula for update en el select y
cambien el primer comando por el siguiente:
6. Oracle no permite lecturas sucias, aunque se puede intentar reproducir el escenario descrito en
las clases de teoría. Para ello, tanto usted como su compañero de prácticas, vuelvan a
establecer el nivel de aislamiento de transacciones al valor por defecto con el siguiente
comando en SQL*Plus:
Transaccion 1 Transaccion 2
select contador from paginas
where id=<ID seleccionado>;
update paginas
set contador = <nuevo valor>
where id=<ID seleccionado>;
select contador from paginas
where id=<ID seleccionado>;
update paginas
set contador = <nuevo valor> where id=<ID
seleccionado>;
commit;
rollback;
7. Vuelvan a repetir el ejercicio anterior usando en ambas transacciones (1) select … for update y (2) nivel
de aislamiento serializable. ¿Qué ocurre? ¿Por qué?