Comando de transacciones

Anuncio
AR IA, F OR
SIT
TA
L
U
C
O
IZ
S
MEXICO
DE
EL EN CI
EXC
A
A
UN
ER
EZ
IV
AR
D E M ATA M
O
R
PROGRAMA ACADÉMICO DE TECNOLOGÍAS DE LA INFORMACIÓN
Comandos para Transacciones
Base de Datos para Aplicaciones
Alumno
Noche Aviles Adriana Guadalupe
Cuate González Claudia
Maya Tapia José Hilario
No. Control
TI102922
TI102972
TI102965
Gonzalo Rosas Cabrera
Izúcar de Matamoros, Pue., 21 de febrero de 2011
RESUMEN
En todo sistema de gestor de base de datos tiene que estar la de permitir al
programador crear Transacciones. El Msql nos permite trabajar con transacciones de
manera más sencilla y eficaz. Al ejecutar una transacción, el motor de base de datos
nos garantizará la atomicidad, consistencia, aislamiento y durabilidad (ACID) de la
transacción (o conjunto de comandos) que se utilice.
1
1 DESARROLLO
COMANDOS PARA TRANSACCIONES
• BEGIN DISTRIBUTED TRANSACTION
Descripción: Especifica el inicio de una transacción distribuida de Transact-SQL
administrada mediante el Coordinador de transacciones distribuidas de Microsoft (MS
DTC).
Sintaxis
BEGIN DISTRIBUTED { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ]
[;]
Ejemplo
Este ejemplo elimina un candidato de la base de datos AdventureWorks2008R2 tanto
en la instancia local del Motor de base de datos como en la instancia de un servidor
remoto. Ambas bases de datos, local y remota, confirmarán o revertirán la transacción.
Sintaxis
USE AdventureWorks2008R2;
GO
BEGIN DISTRIBUTED TRANSACTION;
2
-- Delete candidate from local instance.
DELETE AdventureWorks2008R2.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE
RemoteServer.AdventureWorks2008R2.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO
• BEGIN TRANSACTION
Descripccion: Marca el punto de inicio de una transacción local explícita. La
instrucción BEGIN TRANSACTION incrementa @@TRANCOUNT en 1.
Sintaxis
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[;]
Ejemplo
Acontinuacion se muestra cómo marcar una transacción.
3
Sintaxis
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2008R2;
GO
DELETE FROM AdventureWorks2008R2.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO
• COMMIT TRANSACTION
Descripción: Marca el final de una transacción correcta, implícita o explícita. Si
@@TRANCOUNT es 1, COMMIT TRANSACTION hace que todas las modificaciones
efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de
la base de datos, libera los recursos mantenidos por la transacción y reduce
@@TRANCOUNT
a
0.
Si
@@TRANCOUNT
es
mayor
que
1,
COMMIT
TRANSACTION solo reduce @@TRANCOUNT en 1 y la transacción sigue activa.
Sintaxis
COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]
[;]
Ejemplo
4
Se elimina a un candidato a un puesto de trabajo.
Sintaxis
USE AdventureWorks2008R2;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION;
GO
• COMMIT WORK
Descripccion: Marca el final de una transacción
Sintaxis
COMMIT [ WORK ]
[;]
• ROLLBACK TRANSACTION
5
Descripción: Revierte una transacción explícita o implícita hasta el inicio de la
transacción o hasta un punto de retorno dentro de la transacción.
Sintaxis
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]
[;]
Ejemplo
Se muestra el efecto de revertir una transacción con nombre.
Sintaxis
USE TempDB;
GO
CREATE TABLE ValueTable ([value] int)
GO
DECLARE @TransactionName varchar(20) = 'Transaction1';
--These statements start a named transaction,
--insert a two records, and then roll back
--the transaction named in the variable
6
--@TransactionName.
BEGIN TRAN @TransactionName
INSERT INTO ValueTable VALUES(1)
INSERT INTO ValueTable VALUES(2)
ROLLBACK TRAN @TransactionName
INSERT INTO ValueTable VALUES(3)
INSERT INTO ValueTable VALUES(4)
SELECT * FROM ValueTable
DROP TABLE ValueTable
--Results
--value
--------------3
--4
• ROLLBACK WORK
Descripción: Revierte una transacción especificada por el usuario al principio de la
misma
Sintaxis
ROLLBACK [ WORK ]
[;]
7
• SAVE TRANSACTION
Descripción: Establece un punto de retorno dentro de una transacción.
Sintaxis
SAVE { TRAN | TRANSACTION } { savepoint_name | @savepoint_variable }
[;]
Ejemplo
se muestra el uso de un punto de retorno de una transacción para revertir únicamente
las modificaciones realizadas por un procedimiento almacenado si una transacción
activa se inicia antes de la ejecución del procedimiento almacenado.
Sintaxis
8
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.objects
WHERE name = N'SaveTranExample')
DROP PROCEDURE SaveTranExample;
GO
CREATE PROCEDURE SaveTranExample
@InputCandidateID INT
AS
-- Detect whether the procedure was called
-- from an active transaction and save
-- that for later use.
-- In the procedure, @TranCounter = 0
-- means there was no active transaction
-- and the procedure started one.
-- @TranCounter > 0 means an active
-- transaction was started before the
-- procedure was called.
DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
-- Procedure called when there is
-- an active transaction.
-- Create a savepoint to be able
-- to roll back only the work done
-- in the procedure if there is an
-- error.
SAVE TRANSACTION ProcedureSave;
ELSE
-- Procedure must start its own
9
-- transaction.
BEGIN TRANSACTION;
-- Modify database.
BEGIN TRY
DELETE HumanResources.JobCandidate
WHERE JobCandidateID = @InputCandidateID;
-- Get here if no errors; must commit
-- any transaction started in the
-- procedure, but not commit a transaction
-- started before the transaction was called.
IF @TranCounter = 0
-- @TranCounter = 0 means no transaction was
-- started before the procedure was called.
-- The procedure must commit the transaction
-- it started.
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- An error occurred; must determine
-- which type of rollback will roll
-- back only the work done in the
-- procedure.
IF @TranCounter = 0
-- Transaction started in procedure.
-- Roll back complete transaction.
ROLLBACK TRANSACTION;
ELSE
-- Transaction started before procedure
-- called, do not roll back modifications
-- made before the procedure was called.
IF XACT_STATE() <> -1
10
-- If the transaction is still valid, just
-- roll back to the savepoint set at the
-- start of the stored procedure.
ROLLBACK TRANSACTION ProcedureSave;
-- If the transaction is uncommitable, a
-- rollback to the savepoint is not allowed
-- because the savepoint rollback writes to
-- the log. Just return to the caller, which
-- should roll back the outer transaction.
-- After the appropriate rollback, echo error
-- information to the caller.
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage
=
ERROR_MESSAGE();
SELECT @ErrorSeverity = ERROR_SEVERITY();
SELECT @ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH
GO
11
2.-CONCLUSIONES Y RECOMENDACIONES
Por lo visto los comandos de transacciones son muy fáciles de usar por supuesto este
tipo de transacciones no requieren de nuestra intervención puesto que el sistema se
encarga de todo. Sin embargo si hay que realizar varias operaciones y queremos que
sean tratadas como una unidad tenemos que crear esas transacciones de manera
explícita.
12
Descargar