¿Por qué una copia de seguridad diferencial no puede especificar su base?


18

Esta es mi primera publicación de DBA.SE, así que infórmeme de cualquier error, ¡gracias!

Soy un nuevo DBA (no un profesional de TI, simplemente nadie más en la empresa para hacerlo), así que cuanto más básica sea la explicación, mejor. He estado leyendo sobre estrategias de copia de seguridad de bases de datos (o, como he aprendido a llamarlas, "estrategias de restauración"). Entiendo lo que hacen las copias de seguridad completas, diferenciales y del registro de transacciones, pero quiero saber por qué una copia de seguridad diferencial solo puede basarse en la copia de seguridad completa más reciente.

Si una copia de seguridad diferencial es todo lo que ha cambiado desde la última copia de seguridad completa, ¿por qué no puede basarse la diferencia en ninguna copia de seguridad de mi elección? Para ser más claro, estoy preguntando sobre la especificación de la base cuando se toma la copia de seguridad , no cuando se restaura. Supongo que al restaurar elegiría la base correcta y el diferencial correspondiente para realizar la restauración (no usar un diferencial hecho desde la base B para restaurar desde la base A).

¿Cuál es la razón que impide que esta funcionalidad sea posible? Me imagino que debe haber una razón, simplemente no sé cuál es.

Nota: Entiendo que la base no se puede especificar, pero mi pregunta es ¿por qué no ? (Tampoco me interesa discutir sobre "¿por qué lo harías?")

Analogía

Aquí hay una analogía de cómo entiendo una copia de seguridad diferencial:

Tengo un archivo de Excel con algunos datos en las celdas.

El día 1, hago una copia de este archivo y la guardo en otro lugar (la "copia de seguridad completa").

El día 2, miro el archivo y lo comparo con la copia de seguridad que hice el día 1, y noto todas las celdas que han cambiado y cuáles son sus nuevos valores (una "copia de seguridad diferencial"). No estoy notando cada cambio realizado en una celda, solo cuál es su valor final. Si la celda A1 comenzó como "Alfred", cambió a "Betty", "Charlie", luego "Dave", solo notaría que "A1 ahora es Dave".

El día 3, comparo el archivo actual con el archivo de respaldo nuevamente y noto los cambios (otra "copia de respaldo diferencial" con la misma base que el día 2). Una vez más, solo observando los valores finales por celda en el momento observado, no todos los valores que la celda ha tenido durante todo el día.

El día 4, comparo nuevamente y noto los cambios nuevamente. Continuando con la celda A1, ahora dice "Sarah", incluso si fueron otros 10 nombres a lo largo del día, y todo lo que noto es "Ahora A1 es Sarah".

El día 5, mi archivo se estropea; entonces, miro la copia de respaldo que hice el día 1, luego los estados finales anotados el día 4, y aplico los cambios anotados a la copia de respaldo y ahora tengo el archivo "restaurado" como estaba en el día 4 Entonces, miro la copia de seguridad realizada el día 1, veo que el día 4 la celda A1 terminó como "Sarah", y cambio la celda de copia de seguridad A1 para que sea "Sarah".

¿Por qué sería importante si hubiera hecho otra copia de seguridad ("completa") del archivo el día 2? ¿Por qué no sería posible comparar (leer, "hacer una copia de seguridad diferencial de") el archivo el día 3 o 4 con la copia realizada el día 1? Según tengo entendido, SQL Server me exigiría que compare (al tomar otra copia de seguridad diferencial) con una copia de seguridad completa realizada el día 2 (si se hubiera hecho una), no hay otra opción.

Respuestas:


14

Una copia de seguridad diferencial utiliza lo que se denomina el mapa de cambio diferencial para crear una lista de páginas que se han modificado desde la última copia de seguridad completa. Esta lista es una lista "diferencial", de ahí el nombre del tipo de copia de seguridad, y la razón por la que la copia de seguridad solo se puede restaurar por encima de la copia de seguridad completa asociada.

Realizar una copia de seguridad completa restablece el mapa de cambio diferencial. A partir de ese momento, cualquier página que se modifique se registra en el mapa. Si luego toma un diferencial, esa copia de seguridad solo contiene páginas que han sido modificadas desde la última copia de seguridad completa y registradas en el mapa.

En su analogía, las dos copias de seguridad completas, que sirven como base para todo el proceso de restauración, probablemente tengan diferentes contenidos y, por lo tanto, diferentes mapas diferenciales. Si restaura una diferencia basada en la primera copia de seguridad sobre la segunda copia de seguridad, es probable que la base de datos esté dañada. De hecho, SQL Server impide la restauración de una copia de seguridad diff sobre cualquier cosa, excepto la copia de seguridad completa original en la que se basa.

Cuando solicita a SQL Server que realice una copia de seguridad diferencial, la única "base" para la diferencia es el mapa de cambio diferencial único presente en la base de datos en el momento en que comienza la copia de seguridad diferencial. Es por eso que no puede especificar la base para la copia de seguridad diferencial.


En respuesta a un comentario de @MartinSmith, es posible que pueda usar COPY_ONLYcopias de seguridad para restaurar una copia de seguridad diferencial en varias copias de seguridad completas. Considere el siguiente escenario:

  1. BACKUP DATABASE xyz TO DISK = 'path_to_backup.bak';
  2. BACKUP DATABASE xyz TO DISK = 'path_to_backup_2.bak' WITH COPY_ONLY;
  3. BACKUP DATABASE xyz TO DISK = 'path_to_backup_3.bak' WITH COPY_ONLY;
  4. BACKUP DATABASE xyz TO DISK = 'path_to_backup_4.bak' WITH COPY_ONLY;
  5. BACKUP DATABASE xyz TO DISK = 'path_to_backup_diff.bak' WITH DIFFERENTIAL;

La copia de seguridad diferencial en el paso 5 debe poder restaurarse sobre cualquiera de las copias de seguridad realizadas en los pasos 1 a 4, ya que el mapa de cambio diferencial solo se borra cuando se produce la copia de seguridad completa en el paso 1. Las COPY_ONLYcopias de seguridad en los pasos 2, 3 y 4 no restablecen el mapa de cambios. Dado que el mapa de cambios diferenciales acumula los cambios realizados desde la copia de seguridad completa, cada una de las COPY_ONLYcopias de seguridad sucesivas contiene suficiente información para que la copia de seguridad diferencial funcione contra cualquiera de las 4 copias de seguridad anteriores.

Aunque parece que debería funcionar, en la práctica, restaurar un diferencial sobre una copia de seguridad de copy_only da como resultado el siguiente error:

Mensaje 3136, Nivel 16, Estado 1, Línea 1
Esta copia de seguridad diferencial no se puede restaurar porque la base de datos no se ha restaurado al estado anterior correcto.
Msg 3013, Nivel 16, Estado 1, Línea 1
RESTORE DATABASE está finalizando de manera anormal.

Creé una réplica de la plataforma SQL Server 2012 para probar restauraciones diferenciales y copy_only, y guardé el archivo en gist.github.com - ADVERTENCIA, el script eliminará cualquier base de datos nombrada RestoreTestcomo su primer paso.


La realización de una copia de seguridad completa solo restablece el mapa de cambio diferencial si no es así COPY_ONLY: si el OP tomara una copia de seguridad completa regular en el día 1 y una COPY_ONLYcopia de seguridad completa en el día 2, entonces qué problemas se causarían al aplicar un diferencial posterior desde esa misma base hasta el día 2 de respaldo?
Martin Smith

Acabo de probarlo y en la práctica no permite restaurar el diferencial posterior en un copy_only, aunque "Esta copia de seguridad diferencial no se puede restaurar porque la base de datos no se ha restaurado al estado anterior correcto". - No estoy seguro de si hay alguna razón por la cual esto no funcionaría o simplemente no está implementado.
Martin Smith

1
@ MartinSmith - disparar. También he validado eso ahora.
Max Vernon

5

La característica que desea podría existir en principio. No sería eficiente con las estructuras de bases de datos actuales (ver la respuesta de Max Vernon). SQL Server tendría que mantener un conjunto de mapas de diferencias o comparar el contenido actual de la base de datos con la copia de seguridad completa que especifique como base.

Hay aplicaciones que deduplican archivos grandes. Puede hacer dos copias de seguridad completas y solo se almacenarán los datos modificados. Esto es como un diff con base personalizada. exdupepor ejemplo puede hacer eso.

Lo bueno de eso es que funciona con cualquier conjunto de archivos de copia de seguridad. De hecho, comenzando con el tercer archivo de copia de seguridad completo, solo pagará de forma incremental uso de espacio (no diferencial). El uso del espacio es la diferencia con el archivo de copia de seguridad anterior (no con el primero). El almacenamiento de deduplicación tiene un comportamiento similar.

¿Por qué la característica que describe no existe? Cada función consume presupuesto, lo que hace que otras funciones no estén presentes. Aparentemente, este no llegó lo suficientemente lejos en la lista de prioridades. No estoy seguro de para qué sería bueno. Parece un requisito bastante esotérico para usar bases personalizadas.


3

No confunda las copias de seguridad del registro de transacciones con las copias de seguridad diferenciales, ¡tienen diferentes propósitos! Lo que llama una "copia de seguridad diferencial", mediante la cual "nota todos los cambios en las celdas", es en realidad un registro de transacciones .

El propósito de una copia de seguridad diferencial es mantener pequeño el tamaño del archivo de copia de seguridad resultante al registrar solo la información que ha cambiado desde la última copia de seguridad completa, y mantener el tiempo de restauración dentro de su objetivo de tiempo de recuperación (RTO).

El propósito de una copia de seguridad del registro de transacciones es dejar que vuelva a reproducir las transacciones a un punto arbitrario en el tiempo - a menudo, pero definitivamente no necesariamente a "la última cosa a suceder".

De hecho, lo que está hablando es posible, pero necesita restaurar la copia de seguridad completa y luego restaurar los registros de transacciones.

Si tiene la copia de seguridad completa del día 1 y todas las copias de seguridad del registro de transacciones entre el día 1 y el día 5, no hay nada que le impida restaurar la copia de seguridad del día 1 y volver a reproducir el registro de transacciones hasta que tenga los datos como estaban en el día 4. Usted También podría comenzar desde la copia de seguridad del día 2, que sería un poco más rápido de restaurar, ya que estaría repitiendo menos transacciones. También puede restaurar la copia de seguridad completa del día 1, la copia de seguridad diferencial del día 3 y luego restaurar los registros de transacciones hasta el día 4.

Editar: OK, tu analogía editada tiene un poco más de sentido. La respuesta es entonces "porque ya puede lograr lo que desea con las copias de seguridad del registro de transacciones". Una copia de seguridad diferencial es simplemente una forma económica y conveniente de registrar un montón de actividad de registro de transacciones. No ofrece ninguna granularidad de recuperación de datos que no ofrece una copia de seguridad del registro de transacciones. Hay solo algunas características que ofrecen "mera conveniencia" que lo convierten en un producto.


Creo que podría haber redactado mal la analogía, en espera de una edición ... lo siento
elmer007

Editado para su nueva analogía.
dpw

1

Dar una analogía con Excel es comparar manzanas y naranjas. Por qué ? Excel no es una base de datos, ya que carece de integridad de datos. Excel es una aplicación de hoja de cálculo bastante buena y podría ser un complemento de la base de datos.

SQL Server es un sistema de base de datos relacional que le permite almacenar todos sus datos y proporciona un mecanismo para consultarlos. La parte importante es "Relacional" ya que la relación de datos es importante junto con la integridad de los datos (propiedades ACID).

Fundamentos:

Los datos en la base de datos están organizados en componentes lógicos (tablas, vistas, procesos, disparadores, etc.) que son visibles para el usuario. Como mínimo, una base de datos también se implementa físicamente como dos (archivos de datos y de registro) o más (archivos de datos secundarios) en el disco.

  • Una base de datos contiene una página que es la unidad fundamental de almacenamiento de datos utilizada para almacenar registros .
  • Una página de base de datos es un fragmento de 8192 bytes (8 KB) de un archivo de datos de base de datos.
  • 8 páginas físicamente contiguas (8 * 8 KB = 64 KB) en un archivo de base de datos forman una extensión .
  • Una página IAM (Mapa de asignación de índice) rastrea aproximadamente 4 GB de espacio en un solo archivo, alineado en un límite de 4 GB. Estos fragmentos de 4 GB se denominan intervalos GAM .

por qué una copia de seguridad diferencial solo puede basarse en la copia de seguridad completa más reciente. - o - Si una copia de seguridad diferencial es todo lo que ha cambiado desde la última copia de seguridad completa, ¿por qué no puede basarse la diferencia en ninguna copia de seguridad de mi elección?

Según su analogía sobre Excel, lo que está haciendo es aplicar lo que ha cambiado a lo anterior. Esto aplica todas las transacciones confirmadas desde el registro de transacciones with STOP AT(nota: el día 5 el archivo se desordena y se detiene el día 4)

En cada sección de 4GB (llamada intervalo GAM) de cada archivo de datos hay una página de base de datos especial llamada mapa de bits diferencial que rastrea qué partes (llamadas extensiones) de esa sección de 4GB han cambiado desde la última copia de seguridad completa, indicando datos que han cambiado o agregado a la base de datos.

Una copia de seguridad diferencial explora estos mapas de bits y solo realiza una copia de seguridad de las extensiones del archivo de datos marcadas como modificadas. Los mapas de bits se restablecen en la siguiente copia de seguridad completa (por lo tanto, una copia de seguridad diferencial solo puede basarse en la copia de seguridad completa más reciente) , por lo que puede ver que a medida que más y más cambios de la base de datos, más de ellos se marcarán en los mapas de bits diferenciales y las copias de seguridad diferenciales sucesivas serán cada vez más grandes.

Incluso puede usar este script para averiguar ¿Cuánto ha cambiado la base de datos desde la última copia de seguridad completa? .

La información base diferencial se almacena en la masterbase de datos - sys.database_fileo ( sys.master_files- útil cuando la base de datos es de solo lectura o fuera de línea).

Hay 3 columnas importantes que almacenan información relacionada con la base diferencial .

  • El differential_base_lsnes la base para las copias de seguridad diferenciales. Las extensiones de datos que se cambian despuésdifferential_base_lsn se incluirán en la copia de seguridad diferencial.
  • El differential_base_guides el identificador único de la copia de seguridad base de en la que se basa una copia de seguridad diferencial.
  • El differential_base_timees el tiempo que corresponde adifferential_base_lsn

Una copia de seguridad diferencial es útil para acelerar el RTO (Objetivo de tiempo de recuperación = Tiempo que lleva recuperar su base de datos) en lugar de las copias de seguridad completas más frecuentes, lo que será un problema para grandes bases de datos o para restaurar el volumen de copias de seguridad del registro de transacciones, ya que podrían crecer. a lo largo del tiempo

Nota: Una copia de seguridad completa COPY_ONLY no restablece la base diferencial, por lo que una copia de seguridad COPY_ONLY no puede servir como base diferencial.

Referencias



2
@PaulSRandal escribió Las páginas existen para almacenar registros. en su blog y así lo mencioné tal cual. ¡Tomar en referencia lógica lo que está diciendo (basado en la referencia) también es cierto!
Kin Shah
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.