Restaurar una copia de seguridad de un registro de transacciones (SQL Server)

Se aplica a:SQL Server

Puedes restaurar una copia de seguridad de un registro de transacciones en SQL Server usando SQL Server Management Studio, Transact-SQL o PowerShell.

Requisitos previos

Debes restaurar las copias de seguridad en el orden en que las creaste. Antes de restaurar una copia de seguridad específica de un registro de transacciones, restaura las siguientes copias anteriores sin revertir transacciones no comprometidas, utilizando WITH NORECOVERY:

  • La copia de seguridad completa de la base de datos y, opcionalmente, la última copia de seguridad diferencial realizada antes de esa copia de seguridad del registro de transacciones. La base de datos debe haber utilizado el modelo de recuperación completo o por operaciones de carga masiva antes de que se creara la copia de seguridad completa o diferencial más reciente.

  • Restaura todas las copias de seguridad del registro de transacciones realizadas después de la copia de seguridad completa de la base de datos o de la copia de seguridad diferencial (si restauras una) y antes de esa copia de seguridad del registro de transacciones. Debes aplicar copias de seguridad del registro en el orden en que las creaste, sin ningún vacío en la cadena de registros.

Para más información sobre las copias de seguridad de registros de transacciones, consulte Copias de seguridad de registros de transacciones y Aplicar copias de seguridad de registros de transacciones.

Permisos

Para una base de datos existente, RESTORE los permisos por defecto corresponden a los miembros de los roles fijos de servidor sysadmin y dbcreator y al propietario (dbo) de la base de datos.

RESTORE Los permisos van a roles cuya membresía el servidor siempre puede comprobar. El servidor solo puede comprobar la pertenencia a roles fijos de la base de datos cuando la base de datos es accesible y no está dañada, lo cual no siempre es cierto cuando RESTORE se ejecuta. Por esta razón, los miembros del rol fijo de base de datos db_owner no tienen permisos RESTORE.

Remarks

Para una base de datos espejo, o una base de datos secundaria de un grupo de disponibilidad que no hayas unido al grupo de disponibilidad, restaura la última copia de seguridad de los registros con la NORECOVERY opción (-NoRecovery en PowerShell). La base de datos debe permanecer en el estado 'restoring'.

Para una base de datos secundaria de envío de logs, restaura la última copia de seguridad de log con la NORECOVERY opción o la STANDBY opción (-StandbyFile en PowerShell). La STANDBY opción da acceso de solo lectura a la base de datos entre operaciones de restauración.

Uso de SQL Server Management Studio

Advertencia

En una restauración típica, seleccionas las copias de seguridad de los registros junto con las copias de seguridad de datos y diferenciales en el cuadro de diálogo Restaurar base de datos .

  1. Conéctate a la instancia correspondiente del Motor de base de datos de SQL Server. En Explorador de objetos, selecciona el nombre del servidor para expandir el árbol del servidor.

  2. Expanda Bases de datos. Selecciona una base de datos de usuario, o expande Bases de Datos del Sistema y selecciona una base de datos del sistema.

  3. Haz clic derecho en la base de datos, señala Tareas, señala Restaurar y luego selecciona el Registro de transacciones. Se abre el cuadro de diálogo Restaurar registro de transacciones .

    Nota:

    Si el Registro de Transacciones no está disponible, puede que necesites restaurar primero una copia de seguridad completa o diferencial. Utiliza el cuadro de diálogo Restaurar base de datos.

  4. En la página General , en el cuadro de lista de bases de datos , selecciona la base de datos. La lista muestra solo bases de datos en estado de restauración.

  5. Para especificar el origen y la ubicación de los conjuntos de copia de seguridad a restaurar, seleccione una de las siguientes opciones:

    • Desde copias de seguridad de bases de datos anteriores

      Seleccione la base de datos que desea restaurar en la lista desplegable. La lista contiene únicamente bases de datos con copias de seguridad registradas en el historial de copia de seguridad de msdb.

    • Desde archivo o cinta

      Seleccione el botón Examinar (...) para abrir el cuadro de diálogo Seleccionar dispositivos de copia de seguridad. En el cuadro Tipo de medio de copia de seguridad, selecciona un tipo de dispositivo. Para añadir uno o más dispositivos al cuadro Medios de copia de seguridad, selecciona Añadir.

      Después de añadir los dispositivos que quieres, selecciona OK para volver a la página General .

  6. En la cuadrícula Seleccionar las copias de seguridad del registro de transacciones que se van a restaurar , seleccione las copias de seguridad que desea restaurar. La cuadrícula lista las copias de seguridad de los registros de transacciones disponibles para la base de datos seleccionada. La cuadrícula lista las copias de seguridad de registros en el orden de los números de secuencia del registro (LSN) que contienen, y debes restaurarlas en este orden.

    En la tabla siguiente se muestran los encabezados de columna de la cuadrícula y se describen sus valores.

    Encabezado Valor
    Restaurar Las casillas seleccionadas indican los conjuntos de respaldo a restaurar.
    Nombre Nombre del conjunto de copia de seguridad.
    Componente Componente del que se ha realizado una copia de seguridad: Base de datos, Archivo o <en blanco> (para registros de transacciones).
    Base de datos Nombre de la base de datos que forma parte de la operación de copia de seguridad.
    Fecha de inicio Fecha y hora de inicio de la operación de copia de seguridad, según la configuración regional del cliente.
    Fecha final Fecha y hora de finalización de la operación de copia de seguridad, según la configuración regional del cliente.
    Primer LSN Número de secuencia de registro de la primera transacción del conjunto de copias de seguridad. En blanco para las copias de seguridad de archivos.
    Último LSN Número de flujo de registro de la última transacción del conjunto de copias de seguridad. En blanco para las copias de seguridad de archivos.
    LSN de punto de control Número de flujo de registro del punto de comprobación más reciente en el momento en que se creó la copia de seguridad.
    LSN completo Número de secuencia de registro de la copia de seguridad completa más reciente de la base de datos.
    Server Nombre de la instancia del motor de base de datos que realizó la operación de copia de seguridad.
    Nombre usuario Nombre del usuario que realizó la operación de copia de seguridad.
    Tamaño Tamaño del conjunto de copias de seguridad, en bytes.
    Posición Posición del conjunto de copias de seguridad en el volumen.
    Expiración Fecha y hora de expiración del conjunto de copia de seguridad.
  7. Seleccione una de las siguientes opciones:

    • Momento dado

      Mantén el valor predeterminado (el más reciente posible), o selecciona el botón Examinar para abrir el cuadro de diálogo Restauración a un momento dado y selecciona una fecha y hora específicas.

    • Transacción marcada

      Restaura la base de datos al estado de una transacción previamente marcada. Esta opción abre el cuadro de diálogo Seleccionar Transacción Marcada . La cuadrícula de este cuadro de diálogo muestra las transacciones marcadas en las copias de seguridad seleccionadas del registro de transacciones.

      Por defecto, la operación de restauración llega hasta, pero excluye, la transacción marcada. Para incluir la transacción marcada en la restauración, selecciona Incluir transacción marcada.

      En la tabla siguiente se muestran los encabezados de columna de la cuadrícula y se describen sus valores.

      Encabezado Valor
      <en blanco> Muestra una casilla para seleccionar la marca.
      Marca de transacción Nombre de la transacción marcada especificada por el usuario cuando se confirmó la transacción.
      Date Fecha y hora de confirmación de la transacción. La fecha y hora de la transacción se muestran tal como se registran en la tabla logmarkhistory en MSDB, no en la fecha y hora del ordenador cliente.
      Descripción Descripción de la transacción marcada, si la hubo, especificada por el usuario cuando se confirmó la transacción.
      LSN Número de flujo de registro de la transacción marcada.
      Base de datos Nombre de la base de datos en la que se confirmó la transacción marcada.
      Nombre usuario Nombre del usuario de la base de datos que confirmó la transacción marcada.
  8. Para ver o seleccionar las opciones avanzadas, seleccione Opciones, en el panel Seleccionar una página.

  9. En la sección de opciones de restauración , selecciona entre las siguientes opciones:

    • Conservar la configuración de replicación (WITH KEEP_REPLICATION)

      Conserva la configuración de replicación cuando restauras una base de datos publicada en un servidor diferente al que se creó la base de datos.

      Esta opción solo está disponible con la opción Dejar la base de datos lista para usarse revertiendo transacciones no comprometidas... (descrita más adelante), que equivale a restaurar una copia de seguridad con la opción RECOVERY.

      Seleccionar esta opción equivale a usar la opción KEEP_REPLICATION en una sentencia Transact-SQL RESTORE .

    • Preguntar antes de restaurar cada copia de seguridad

      Antes de cada copia de seguridad después de la primera, esta opción abre el cuadro de diálogo Continuar con la restauración, que pregunta si quieres continuar la secuencia de restauración. El cuadro de diálogo muestra el nombre del siguiente conjunto de medios (si está disponible), el nombre del conjunto de copia de seguridad y la descripción del conjunto de respaldo.

      Esta opción es especialmente útil cuando tienes que intercambiar cintas por diferentes conjuntos de medios, por ejemplo, cuando el servidor solo tiene un dispositivo de cinta. Selecciona OK solo cuando estés listo para continuar.

      Si seleccionas No, la base de datos permanece en estado de restauración. Puedes continuar la secuencia de restauración más adelante, desde la última restauración que se completó. Si la copia de seguridad siguiente es de datos o diferencial, vuelva a utilizar la tarea Restaurar base de datos . Si la siguiente copia de seguridad es una copia de seguridad de registros, utilice la tarea Restaurar registro de transacciones .

    • Restringir el acceso a la base de datos restaurada (WITH RESTRICTED_USER)

      Hace que la base de datos restaurada esté disponible solo para los miembros de db_owner, dbcreatoro sysadmin.

      Seleccionar esta opción equivale a usar la opción RESTRICTED_USER en una sentencia Transact-SQL RESTORE .

  10. En estado de recuperación, especifique el estado de la base de datos tras la operación de restauración.

    • Revertir las transacciones no confirmadas para dejar la base de datos lista para su uso. No se pueden restaurar registros adicionales de transacciones. (RESTORE CON RECUPERACIÓN)

      Recupera la base de datos. Esta opción es equivalente a la opción RECOVERY en una instrucción Transact-SQL RESTORE.

      Elige esta opción solo si no tienes otras copias de seguridad de registros que restaurar.

    • Deja la base de datos inoperativa y no reviertas transacciones no confirmadas. Pueden restaurarse registros de transacciones adicionales. (RESTORE WITH NORECOVERY)

      Deja la base de datos sin recuperar, en el estado RESTORING . Esta opción equivale a usar la opción NORECOVERY en una sentencia Transact-SQL RESTORE .

      Cuando eliges esta opción, la opción Preservar la configuración de replicación no está disponible.

    • Dejar la base de datos en modo de solo lectura. Deshacer las transacciones sin confirmar, pero guardar las acciones de deshacer en un archivo para que los efectos de recuperación puedan invertirse. (RESTORE WITH STANDBY)

      Deja la base de datos en estado de espera. Esta opción equivale a usar la opción STANDBY en una instrucción Transact-SQL RESTORE .

      Esta opción requiere un archivo en espera.

  11. Si dejas la base de datos en modo de solo lectura, especifica un nombre de archivo de espera en el cuadro de texto Archivo en espera. Puedes buscar el archivo de reserva o escribir su ruta en el cuadro de texto.

Uso de Transact-SQL

Importante

Para evitar ambigüedades, especifica explícitamente WITH NORECOVERY o WITH RECOVERY en cada instrucción RESTORE, especialmente en scripts.

  1. Para cada copia de seguridad del registro de transacciones anterior a la última de la secuencia de restauración, ejecuta una instrucción RESTORE LOG con los siguientes valores:

    • El nombre de la base de datos a la que aplicar el registro de transacciones.
    • El dispositivo de copia de seguridad que contiene la copia de seguridad del registro de transacciones.
    • Cláusula NORECOVERY.

    El siguiente ejemplo muestra la sintaxis básica, donde <database_name> es el nombre de la base de datos y <backup_device> el nombre del dispositivo que contiene la copia de seguridad del log.

    RESTORE LOG <database_name>
    FROM <backup_device>
    WITH NORECOVERY
    [ ; ]
    

    Si tu secuencia de restauración solo tiene una copia de seguridad de registro, sáltate este paso.

  2. Para la última copia de seguridad de los registros en tu secuencia de restauración, utiliza uno de los siguientes métodos para recuperar la base de datos:

    • Recupere la base de datos como parte de la última RESTORE LOG sentencia:

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH RECOVERY;
      GO
      
    • Recupera la base de datos más adelante, con una instrucción aparte RESTORE DATABASE :

      RESTORE LOG <database_name>
      FROM <backup_device>
      WITH NORECOVERY;
      
      RESTORE DATABASE <database_name>
      WITH RECOVERY;
      GO
      

      La base de datos permanece en estado de restauración después de la última RESTORE LOG sentencia. Puedes comprobar que has restaurado todas las copias de seguridad de los registros necesarias y luego recuperar la base de datos. Este enfoque suele ser útil para una restauración en un momento en el tiempo.

Ejemplos (Transact-SQL)

La base de datos AdventureWorks2025 usa el modelo de recuperación simple de forma predeterminada. Los siguientes ejemplos requieren que se realicen copias de seguridad bajo el modelo de recuperación completo. Antes de crear esas copias de seguridad, ejecuta la siguiente instrucción para cambiar el modelo de recuperación:

ALTER DATABASE AdventureWorks2025
SET RECOVERY FULL;

El cambio al modelo de recuperación completo solo surte efecto tras la primera copia de seguridad de datos. Haz una copia de seguridad completa de la base de datos para iniciar la cadena de registros.

Los siguientes ejemplos restauran las copias de seguridad en una instancia donde la AdventureWorks2025 base de datos no existe, como un servidor diferente.

A. Aplica una sola copia de seguridad del registro de transacciones

El siguiente ejemplo restaura la AdventureWorks2025 base de datos a partir de una copia de seguridad completa en un dispositivo de respaldo llamado AdventureWorks2025_1. Luego aplica la primera copia de seguridad del registro de transacciones desde un dispositivo de respaldo llamado AdventureWorks2025_log. Finalmente, recupera la base de datos.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

B. Aplicar varias copias de seguridad del registro de transacciones

El siguiente ejemplo restaura la AdventureWorks2025 base de datos a partir de una copia de seguridad completa en un dispositivo de respaldo llamado AdventureWorks2025_1. Luego aplica, una a una, las tres primeras copias de seguridad del registro de transacciones desde un dispositivo de respaldo llamado AdventureWorks2025_log. Finalmente, recupera la base de datos.

RESTORE DATABASE AdventureWorks2025
FROM AdventureWorks2025_1
WITH NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 1,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 2,
     NORECOVERY;
GO

RESTORE LOG AdventureWorks2025
FROM AdventureWorks2025_log
WITH FILE = 3,
     NORECOVERY;
GO

RESTORE DATABASE AdventureWorks2025
WITH RECOVERY;
GO

Uso de PowerShell

Usa el Restore-SqlDatabase cmdlet y establece el -RestoreAction parámetro en Log. Incluye el -NoRecovery parámetro para cada restauración en la secuencia excepto la última. Omita -NoRecovery en la última restauración de registros para recuperar la base de datos.

Nota:

Estos ejemplos requieren el SqlServer módulo. Para más información, consulte SQL Server PowerShell Provider.

Para la sintaxis completa, véase Restore-SqlDatabase.

Ejemplos (PowerShell)

Los siguientes ejemplos restauran las copias de seguridad en una instancia donde la AdventureWorks2025 base de datos no existe, como un servidor diferente.

A. Aplicar una única copia de seguridad del registro de transacciones

El siguiente ejemplo restaura la AdventureWorks2025 base de datos desde una copia de seguridad completa, dejando la base de datos en estado de restauración. Luego aplica una copia de seguridad del registro de transacciones y recupera la base de datos.

$instance = "Computer\Instance"

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

$logRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_log1.trn"
    RestoreAction  = "Log"
}
Restore-SqlDatabase @logRestore

B. Aplicar múltiples copias de seguridad de registros de transacciones

El siguiente ejemplo restaura la copia de seguridad completa de la base de datos y luego aplica tres copias de seguridad de registros de transacciones en secuencia. Todas las restauraciones excepto la última usan -NoRecovery, así que la última restauración de log recupera la base de datos.

$instance = "Computer\Instance"
$logBackups = @(
    "C:\Backup\AdventureWorks2025_log1.trn",
    "C:\Backup\AdventureWorks2025_log2.trn",
    "C:\Backup\AdventureWorks2025_log3.trn"
)

$fullRestore = @{
    ServerInstance = $instance
    Database       = "AdventureWorks2025"
    BackupFile     = "C:\Backup\AdventureWorks2025_full.bak"
    RestoreAction  = "Database"
    NoRecovery     = $true
}
Restore-SqlDatabase @fullRestore

for ($i = 0; $i -lt $logBackups.Count; $i++) {
    $isLast = ($i -eq $logBackups.Count - 1)
    $logRestore = @{
        ServerInstance = $instance
        Database       = "AdventureWorks2025"
        BackupFile     = $logBackups[$i]
        RestoreAction  = "Log"
        NoRecovery     = -not $isLast
    }
    Restore-SqlDatabase @logRestore
}