Sei sulla pagina 1di 3

Prctica XIII Administracin de Bases de datos 25 abril de 2013 Introduccin: Las aplicaciones al compartir recursos como servidor, manejador

de bases de datos y los propios datos, representan un problema al ser utilizaros por diversos usuarios al mismo tiempo. En esta prctica se introducen conceptos de aislamiento que pueden afectar el desempeo por el hecho de bloquear recursos compartidos. Se introducen los trminos de deadlock. Propsito del curso:

1. Esta prctica est directamente relacionada con el propsito de Disear y ejecutar actividades de administracin de base de datos que permitan conocer la problemtica generada en bases de datos operando, solucionar problemas de desempeo causados por la concurrencia y el aislamiento en transacciones.
Objetivos Particulares: Conocer los problemas que genera la concurrencia en aplicaciones de bases de datos. Conocer cmo las bases de datos pueden aprovechar el aislamiento para generar valores nicos. Actividades 1. Escribir las definiciones y conceptos estudiados sobre deadloks 2. Para las siguientes activiadades vamos a estar trabajando con dos sesiones en sql, se propone la base de datos de pintura: - Entrar a SQL con usuario de Windows - Crear usuario con autentificacin SQL y darle privilegios de dueo a base de datos - En men File, Connect object Explorer , conectarse con el otro usuario para tener doble sesin. - Desde cada sesin entrar a New Query para tener dos sesiones abiertas. Verificar que cada ventana tiene un usuario diferente. - En cada pantalla correr estos procesos para generar un error de deadlock -- Sesin 1

USE [Pintura] WHILE(1 = 1) BEGIN BEGIN TRAN UPDATE Factura SET Descuento = 50 WHERE id_factura = 763 UPDATE Factura_d SET Descuento = 55 WHERE id_factura_d = 929 COMMIT TRAN END -- Sesin 2 USE [pintura] WHILE(1 = 1) BEGIN BEGIN TRAN UPDATE Factura_d SET Descuento = 65 WHERE id_factura_d = 929 UPDATE Factura SET Descuento = 60 WHERE id_factura = 763 COMMIT TRAN END Describir lo que hacen estas instrucciones cuando se ejecutan de manera concurrente. - Hacer que se genere el error de SQL 1205 y describir su mensaje 3. Cuidad que queden cerradas todas las transacciones, corregir cdigo para evitar deadlock, hacer un comentario. 4. Generar un caso de Conversin Deadlock error 1205 con el nivel de aislamiento: -- Sesin 1 USE [Pintura] Set transaction isolation level repeatable read BEGIN TRAN Select * from cliente where id_cliente = 3725 Waitfor delay 00:00:10 Update cliente set descuentoporcentaje = 18.00 where id_cliente = 3725 COMMIT TRAN --Sesin 2 USE [Pintura] Set transaction isolation level repeatable read BEGIN TRAN Select * from cliente (updlock) where id_cliente = 3725 Waitfor delay 00:00:10 Update cliente set descuentoporcentaje = 36.00 where id_cliente = 3725 COMMIT TRAN

- Demostrar error y explicar situacin, solucin. 5. Verificar (probando en tablas) lo que hace el siguiente cdigo: CREATE PROC tranprueba @arg int

as BEGIN TRAN IF exists (SELECT * FROM prueba WHERE col1 = @arg) RAISERROR('Valor %d ya existe!', 16, -1, @arg) ROLLBACK TRAN END ELSE BEGIN INSERT INTO prueba (col1) values (@arg) COMMIT TRAN END - Indicar el valor que juegan las transacciones en este caso. 7. Crear con instrucciones SQL proceso que genera un valor consecutivo nico (folio), para un documento asegurando que este valor no se repte nunca. (Ejemplo el folio de la tabla pedido) No se puede basar este folio de un campo llave autoincremental de la tabla. 9. Conclusiones Entregable: Documento por equipo. BEGIN

Potrebbero piacerti anche