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)
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:
Verificación de bloqueos en la base de datos: 0, hasta ahora.
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'
UPDATE EPS SET nombre
= 'SALUDCOOPx' WHERE nombre =
PRINT 'Miramos la
actualización'
SELECT * FROM EPS WHERE ideps = 1
PRINT 'Transacciones
Activas'
PRINT @@TRANCOUNT
SELECT * FROM EPS
PRINT 'Identificador de bloqueo'
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.
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