La diferencia clave entre las copias de seguridad completas y las copias de solo copia es si el LSN (número de secuencia de registro) o no y, específicamente, DatabaseBackupLSN
se actualiza.
Cuando realiza una copia de seguridad completa, DatabaseBackupLSN
se actualiza. Después de realizar la copia de seguridad completa, si realiza una copia de seguridad diferencial, esa copia de seguridad tiene una DatabaseBackupLSN
que coincide con la de la copia de seguridad completa y, por lo tanto, SQL puede vincular las dos (por ejemplo, sabe por esos LSN que la diferencia siguió a la completa).
El problema surge cuando ha programado la ejecución de copias de seguridad, por lo que tiene una copia de seguridad completa inicial y luego una secuencia de diferenciales. Si realiza una copia de seguridad completa manualmente, actualizará el LSN y, a partir de ese momento, cada copia de seguridad diferencial que realice mediante la copia de seguridad programada hará referencia a ese nuevo LSN, no al original. En el caso de que necesite restaurar, puede restaurar su copia de seguridad completa programada, pero cuando intente restaurar cualquiera de las copias de seguridad diferenciales realizadas después del trabajo manual, encontrará que fallará ya que los LSN ya no coinciden.
Con una copia de seguridad de solo copia no toca el DatabaseBackupLSN
, y como tal no rompe esa cadena de copias de seguridad.
Hay una buena descripción del problema, así como también por qué tanta gente lo malinterpreta en Breaking the Backup Chain - REDUX (or Eating Crow) de Michael K. Campbell, que incluye buenas guías visuales como esta:
Para una buena explicación de los cuatro LSN diferentes y cómo se usan, eche un vistazo a Comprensión de los números de secuencia de registro de SQL Server para copias de seguridad por Simon Liew.
La forma de evitar el problema es no tener más de una cosa haciendo copias de seguridad estándar de una base de datos. Cualquier copia de seguridad adhoc o secundaria debe hacerse con la opción de solo copia, vea Copias de seguridad de solo copia (SQL Server) para más detalles, pero esencialmente usa la opción "Copiar solo copia de seguridad" en SSMS, a través de T-SQL especifique WITH COPY_ONLY
en el comando , o con PowerShell, use el -CopyOnly
parámetro
Supongamos que tenemos una base de datos con copias de seguridad programadas. La copia de seguridad completa se ejecuta una vez cada 24 horas a las 00:00, también tenemos copias de seguridad diferenciales que se ejecutan cada 6 horas y copias de seguridad del registro de transacciones que se ejecutan cada hora. Entonces, ¿qué pasa si necesitamos hacer una copia de seguridad completa adicional en el medio del día, para restaurar otro servidor? ¿Qué haremos en este caso? Por supuesto, podemos hacer una copia de seguridad completa.
BACKUP DATABASE Test TO DISK = 'C:/Test.bak'
Pero cuando realiza una copia de seguridad de una base de datos, hay algunos cambios que influyen en cómo se restaurarán las siguientes copias de seguridad (las copias de seguridad diferenciales y las copias de seguridad del registro de transacciones influyen en cómo será la operación de restauración). En este caso, todas las siguientes copias de seguridad diferenciales dependerán de la última copia de seguridad completa. Si se pierde la última copia de seguridad completa, la restauración de la base de datos es imposible.
Pero, ¿cómo podemos hacer una copia de seguridad que no afecte los siguientes procesos de copia de seguridad o restauración para esa base de datos? Aquí es donde las copias de seguridad de solo copia entran en su lugar.
BACKUP DATABASE Test TO DISK = 'C:\Test.bak' WITH COPY_ONLY
fuente
Cuando tiene una copia de seguridad completa y un conjunto de copias de seguridad de archivos de registro, se mantiene una cadena de registro utilizando el LSN (Número de secuencia de registro). Si desea hacer una copia de seguridad sin romper la cadena de registro, haga una copia de seguridad de solo copia.
Si no realiza una copia de seguridad de solo copia, la cadena de registro se rompe y la copia de seguridad que realice será la última copia de seguridad completa. Esto significa que las copias de seguridad de registros anteriores no se pueden aplicar a las copias de seguridad completas recién tomadas. La cadena de registro se mantiene principalmente para recuperaciones puntuales o escenarios de envío de registros.
Por ejemplo: supongamos que tiene un escenario de copia de seguridad que realiza copias de seguridad completas cada 6 horas (medianoche, 6 am, mediodía, 6 pm) y registra las copias de seguridad cada 15 minutos. Una solicitud llega a las 9 am para que se coloque una copia de su base de datos en un servidor de prueba. Desea realizar la copia de seguridad sin romper su cadena de registro o interrumpir sus trabajos de copia de seguridad. Esto es cuando se toma una copia de seguridad de solo copia. La copia de seguridad de solo copia no interrumpirá sus conjuntos de copias de seguridad habituales.
fuente
Una copia de seguridad completa y copia de seguridad solo no rompen la cadena de registro. solo si hace una copia de seguridad de tlog habrá una falta de coincidencia de LSN.
fuente