Sunteți pe pagina 1din 28

TRANSACCIONES

EN SQL
Escuela de Ingeniera
De Sistemas

BASE DE DATOS
AVANZADAS

DR. LUIS BOY CHAVIL


Junio, 2017
TRANSACCIONES PARA LA
INTEGRIDAD DE
DATOS
AGENDA
Procesamiento de Transacciones
Propiedades ACID
Modelos de Transacciones
Creacin de Transacciones en ADO.NET

DR. LUIS BOY CHAVIL


TRANSACCIONES
Las transacciones se forman por un conjunto de tareas
relacionadas que se realizan como una unidad.
Las transacciones se confirman o se anulan.
Reflejan operaciones que son activadas por eventos como:
Comprar un producto
Registrarse para un curso, o
Hacer un depsito para una cuenta.

DR. LUIS BOY CHAVIL


TRANSACCIONES
Una transaccin de ventas, podra requerir:
Que se actualice la cuenta del cliente,
Ajustar el inventario de productos, y
Actualizar las cuentas por cobrar del vendedor.
Todas las partes de un transaccin deben completarse de
manera satisfactoria para evitar problemas de integridad de
datos.

DR. LUIS BOY CHAVIL


TRANSACCIONES.- Ejemplo

DR. LUIS BOY CHAVIL


TRANSACCIONES.- Ejemplo
El saldo del cliente de la tabla CLIENTE indica la cantidad
total adeudada por el cliente.
El saldo, aumenta cuando el cliente hace una compra a
crdito y disminuye cuando hace un pago.
La tabla MOVIMIENTOS registra todas las compras y pagos
del cliente para dar seguimiento a los detalles de la actividad
de su cuenta.

DR. LUIS BOY CHAVIL


TRANSACCIONES.- Ejemplo
Suponga que se vende un producto a un cliente y que l
puede cargar la compra a su cuenta; en este caso, la
transaccin de venta contendra:
Escribir una nueva Factura
Reducir la cantidad disponible en el stock de producto.
Actualizar las transacciones de la cuenta.
Actualizar el saldo del cliente.

DR. LUIS BOY CHAVIL


TRANSACCIONES.- Ejemplo
En trminos de bases de datos, una transaccin es
cualquier accin que lea o escriba en una base de datos.
Una transaccin es una unidad de trabajo lgica que debe
estar totalmente terminada o abortada; no se aceptan
estados intermedios.

DR. LUIS BOY CHAVIL


ESTADO CONSISTENTE
Un estado consistente en una base de datos es aquel en el
que se satisfacen todas las restricciones de integridad de
datos.
Una transaccin exitosa cambia la base de datos de un
estado consistente a otro.

DR. LUIS BOY CHAVIL


ESTADO CONSISTENTE
No todas las transacciones actualizan datos; veamos:
--Examinar la tabla CLIENTE para determinar el saldo
-- actual del cliente con nmero 1002.
use FACTURAS
go
select c.CLI_numero as [N Cliente],
c.CLI_saldo as SaldoCliente
from CLIENTE c
where c.CLI_numero=1002
go
La base de datos permanece en estado consistente despus del acceso,
porque la transaccin no la alter.

DR. LUIS BOY CHAVIL


CLUSULAS
BEGIN TRAN
Especifica que va a iniciar una transaccin
COMMIT TRAN
Le indica al motor de base de datos que puede considerar
la transaccin completada con xito.
ROLLBACK TRAN
Indica que se ha alcanzado un fallo y que debe
restablecer la base al punto de integridad.

DR. LUIS BOY CHAVIL


SINTAXIS
BEGIN [TRAN | TRANSACTION] Nombre_Transaccin

COMMIT TRAN Nombre_Transaccin

ROLLBACK TRAN Nombre_Transaccin

DR. LUIS BOY CHAVIL


ESTADO CONSISTENTE
--Insertar un movimiento nuevo, verificando que existe CLIENTE.
if OBJECT_ID('MovimientoNew') is not null
drop procedure dbo.MovimientoNew
go
create procedure MovimientoNew(@MOV_numero char(10), @MOV_fecha datetime, @MOV_tipotransacc char(08), @MOV_cantidad
decimal(7,2), @CLI_apellido char(18), @CLI_nombre char(18))
AS
begin transaction TransacMovimiento
declare @CLI_numero int
select @CLI_numero=CLI_numero
from CLIENTE
where CLI_apellido=@CLI_apellido and CLI_nombre=@CLI_nombre
Insert into MOVIMIENTOS
values(@MOV_numero, @MOV_fecha, @MOV_tipotransacc, @MOV_cantidad, @CLI_numero)
if @@error=0
begin
print 'Movimiento registrado exitosamente'
commit tran TransacMovimiento
end
else
begin
print 'Ocurri error al insertar ...'
rollback tran TransacMovimiento
end
go
--Ejecucin del SP
exec MovimientoNew '10220','18/01/2015', 'venta', 100.00, 'Perez Chavez', 'Daniel'
go DR. LUIS BOY CHAVIL
ESTADO CONSISTENTE
Supongamos que el 18 de enero de 2017, se registra la venta a crdito de una unidad del
producto K3-WRE-Q al cliente 4502 por la cantidad de S/. 277.55:
Insert Into FACTURA
values('10280012', 18/01/2017, 256.99, 20.56, 277.55, 'cred', 0.00, 277.55, 4502)
Insert Into VENTAS
values(1, '10280012', K3-WRE-Q', 1, 256.99, 256.99)
Update PRODUCTO
set PRO_stock=PRO_stock-1
where PRO_numero=K3-WRE-Q'
Update CLIENTE
set CLI_saldo=CLI_saldo+277.55
where CLI_numero=4502
Insert Into MOVIMIENTOS
values('1005', 18/01/2017, 'cobro', 277.55, 4502)
COMMIT;
DR. LUIS BOY CHAVIL
CARACTERSTICAS
Propiedades ACID
ACID Expresa la funcin que las transacciones
desarrollan en aplicaciones crticas para una misin.
Atomicity (Atomicidad)
Consistency (Consistencia)
Isolation (Aislamiento)
Durability (Durabilidad)

DR. LUIS BOY CHAVIL


ATOMICIDAD
Una Transaccin se ejecuta exactamente una vez y tiene
carcter atmico; es decir, el trabajo se realiza en su
totalidad o no se realiza en ningn caso.
Si una Transaccin Tran1, tiene 4 solicitudes de SQL, las
cuatro peticiones deben ejecutarse con xito; de lo contrario
toda la transaccin se aborta.
Por tanto, es una unidad de trabajo en la que se produce
una serie de operaciones entre: Begin Transaction y
End Transaction.

DR. LUIS BOY CHAVIL


CONSISTENCIA
Una transaccin es una unidad integral porque mantiene la
consistencia de los datos, transformando un estado
consistente de datos en otro estado de datos igualmente
consistente.
La consistencia indica la permanencia del estado
consistente de la base de datos.

DR. LUIS BOY CHAVIL


AISLAMIENTO
Una transaccin es una unidad de aislamiento, permitiendo
que transacciones concurrentes se comporten como si
cada una fuera la nica transaccin que se ejecuta en el
sistema.
Una transaccin nunca debe ver las fases intermedias de
otra transaccin.

DR. LUIS BOY CHAVIL


DURABILIDAD
Una transaccin tambin es una unidad de recuperacin.
Si una transaccin se realiza satisfactoriamente, el sistema
garantiza que sus actualizaciones se mantienen aunque el
equipo falle inmediatamente despus de la confirmacin.

DR. LUIS BOY CHAVIL


TRANSACCIONES
CON ADO NET
MODELOS
Transacciones Manuales
Transacciones Automticas

DR. LUIS BOY CHAVIL


TRANSACCIONES MANUALES
Permiten comenzar de forma explcita una transaccin, controlar
cada una de las inscripciones de recursos y conexiones dentro del
lmite de la transaccin, determinar el resultado de la misma
(confirmacin o anulacin) y finalizarla.
Tipos:
Transacciones de ADO .NET
Transacciones de Colas de Mensajes
Cuando se trabaja con aplicaciones distribuidas con COM+

DR. LUIS BOY CHAVIL


TRANSACCIONES AUTOMTICAS
Admitidas por:
Microsoft Transaction Server (MTS)
COM+
Common Lenguaje Runtime
Una vez que una pgina de ASP .NET, un mtodo de servicio web
XML, o una clase de .NET Framework se marcan para participar en
una transaccin, se ejecutan automticamente en el mbito de la
misma.
Tipos:
Transacciones de ASP .NET
Transacciones de servicios Web XML
Transacciones de servicios empresariales .NET DR. LUIS BOY CHAVIL
TRANSACCIONES EN ADO.NET
Para comenzar una transaccin local, usaremos el objeto de
conexin de ADO.NET: Connection.BeginTransaction
Inscribiremos un comando en esa transaccin mediante la
propiedad Transaction del objeto Command.
Luego, podremos utilizar el objeto Transaction para confirmar o
deshacer las modificaciones realizadas en el origen de datos, en
funcin del xito o de los errores de los componentes de la
transaccin

DR. LUIS BOY CHAVIL


TRANSACCIONES EN ADO.NET
Declarar una variable de tipo SqlTransaction
Dim Tran As SqlTransaction
Definir una estructura Try..Catch..Finally que maneje los posibles
errores de ejecucin de comandos:
En Try, abrir la conexin:
Cnn.Open()
Crear la transaccin:
Tran = Cnn.BeginTransaction
Configurar la propiedad Transaction de todos los comandos que se
desean en la transaccin
oComando.Transaction = Tran
DR. LUIS BOY CHAVIL
TRANSACCIONES EN ADO.NET
Ejecutar los comandos con ExecuteNonQuery
oComando.ExecuteNonQuery
Si ningn comando genera una excepcin, realizar la transaccin
mediante Commit:
Tran.Commit()
Si algn comando genera un error, anular la transaccin con Rollback
dentro de Catch:
Tran.Rollback()
Cerrar la coneccin si est abierta, dentro de Finally:
If cnn.State=ConnectionState.Open then Cnn.Close()

DR. LUIS BOY CHAVIL


TRANSACCIONES
EN SQL
Escuela de Ingeniera
De Sistemas

BASE DE DATOS
AVANZADAS

DR. LUIS BOY CHAVIL


Junio, 2017

S-ar putea să vă placă și