Transacciones, copias de seguridad Xochitl Clemente Parra Armando Méndez Morales
Transacciones Las transacciones hablan de atomicidad. Atomicidad es el concepto que habla de un conjunto de cosas actuando como una unidad En el caso de las bases de datos, se refiere a un grupo de uno o mas consultas que deben ser consideradas como todo o nada.
Transacciones Ejemplo: Considera las siguientes consultas: UPDATE checking SET Balance = Balance 1000 WHERE Account = Sally UPDATE savings SET Balance = Balance + 1000 WHERE Account = Sally Qué sucedería si al momento de ejecutarse, solamente pudiera resolverse una y no la otra?
Transacciones En estos casos es necesario garantizar que si se ejecuta la primera consulta, se ejecute la segunda. Esto no se puede garantizar siempre debido a que pueden haber problemas en el hardware o violaciones en la reglas de integridad. Afortunadamente podemos forzar a que las dos consultas se realicen utilizando transacciones y que si alguna no puede ejecutarse olvide que las anteriores se ejecutaron. Con el propósito de tener la noción de transacción primero se deben definir claramente sus limites. Una transacción tiene puntos de inicio y fin muy claros. Actualmente cada consulta SELECT, INSERT, UPDATE, and DELETE forman parte de una transacción implícita. Incluso si nada mas se tiene una consulta, esa consulta es considerada una transacción, debido a que todo lo que contiene la consulta debe ejecutarse para que se considere ejecutada.
Transacciones Pero cuando tenemos mas de una consulta como en el ejemplo anterior, es necesario marcar el principio y fin de la transacción, así como el éxito o fracaso de la misma. Para hacer eso, hay varias clausulas que podemos usar para marcar esos puntos de la transacción. Podemos: BEGIN a transacción: indicar el punto de inicio COMMIT a transacción: hacer a la transacción permanente, parte irreversible de la base de datos. ROLLBACK a transacción: en esencia, indica que queremos olvidar que sucedió. SAVE a transacción: establece un punto especifico en donde permite hacer un rollback parcial.
BEGIN TRAN El inicio de la transacción es probablemente uno de los conceptos mas fáciles de entender en el proceso de transacciones. Su único propósito es denotar un punto de inicio de la unidad. Si por alguna razón, no es posible o no se desea ejecutar la transacción, es el punto en el cual la actividad de la transacción regresará. Esto es, mas allá de este punto, todo lo que no se logre ejecutar efectivamente será olvidado para la base de datos. La sintaxis es: BEGIN TRAN[SACTION] [<transaction name> <@transaction variable>]
COMMIT TRAN Se utiliza para indicar el fin de una transacción. Cuando una transacción llega a la clausual COMMIT TRAN, se considera que la operación es durable, esto es que el efecto de la transacción es permanente y permanecerá aun si hay un error del sistema. La única forma de deshacer la transacción es creando una nueva que revierta la primera transacción. La sintaxis de COMMIT es muy similar al BEGIN: COMMIT TRAN[SACTION] [<transaction name> <@transaction variable>]
ROLLBACK TRAN Esta instrucción te permite regresar al inicio de la transacción en el caso de que haya ocurrido un error en el proceso de ejecución de la transacción La única forma de evitar que el rollback te envíe al inicio de la transacción es utilizando puntos de recuperacion. La sintaxis de un rollback es la siguiente: ROLLBACK TRAN[SACTION] [<transaction name> <save point name> <@transaction variable> <@savepoint variable>]
SAVE TRAN Para guardar una transacción es esencial crear una marca. Es necesario que la marca tenga un nombre, puede referenciarse en un rollback. Lo interesante es que puedes detener el proceso de rollback exactamente en el punto que deseas solo nombrando la marca. La sintaxis es muy simple: SAVE TRAN[SACTION] [<save point name> <@savepoint variable>] Lo que es necesario recordar sobre las marcas, es que serán limpiados por el rollback. Esto es, si ha guardado 5 punto, una vez que se ejecuta el rollback, todo se habrán eliminado.
Ejemplos CREATE TABLE Test2 (Columna int) --la transacción por si sola no controla el flujo de errores begin tran TranDemo1 insert into test values(2) insert into test2 values(4) commit tran -- se necesita recuperar los errores y manejarlo directamente DECLARE @Error int begin tran TranDemo1 insert into test values(2) SET @Error=@@ERROR if (@Error<>0) begin rollback tran TranDemo1 end insert into test2 values(4) commit tran
Ejemplos --otra forma de controlar los errores declare @Error int begin tran TransDemo2 insert into test values(2) SET @Error=@@ERROR if (@Error<>0) GOTO TratarError insert into test2 values(5) SET @Error=@@ERROR if (@Error<>0) GOTO TratarError commit tran TratarError: --Si ha ocurrido algún error llegamos hasta aquí if (@@Error<>0) begin print 'Ha ocurrido un error. Abortamos la transacción' rollback tran TransDemo2 end
Ejemplos en procedimientos almacenados create procedure ProcTransacciones5 as SET XACT_ABORT ON; begin try begin tran insert into test values(5) insert into test2 values(6) commit tran end try begin catch IF (XACT_STATE()) = -1 BEGIN PRINT 'La transaccion tuvo errores. ' + 'Rollback transaction.' ROLLBACK TRANSACTION; END; IF (XACT_STATE()) > 0 BEGIN PRINT 'La transaccion fue exitosa. ' + 'Committing transaction.' COMMIT TRANSACTION; END; END CATCH; create procedure ProcTransacciones4 @Valor1 int, @Valor2 int as SET XACT_ABORT ON; begin try begin tran insert into test values(@valor1) insert into test2 values(@valor2) commit tran end try begin catch IF (XACT_STATE()) = -1 BEGIN PRINT 'La transaccion tuvo erroes ' +'Rollback transaction.' ROLLBACK TRANSACTION; END; IF (XACT_STATE()) > 0 BEGIN PRINT 'La transaccion es ejecutable' +' Committing transaction.' COMMIT TRANSACTION; END; END CATCH;
Investigación Elaborar una investigación y exposición acerca de Bloqueos en bases de datos Concurrencia en bases de datos
Creación de copias de seguridad Para crear copias de seguridad, siga los siguientes pasos: Seleccione la base de datos, Tareas> Copia de Seguridad
Seleccione los parámetros adecuados y de clic en el botón Aceptar
Aparecerá un mensaje que indica si la copia se ha realizado satisfactoriamente
Restauración de copias de seguridad Para recuperar la base de datos (en caso de haberse perdido), seleccione el apartado bases de datos y la opción Restaurar base de datos
Colocar nuevos valores y seleccionar la opción Desde dispositivo
Al seleccionar la opción, aparecerá una ventana donde se indicara la ubicación del archivo de recuperación, de clic en Agregar para buscar el archivo de respaldo
De clic en Aceptar para regresar a la ventana principal, donde se seleccionará la base de datos a restaurar. De clic en Aceptar para concluir la restauración