Sei sulla pagina 1di 11

BASE DE DATOS PARA LA ADMINISTRACION

TRANSACCIONES
LIC. DIEGO KRAUTHAMER
PROFESOR ADJUNTO INTERINO SEDE BUENOS AIRES

TRANSACCIONES
Introduccin. Propiedades A.C.I.D Estados de una transaccin. Implementacin en Microsoft SQL Server. Bibliografa.

INTRODUCCION
Supongamos que trabajamos con el siguiente modelo de datos: Cliente(#codcli,nombre) Producto(#cprod,descri, precio) Cabecera_factura(#nro, fecha, codcli) Detalle_factura(#nro, #cprod, cant) A nivel base de datos Qu implica insertar una factura?
Tabla Cabecera_Factura)
#NRO 1425 FECHA 28/11/2012 CODCLI 99

Tabla Detalle_Factura)
#NRO 1425 #CPROD 180 CANT 10

Error de comunicaciones

Servidor de Bases de Datos

TRANSACCION
Conjunto de operaciones que forman una unidad lgica de trabajo. Comienza de manera explcita (Begin Tran por ej.) o de manera explicita con la primera instruccin DML. Termina de manera explcita con la instruccin COMMIT (confirmar) o ROLLBACK (abortar)
Leer(A) A:= A 100 Ejemplo Tx transfiere $100 de la cuenta A a la cuenta B Escribir(A) Leer(B) B:= B + 100 Escribir(B)

PROPIEDADES A.C.I.D
Atomicidad (A): Se realizan todas o ninguna de las operaciones de la transaccin. Consistencia (C): La ejecucin aislada de la trasaccin, conserva la consistencia de la base de datos. Aislamiento (I): Ninguna transaccin ve los datos en su estado intermedio. Durabilidad (D): Una vez confirmada con xito la transaccin, sus cambios persisten incluso an si hay un fallo del sistema.

ESTADOS DE UNA TRANSACCION

Parcialmente Comprometida Activa

Comprometida

Fallida

Abortada

IMPLEMENTACION EN SQL SERVER


--Ejemplo de Transaccin Implcita DELETE FROM CLIENTES WHERE PAIS = 'ARGENTINA --Ejemplo de Transaccin explicita BEGIN TRANSACTION INSERT INTO EMPLEADOS (ID, NOMBRE) VALUES (1,'CONDUIT') DELETE FROM AUDITORIA WHERE EMPLEADO = 1 COMMIT TRAN

Ejemplo 1 Tipos de transacciones en SQL Server

IMPLEMENTACION EN SQL SERVER


--Creacin del modelo de datos CREATE TABLE #T1 (ID INT, NOMBRE VARCHAR(50)) GO CREATE TABLE #T2 (ID INT, FECHA DATETIME NOT NULL) GO BEGIN TRY BEGIN TRAN INSERT INTO #T1 VALUES (1,'CONDUIT') INSERT INTO #T1 VALUES (1,GETDATE()) COMMIT TRAN END TRY --Manejo de errores BEGIN CATCH ROLLBACK TRAN SELECT @@ERROR END CATCH
Ejemplo 2 Commit y Roolback en SQL Server

IMPLEMENTACION EN SQL SERVER


-- Vemos que no hay Transacciones SELECT @@TRANCOUNT BEGIN TRAN -- Abrimos una transaccin INSERT INTO Cabecera VALUES (1,GETDATE()) INSERT INTO Detalle Values (1,1,100) SELECT @@TRANCOUNT -- vemos las transacciones abiertas (1) -- Abrimos otra transaccin BEGIN TRAN SELECT @@TRANCOUNT -- Verificamos que Trancount se incremento en 1 -- Hacemos un Rollback INSERT INTO Auditoria (Fecha) VALUES (GETDATE()) COMMIT TRAN SELECT @@TRANCOUNT -- Verificamos que Trancount decrecio en 1 COMMIT TRAN -- Hacemos el ltimo Commit SELECT @@TRANCOUNT --Verificamos que Trancount queda en 0 go
Ejemplo 3 Funcionamiento de Commit en Transacciones Anidadas SQL Server

IMPLEMENTACION EN SQL SERVER


SELECT @@TRANCOUNT -- Vemos que no hay Transacciones BEGIN TRAN A -- Abrimos una transaccin -- hacemos los insert INSERT INTO Cabecera VALUES (1,GETDATE()) INSERT INTO Detalle Values (1,1,100) SAVE TRAN B -- Hacemos un punto de salvacion SELECT @@TRANCOUNT -- vemos las transacciones abiertas (1) -- Abrimos otra transaccin BEGIN TRAN C -- Verificamos que Trancount se incremento en 1 SELECT @@TRANCOUNT INSERT INTO Auditoria (Fecha) VALUES (GETDATE()) --Rollback ROLLBACK TRAN B SELECT @@TRANCOUNT -- Verificamos que Trancount es 2 y no 0 COMMIT TRAN -- Hacemos los Commit COMMIT TRAN
Ejemplo 4 Funcionamiento de Roolback en SQL Server

BIBLIOGRAFIA
Obligatoria Fundamentos de Bases de Datos Korth. Editorial Mc Graw Hill Cap. 15 Becas Control F. Mdulo 12 Transacciones . Buffa Sistemas
Complementaria Blog de Maxi Acotto. http://maxiaccotto.com

Potrebbero piacerti anche