Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
img
img

 

 

SQL Server
Blog. (Apuntes y Recopilaciones) por Norman M. Pardell

img
img

Transacciones Explícitas o Implícitas. SQL

Transacciones Implícitas.

Este tipo de transacciones, se conocen como transacciones "de Confirmación automática" y es el comportamiento predeterminado de SQL Server, donde ejecuta (o hace efectivo los cambios en los ficheros de datos) por separado cada sentencia Transact-SQL justo después de que se termine dicha sentencia.

Por ejemplo, pensemos que tenemos dos INSERT, el primero de los cuales nos da error, y el segundo  se ejecuta de forma exitosa, si trabajamos con Transacciones Implícitas, veremos como el segundo cambio se mantiene porque cada INSERT se incluye automáticamente en su propia transacción.

Podemos encontrar escenarios donde la confirmación automática de las transacciones (Transacciones Implícitas) puede ser peligroso, por ejemplo, si
borramos accidentalmente todas las filas (o un grupo de filas) de una tabla, no tendremos opción de deshacer la transacción.

Las Transacciones implícitas, crean una nueva transacción, cuando en una sesión de SQL Server se ejecuta algún ALTER TABLE, FETCH, REVOKE, CREATE,
GRANT, SELECT, DELETE, INSERT, TRUNCATE TABLE, DROP, OPEN, y UPDATE.

Una transacción no implícita, una vez creada, permanece abierta y no finaliza hasta que no se produce un ROLLBACK o se invoca al COMMIT. La Transacciones Implícitas finalizan cuando se inicia una nueva transacción en la misma sesión.

Para activar el modo de trabajo con las transacciones implícitas se ejecuta:

 SET IMPLICIT_TRANSACTIONS ON

Para desactivar las transacciones implícitas:

 SET IMPLICIT_TRANSACTIONS OFF

 Trabajar con transacciones implícitas, puede ser problemático en un entorno de producción, ya que los desarrolladores o los usuarios finales se puede olvidar de cerrar las transacciones, y esto puede ser origen de bloqueos...

Dejo un enlace sobre las Transacciones Implícitas: http://msdn.microsoft.com/es-es/library/ms188317.aspx  y  http://msdn.microsoft.com/es-es/library/ms187807.aspx


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...

Transacciones explícitas, es el modo de trabajo recomendado. y de esta forma se puede tener el control de un conjunto de operaciones, definidas dentro de la misma transacción. Si una operación fuese errónea, es posible hacer ROLLBACK del conjunto de operaciones que están dentro de la misma transacción. Esto nos permite establecer reglas de negocio de forma fácil, y mantener coherencia en los datos según lo que queramos realizar...

 


BEGIN TRANSACTION - Establece el punto de partida de una transacción explícita.

ROLLBACK TRANSACTION - Revierte la transacción y pone los datos al estado en que estaban justo antes del inicio de la transacción.(Los recursos usados por la transacción son liberados.)

COMMIT TRANSACTION - Finaliza la transacción si no se han encontrado errores. (Los recursos usados por la transacción son liberados.)

BEGIN DISTRIBUTED TRANSACTION - Permite definir el comienzo de una transacción distribuida (MS-DTC).


SAVE TRANSACTION - permite definir una señal dentro de la misma transacción al que se puede volver si parte de la transacción se cancela. Solo se podrían revertir los cambios hasta la señal indicada.

@@TRANCOUNT - Devuelve el número de transacciones activas de la conexión. BEGIN TRANSACTION incrementa @@TRANCOUNT en 1. ROLLBACK TRANSACTION y COMMIT TRANSACTION disminuye @@TRANCOUNT en 1. ROLLBACK TRANSACTION no modifica el valor de @@TRANCOUNT.


Dejo un enlace sobre las Transacciones Explícitas: http://msdn.microsoft.com/es-es/library/ms175127.aspx y http://msdn.microsoft.com/es-es/library/ms188929.aspx


Es importante hacer control de errores, para ejecutar ROLLBACK cuando existen errores o ejecugar COMMIT cuando estamos seguros de que no existen errores.


Ejemplo:

-- Variable de control de error:
DECLARE @Error int

BEGIN TRANSACTION

--Aquí ponemos nuestra instrucción de modificación de datos por ejemplo:

INSERT...

SET @Error = @@ERROR
IF (@Error<> 0) GOTO Error_Capturado


--Aquí ponemos nuestra instrucción de modificación de datos por ejemplo:

INSERT...

SET @Error = @@ERROR
IF (@Error <> 0) GOTO Error_Capturado


COMMIT TRAN


Error_Capturado:
IF @Error <> 0
BEGIN
ROLLBACK

 


Hay otra forma de controlar errores con: try...catch, dejo un enlace, ya que es muy interesante: http://msdn.microsoft.com/es-es/library/ms175976.aspx


 

Fuentes:

Microsoft, MSDN...

Apunte y recopilación por Norman M. Pardell

Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.

 

publicado por normanmpardell a las 19:11 · Sin comentarios  ·  Recomendar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
img
.Sobre mí
FOTO

Norman M. Pardell

MCITP: Database Administrator & Database Developer, SQL Server 2008. MCC Award Certificate. Consultor Senior de bases de datos en Capgemini España, S.L. Asesoramiento en implementación, desarrollo y gestión de bases de datos en grandes compañías. Actualmente, asignado a proyecto en compañía líder en el sector energético global. Más de 10 años trabajando con SQL Server (y otros gestores de BBDD)

» Ver perfil

img
.Secciones
» Inicio
img
.Enlaces
» Microsoft MSDN Foros
» Windows Server 2012
img
.Más leídos
» Asignar la cantidad correcta de Memoria para SQL Server
» Base de Datos Sospechosa (Suspect)
» Como modificar la Intercalación (Collation) en SQL Server
» Como renombrar una instancia de SQL Server. sp_dropserver. sp_addserver
» Detectar bloqueos. SQL Server V.2005 y superiores
» Funciones SQL Server. Funciones escalares y funciones con valores de tabla.
» Integridad y corrupción en las bases de datos: DBCC CHECKDB
» Log de transacciones ( .ldf ). SQL Server.
» Migrando SQL Server 2005, 2008, 2008 R2 a SQL Server 2012
» Transacciones activas. SQL server 2008
img
.Nube de tags [?]
                                                           
img img
FULLServices Network | Crear blog | Privacidad