jueves, 31 de marzo de 2016

Laboratorio 10 -Manejo de transacciones, bloqueos y control de concurrencia

1. Manejo de transacciones, bloqueos y control de concurrencia de la practica (laboratorio 10_ base datos)

Desarrollar puntos laboratorio 10:

4.2.2. Abrir una consulta nueva en SQL Server 2008 R2 y escribir el siguiente comando COMMIT TRANSACTION y verificar de nuevo la cantidad de transacciones activas y determinar que hace este comando en la base de datos SecSalud.

R/ el resultado es:

Auto-attach to process '[2736] [SQL] localhost' on machine 'localhost' succeeded.
The thread 'localhost [54]' (0x1610) has exited with code 0 (0x0).
The program '[2736] [SQL] localhost: localhost' has exited with code 0 (0x0).
Este comando por sí solo no hace nada, debe ser acompañado de otras clausulas,  dado que este comando se utiliza para  Finalizar la transacción si no se han encontrado errores.

4.2.3. Que sucede al hacer una consulta de todos los datos de la tabla EPS si anteriormente se ejecuta el siguiente comando:
BEGIN TRANSACTION INSERT
INTO EPS (ideps, nombre, estadoeps)
VALUES (15,’confisena’,1)  '
Para la cancelación de la transacción anterior ¿qué comando se debe utilizar?.
R/ sale un error: Cannot insert explicit value for identity column in table 'EPS' when IDENTITY_INSERT is set to OFF.

Esto ocurre por que  sql server no permite insertar datos a llaves primarias de forma normal:
hay utilizar el comando, para que deje insertar datos de forma de inserción explicita en la tabla a una pk: el comando a utilizar es: SET IDENTITY_INSERT EPS

ejemplo:

BEGIN TRANSACTION
      SET IDENTITY_INSERT EPS ON
      INSERT INTO EPS (ideps, nombre, estadoeps)
VALUES (15,'confisena',1)


4.2.4. Que le falta a la siguiente transacción para que se efectúen los cambios en la base de datos Secretaria de Salud.

BEGIN TRANSACTION
INSERT INTO persona (idPersona, tipoidentificacion,  nombre, apellido, fechaNacimiento, sexo)
VALUES (1112548, 1, 'Pedro', 'Garcia', 1982-01-27, 'M');
INSERT INTO EPS (nombre, estadoeps)
VALUES ('confinacional',4);

R/ lo que hay que hacer es agregar el comando: SET IDENTITY_INSERT [tabla] ON, para que esta transacción pueda correr y arreglar campos tabla persona: tipoidentifiacion, idPersona;  quedaría:

BEGIN TRANSACTION
SET IDENTITY_INSERT EPS ON
      INSERT INTO Persona (idPersona, tipoidentificacion, nombre, apellido, fechaNacimiento, sexo)
      VALUES (111245548, 1, 'Pedro', 'Garcia', 1982-01-27, 'M') 
      INSERT INTO EPS (ideps, nombre, estadoeps)
      VALUES (16,'confiacional',4)

4.2.5. En el siguiente cuadro especificar para cada tipo de transacción si es implícita, explicita o automática.




Transacciones explícitas
Por el contrario, las Transacciones explícitas son las que se define en el código T-SQL. Hay que indicar cuando se inician (BEGIN TRANSACTION) y cuando finalizan (COMMIT TRANSACTION), y pueden albergar un conjunto de instrucciones dentro de la misma transacción.

Cuando se produce el COMMIT, se hacen efectivos los cambios en los ficheros de datos (.mdf y .ndf). Mientras no se realiza el COMMIT las sentencias de los cambios se guardan en el log de transacciones (.log), que gracias a este es posible revertir los cambios si fuese necesario..

Automática
 Es el modo de administración de transacciones predeterminado de SQL Server Database Engine (Motor de base de datos de SQL Server). Cada instrucción Transact-SQL se confirma o se revierte cuando finaliza. Si una instrucción termina correctamente, se confirma; si encuentra un error, se revierte. Una conexión a una instancia de Motor de base de datos funciona en modo de confirmación automática siempre que no se suplante el modo predeterminado mediante transacciones explícitas o implícitas.

4.3.1. Abra una nueva consulta.   Use la base de datos Secretaria de Salud En una nueva consulta ejecute sp_lock y revise los resultados.

Se verifican las consultas definidas en el laboratorio para comenzar la parte de trabajo con bloqueos de transacciones:


 Se verifica la consulta de bloqueo


Verificación de bloqueos en la base de datos: 0, hasta ahora.



En este aparte si prueba el Sp lock ahora con bloqueo a tabla EPS.



Una vez terminado las partes de las pruebas con los Sql procedemos a realizar las pruebas de rendimiento y monitorio a la base de datos.


Punto 4.3.2 laboratorio:  Analizar el siguiente script

Use SecSalud:

BEGIN TRAN
PRINT 'Transacciones Activas'
SELECT @@TRANCOUNT
SELECT * FROM EPS

PRINT 'Actualizamos la tabla EPS'
SELECT * FROM EPS
UPDATE EPS SET nombre = 'SALUDCOOPx' WHERE nombre =
'SALUDCOOP'
PRINT 'Miramos la actualización'
SELECT * FROM EPS WHERE ideps = 1
PRINT 'Transacciones Activas'
PRINT @@TRANCOUNT
SELECT * FROM EPS
PRINT 'Identificador de bloqueo'
SELECT @@spid

El Scrip ejecuta normalmente las condicionales del sql para hacer el update, y en el aparte mensaje muestra el comentario de cada transacción como esta especificado en el sql. 

Informe de todas las transacciones de bloqueo Sp_lock EPS
Analice lo que ocurre con ellas: muestra los valores de los procesos con bloqueo y con privilegios para acceso, definidos  por el comando Sp_lock y afectados por la clausula IDENTITY_INSERT.

No hay comentarios:

Publicar un comentario