Академический Документы
Профессиональный Документы
Культура Документы
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:
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 porque 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:
4.3. Bloqueos.
Use la base de datos Secretaria de Salud En una nueva consulta ejecute sp_lock
y revise los resultados. Abra informe de transacciones de bloqueo para verificar que no hay
ningún bloqueo activo. Clic derecho en su bd -> informe -> informe estándar -> Todas las
transacciones de bloqueo.
2.0 Concurrencia, transacciones, accesos y bloqueos. Manejo de Jmetter.
2.1 Tipos de Concurrencia de Transacciones
Optimista: Deja realizar modificaciones de los datos y se persisten (commitado). Cuando se
van a persistir se verifica que no se han modificado por otras transacciones simultáneamente;
en cuyo caso produce un error.
Pesimista: Para los datos modificados, realizar un bloqueo de los mismos. Impendiendo que
otras transacciones realicen cambios de esos datos.
En SQL SERVER cuando indicamos READ COMMITTED, puede ser READ COMMITTED o
READ COMMITED SNAPSHOT. Esto se determina en función de la configuración de la base
de datos:
En NHibernate, por defecto tiene concurrencia optimista. Pero se puede habilitar concurrencia
pesimista.
Otra grafica tipo spline que permite ver en una secuencia mas lineal, la concurrencia de las
transacciones medidas por el Jmeter.
Anexo el monitor de rendimiento de Sql server en función, dentro del menú performance tool,
programas del Pak de instalación de Sql server, server profile
Para más detalle en el Server Profile, Menú tools, performance monitor.
CONCLUSIONES
Los límites de las transacciones de la base de datos o el sistema son siempre necesarios.
Ninguna comunicación con la base de datos puede darse fuera de una transacción de la base
de datos (esto parece confundir a muchos desarrolladores acostumbrados al modo auto-
commit). Siempre use límites de transacción claros, incluso para las operaciones de sólo
lectura. Dependiendo del nivel de aislamiento y las capacidades de la base de datos, esto
podría requerirse o no, pero no hay inconvenientes si siempre demarca explícitamente las
transacciones. Con seguridad, una transacción única de base de datos va a funcionar mejor
que muchas transacciones pequeñas, inclusive para leer datos.
REFERENCIAS BILBIOGRAFICAS
• http://basesdedatosatope.blogspot.com.co/2013/04/estrategias-para-el-control-de.html
• https://unpocodejava.wordpress.com/2011/01/10/tecnicas-de-bloqueo-sobre-base-de-datos-
bloqueo-pesimista-y-bloqueo-optimista/
• https://grimpidev.wordpress.com/2011/02/08/control-de-concurrencia-multiversion-mvcc/
• https://msdn.microsoft.com/es-es/library/jj856598%28v=sql.120%29.aspx
• http://www.monografias.com/trabajos96/manejo-transacciones/manejo-transacciones.shtml
• http://copro.com.ar/Aislamiento_%28sistemas_de_base_de_datos%29.html
• http://www.programandoamedianoche.com/2009/04/transacciones-y-modos-de-aislamiento-
en-sql-server-y-adonet/
• http://es.slideshare.net/dantoniocruz/transacciones-27511077
• https://msdn.microsoft.com/es-es/library/ms188929%28v=sql.120%29.aspx
• http://www.devjoker.com/contenidos/catss/292/Transacciones-en-Transact-SQL.aspx
• http://www.campusmvp.es/recursos/post/Fundamentos-de-SQL-Transacciones.aspx
• https://msdn.microsoft.com/es-es/library/ms187749%28v=sql.120%29.aspx
• http://www.forosdelweb.com/f87/concurrencia-sql-server-519836/
• https://www.fdi.ucm.es/profesor/fernan/DBD/apuntestema07.pdf
• https://social.msdn.microsoft.com/Forums/es-ES/e785b566-aa9e-4765-8574-
4bf83af65374/control-de-concurrencia?forum=vcses