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.
fuente
COPY_ONLY
: si el OP tomara una copia de seguridad completa regular en el día 1 y unaCOPY_ONLY
copia 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?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.
exdupe
por 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.
fuente
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.
fuente
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.
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
master
base de datos -sys.database_file
o (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 .
differential_base_lsn
es 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.differential_base_guid
es el identificador único de la copia de seguridad base de en la que se basa una copia de seguridad diferencial.differential_base_time
es 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
fuente