You are on page 1of 10

Introduccin al modelo de recuperacin

Las operaciones de copias de seguridad y restauracin de SQL Server se producen en el contexto del modelo de recuperacin de la base de datos. Los modelos de recuperacin se han diseado para controlar el mantenimiento del registro de transacciones. Un modelo de recuperacin es una propiedad de base de datos que controla la forma en que se registran las transacciones, si el registro de transacciones requiere que se realice la copia de seguridad y si lo permite, y qu tipos de operaciones de restauracin hay disponibles. Existen tres modelos de recuperacin: simple, completa y por medio de registros de operaciones masivas. Normalmente, en las bases de datos se usa el modelo de recuperacin completa o el modelo de recuperacin simple. Una base de datos se puede cambiar a otro modelo de recuperacin en cualquier momento. En la tabla siguiente se resumen los tres modelos de recuperacin.

Modelo de recuperacin Simple

Descripcin

Riesgo de prdida de Recuperacin hasta un trabajo momento dado? Solo se puede recuperar hasta el final de una copia de seguridad. Para obtener ms informacin, veaRestauraciones de base de datos completas (modelo de recuperacin simple).

Sin copias de seguridad de registros. Los cambios realizados despus Recupera automticamente el de la copia de espacio de registro para mantener al seguridad ms mnimo los requisitos de espacio, reciente no estn eliminando, en esencia, la necesidad protegidos. En caso de administrar el espacio del registro de desastre, es de transacciones. Para obtener necesario volver a informacin acerca de las copias de realizar dichos seguridad de base de datos en el cambios. modelo de recuperacin simple, veaCopias de seguridad completas de bases de datos (SQL Server). Requiere copias de seguridad de registros. No se pierde trabajo si un archivo de datos se pierde o resulta daado. Se puede recuperar hasta cualquier momento, por ejemplo, antes del error de aplicacin o usuario. Para obtener informacin acerca de las copias de seguridad de base de datos en el modelo de recuperacin completa, veaCopias de seguridad completas de bases de datos (SQL Server) yRestauraciones de base de datos completas (modelo de recuperacin completa). Normalmente ninguno.

Completa

Se puede recuperar hasta determinado momento, siempre que las copias de Si el final del registro seguridad se hayan resulta daado, se completado hasta ese deben repetir los momento. Para obtener cambios realizados informacin sobre cmo desde la ltima copia usar copias de seguridad de seguridad de de registros para registros. restaurar hasta el momento del error, vea Restaurar una base de datos de SQL Server a un momento dado (modelo de recuperacin completa). Nota Si tiene dos o ms bases de datos con el modelo

de recuperacin completa que deben ser lgicamente coherentes, quizs tenga que implementar procedimientos especiales para garantizar la posibilidad de recuperacin de estas bases de datos.Para obtener ms informacin, vea Recuperacin de bases de datos relacionadas que contienen transacciones marcadas. Por medio de Requiere copias de seguridad de registros de registros. operaciones Complemento del modelo de masivas recuperacin completa que permite operaciones de copia masiva de alto rendimiento. Reduce el uso del espacio de registro mediante el registro mnimo de la mayora de las operaciones masivas.Para obtener informacin acerca de las operaciones que se pueden registrar mnimamente, vea El registro de transacciones (SQL Server). Para obtener informacin acerca de las copias de seguridad de base de datos en el modelo de recuperacin optimizado para cargas masivas de registros, vea Copias de seguridad completas de bases de datos (SQL Server) y Restauraciones de base de datos completas (modelo de recuperacin completa). Si el registro resulta daado o se han realizado operaciones masivas desde la ltima copia de seguridad de registros, se pueden repetir los cambios desde esa ltima copia de seguridad. En caso contrario, no se pierde el trabajo. Se puede recuperar hasta el final de cualquier copia de seguridad. No admite recuperaciones a un momento dado.

Instrucciones de transaccin (Transact-SQL)


SQL Server 2012 Otras versiones

Personas que lo han encontrado til: 0 de 2 - Valorar este tema Una transaccin es una unidad nica de trabajo. Si una transaccin tiene xito, todas las modificaciones de los datos realizadas durante la transaccin se confirman y se convierten en una parte permanente de la base de datos. Si una transaccin encuentra errores y debe cancelarse o revertirse, se borran todas las modificaciones de los datos. SQL Server funciona en los siguientes tres modos de transaccin. Transacciones de confirmacin automtica Cada instruccin individual es una transaccin. Transacciones explcitas Cada transaccin se inicia explcitamente con la instruccin BEGIN TRANSACTION y se termina explcitamente con una instruccin COMMIT o ROLLBACK. Transacciones implcitas Se inicia implcitamente una nueva transaccin cuando se ha completado la anterior, pero cada transaccin se completa explcitamente con una instruccin COMMIT o ROLLBACK. Transacciones de mbito de lote Una transaccin implcita o explcita de Transact-SQL que se inicia en una sesin de MARS (conjuntos de resultados activos mltiples), que solo es aplicable a MARS, se convierte en una transaccin de mbito de lote.Si no se confirma o revierte una transaccin de mbito de lote cuando se completa el lote, SQL Server la revierte automticamente.

En esta seccin
SQL Server proporciona las siguientes instrucciones de transaccin.

BEGIN DISTRIBUTED TRANSACTION

ROLLBACK TRANSACTION

BEGIN TRANSACTION COMMIT TRANSACTION COMMIT WORK

ROLLBACK WORK SAVE TRANSACTION

COMMIT TRANSACTION (Transact-SQL)


SQL Server 2012 Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema Marca el final de una transaccin correcta, implcita o explcita. Si @@TRANCOUNT es 1, COMMIT TRANSACTION hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transaccin sean parte permanente de la base de datos, libera los recursos mantenidos por la transaccin y reduce @@TRANCOUNT a 0. Si @@TRANCOUNT es mayor que 1, COMMIT TRANSACTION solo reduce @@TRANCOUNT en 1 y la transaccin sigue activa. Convenciones de sintaxis de Transact-SQL

Sintaxis

COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ] [ ; ]

Argumentos

transaction_name Motor de base de datos de SQL Server lo omite. transaction_name especifica un nombre de transaccin asignado a una instruccin BEGIN TRANSACTION anterior. transaction_name debe cumplir con las reglas para identificadores, pero no puede superar los 32 caracteres. transaction_name se puede usar como una ayuda de legibilidad, ya que indica a los

programadores a qu instruccin BEGIN TRANSACTION anidada est asociada la instruccin COMMIT TRANSACTION. @tran_name_variable Se trata del nombre de una variable definida por el usuario que contiene un nombre de transaccin vlido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan ms de 32 caracteres a la variable, solo se usarn 32 caracteres; el resto de los caracteres se truncarn.

Comentarios

Es responsabilidad del programador de Transact-SQL utilizar COMMIT TRANSACTION solo en el punto donde todos los datos a los que hace referencia la transaccin sean lgicamente correctos. Si la transaccin que se ha confirmado era una transaccin Transact-SQL distribuida, COMMIT TRANSACTION hace que MS DTC utilice el protocolo de confirmacin en dos fases para confirmar los servidores involucrados en la transaccin. Si una transaccin local afecta a dos o ms bases de datos de la misma instancia del Motor de base de datos, la instancia utiliza una confirmacin interna en dos fases para confirmar todas las bases de datos involucradas en la transaccin. Cuando se utiliza en transacciones anidadas, las confirmaciones de las transacciones anidadas no liberan recursos ni hacen permanentes sus modificaciones. Las modificaciones sobre los datos solo quedan permanentes y se liberan los recursos cuando se confirma la transaccin ms externa. Cada COMMIT TRANSACTION que se ejecute cuando @@TRANCOUNT sea mayor que 1 solo reduce @@TRANCOUNT en 1. Cuando @@TRANCOUNT llega a 0, se confirma la transaccin externa entera. Como Motor de base de datos omite transaction_name, la ejecucin de una instruccin COMMIT TRANSACTION que haga referencia al nombre de una transaccin externa cuando haya transacciones internas pendientes solo reduce @@TRANCOUNT en 1. La ejecucin de COMMIT TRANSACTION cuando @@TRANCOUNT es 0 produce un error; no hay ninguna instruccin BEGIN TRANSACTION asociada. No se puede revertir una transaccin despus de ejecutar una instruccin COMMIT TRANSACTION, porque las modificaciones sobre los datos ya son parte permanente de la base de datos. El Motor de base de datos incrementa el recuento de transacciones de una instruccin solo cuando el recuento de transacciones es 0 al inicio de la instruccin.

Permisos

Requiere la pertenencia al rol public.

Ejemplos
A.Confirmar una transaccin
En el siguiente ejemplo se elimina a un candidato a un puesto de trabajo.
USE AdventureWorks2012; GO BEGIN TRANSACTION; GO DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 13; GO COMMIT TRANSACTION; GO

B.Confirmar una transaccin anidada


En el siguiente ejemplo se crea una tabla, se generan tres niveles de transacciones anidadas y despus se confirma la transaccin anidada. Pese a que cada instruccin COMMIT TRANSACTION cuenta con un parmetrotransaction_name, no habr ninguna relacin entre las instrucciones COMMIT TRANSACTION y BEGIN TRANSACTION. Los parmetros transaction_name solo son ayudas para que el programador pueda asegurarse de que escribe el nmero apropiado de confirmaciones para reducir @@TRANCOUNT hasta 0, confirmando as la transaccin ms externa.
USE AdventureWorks2012; GO IF OBJECT_ID(N'TestTran',N'U') IS NOT NULL DROP TABLE TestTran; GO CREATE TABLE TestTran (Cola int PRIMARY KEY, Colb char(3)); GO -- This statement sets @@TRANCOUNT to 1. BEGIN TRANSACTION OuterTran; GO PRINT N'Transaction count after BEGIN OuterTran = ' + CAST(@@TRANCOUNT AS nvarchar(10)); GO INSERT INTO TestTran VALUES (1, 'aaa'); GO -- This statement sets @@TRANCOUNT to 2. BEGIN TRANSACTION Inner1; GO PRINT N'Transaction count after BEGIN Inner1 = ' + CAST(@@TRANCOUNT AS nvarchar(10)); GO INSERT INTO TestTran VALUES (2, 'bbb'); GO -- This statement sets @@TRANCOUNT to 3. BEGIN TRANSACTION Inner2; GO

PRINT N'Transaction count after BEGIN Inner2 = ' + CAST(@@TRANCOUNT AS nvarchar(10)); GO INSERT INTO TestTran VALUES (3, 'ccc'); GO -- This statement decrements @@TRANCOUNT to 2. -- Nothing is committed. COMMIT TRANSACTION Inner2; GO PRINT N'Transaction count after COMMIT Inner2 = ' + CAST(@@TRANCOUNT AS nvarchar(10)); GO -- This statement decrements @@TRANCOUNT to 1. -- Nothing is committed. COMMIT TRANSACTION Inner1; GO PRINT N'Transaction count after COMMIT Inner1 = ' + CAST(@@TRANCOUNT AS nvarchar(10)); GO -- This statement decrements @@TRANCOUNT to 0 and -- commits outer transaction OuterTran. COMMIT TRANSACTION OuterTran; GO PRINT N'Transaction count after COMMIT OuterTran = ' + CAST(@@TRANCOUNT AS nvarchar(10)); GO

ROLLBACK TRANSACTION (Transact-SQL)


SQL Server 2012 Otras versiones

Personas que lo han encontrado til: 0 de 1 - Valorar este tema Revierte una transaccin explcita o implcita hasta el inicio de la transaccin o hasta un punto de retorno dentro de la transaccin. Puede usar ROLLBACK TRANSACTION para borrar todas las modificaciones de datos realizadas desde el inicio de la transaccin o hasta un punto de retorno. Tambin libera los recursos que mantiene la transaccin. Convenciones de sintaxis de Transact-SQL

Sintaxis
ROLLBACK { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable

| savepoint_name | @savepoint_variable ] [ ; ]

Argumentos
transaction_name Es el nombre asignado a la transaccin en BEGIN TRANSACTION. transaction_name debe ajustarse a las reglas para los identificadores, pero solo se usan los 32 primeros caracteres del nombre de la transaccin.Cuando se anidan transacciones,transaction_name debe ser el nombre de la instruccin BEGIN TRANSACTION ms externa. @ tran_name_variable Es el nombre de una variable definida por el usuario que contiene un nombre de transaccin vlido. La variable se debe declarar con un tipo de datos char, varchar, nchar o nvarchar. savepoint_name Es savepoint_name de una instruccin SAVE TRANSACTION. savepoint_name debe ajustarse a las reglas para los identificadores. Utilice savepoint_name cuando una operacin de reversin condicional solo deba afectar a parte de la transaccin. @ savepoint_variable Es el nombre de una variable definida por el usuario que contiene un nombre de punto de retorno vlido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar.

Tratamiento de errores
Una instruccin ROLLBACK TRANSACTION no produce ningn mensaje para el usuario. Si necesita indicar advertencias en procedimientos almacenados o en desencadenadores, utilice las instrucciones RAISERROR o PRINT.RAISERROR es la instruccin ms adecuada para indicar errores.

Comentarios generales
ROLLBACK TRANSACTION sin savepoint_name o transaction_name revierte todas las instrucciones hasta el principio de la transaccin. Cuando se trata de transacciones anidadas, esta misma instruccin revierte todas las transacciones internas hasta la instruccin BEGIN TRANSACTION ms externa. En ambos casos, ROLLBACK TRANSACTION disminuye la funcin del sistema @@TRANCOUNT a 0. ROLLBACK TRANSACTION savepoint_nameno disminuye el valor de @@TRANCOUNT. ROLLBACK TRANSACTION no puede hacer referencia a un argumento savepoint_name en transacciones distribuidas que se inician de forma explcita con BEGIN DISTRIBUTED TRANSACTION o que se extienden desde una transaccin local.

Una transaccin no se puede revertir despus de ejecutar una instruccin COMMIT TRANSACTION. En una transaccin se permiten nombres de puntos de retorno duplicados, pero una instruccin ROLLBACK TRANSACTION que use este nombre solo revierte las transacciones realizadas hasta la instruccin SAVE TRANSACTION ms reciente que tambin emplee este nombre.

Interoperabilidad
En procedimientos almacenados, las instrucciones ROLLBACK TRANSACTION sin un argumento savepoint_name otransaction_name revierten todas las instrucciones hasta la instruccin BEGIN TRANSACTION ms externa. Una instruccin ROLLBACK TRANSACTION de un procedimiento almacenado que provoca que @@TRANCOUNT muestre un valor diferente cuando finaliza el procedimiento almacenado del valor de @@TRANCOUNT en el momento de la llamada al procedimiento almacenado, genera un mensaje informativo. Este mensaje no afecta a los siguientes procesos. Si se emite la instruccin ROLLBACK TRANSACTION en un desencadenador:

Se revierten todas las modificaciones de datos realizadas hasta ese punto de la transaccin actual, incluidas las que realiz el desencadenador. El desencadenador contina la ejecucin del resto de las instrucciones despus de la instruccin ROLLBACK. Si alguna de estas instrucciones modifica datos, no se revierten las modificaciones. La ejecucin de las instrucciones restantes no activa ningn desencadenador anidado. Tampoco se ejecutan las instrucciones del lote despus de la instruccin que activ el desencadenador.

@@TRANCOUNT se incrementa en uno al entrar en un desencadenador, incluso cuando est en modo de confirmacin automtica. (El sistema trata a un desencadenador como a una transaccin anidada implcita.) Las instrucciones ROLLBACK TRANSACTION de los procedimientos almacenados no afectan a las siguientes instrucciones del lote que llam al procedimiento; se ejecutan las siguientes instrucciones del lote. Las instrucciones ROLLBACK TRANSACTION de los desencadenadores finalizan el lote que contiene la instruccin que activ el desencadenador; no se ejecutan las siguientes instrucciones del lote. El efecto de ROLLBACK en los cursores se define mediante estas reglas: 1. Con CURSOR_CLOSE_ON_COMMIT establecido en ON, ROLLBACK cierra todos los cursores abiertos pero sin desasignarlos. 2. Con CURSOR_CLOSE_ON_COMMIT establecido en OFF, ROLLBACK no afecta a los cursores STATIC o INSENSITIVE sincrnicos abiertos o a los cursores STATIC asincrnicos que se hayan llenado completamente.Se cierran los cursores de otros tipos que estn abiertos, pero sin cancelar su asignacin. 3. Un error que finaliza un lote y genera una operacin de reversin interna cancela la asignacin de todos los cursores declarados en el lote que contiene la instruccin errnea. Se cancela la asignacin de todos los cursores independientemente de su tipo o de la configuracin de CURSOR_CLOSE_ON_COMMIT. Esto incluye los cursores declarados en procedimientos almacenados a los que llama el lote con errores. Los cursores declarados en un lote antes del lote con el error estn sujetos a las reglas 1 y 2. Un error de interbloqueo es un ejemplo de este tipo de

error. Una instruccin ROLLBACK emitida en un desencadenador tambin genera automticamente este tipo de error.

Comportamiento del bloqueo


Una instruccin ROLLBACK TRANSACTION que especifica un savepoint_name libera todos los bloqueos adquiridos ms all del punto de retorno, a excepcin de las extensiones y las conversiones. Estos bloqueos no se liberan y no vuelven a convertirse a su modo de bloqueo previo.

Permisos
Necesita ser miembro del rol public.

Ejemplos
En el ejemplo siguiente se muestra el efecto de revertir una transaccin con nombre.
USE tempdb; GO CREATE TABLE ValueTable ([value] int;) GO DECLARE @TransactionName varchar(20) = 'Transaction1'; --The following statements start a named transaction, --insert two rows, and then roll back --the transaction named in the variable @TransactionName. --Another statement outside of the named transaction inserts two rows. --The query returns the results of the previous statements. BEGIN TRAN @TransactionName INSERT INTO ValueTable VALUES(1), (2); ROLLBACK TRAN @TransactionName; INSERT INTO ValueTable VALUES(3),(4); SELECT [value] FROM ValueTable; DROP TABLE ValueTable; --Results --value --------------3 --4