Rol de escritor en la copia de seguridad de almacenes complejos

Al igual que con todas las operaciones importantes en VSS, las copias de seguridad incrementales y diferenciales requieren una estrecha cooperación entre solicitantes y escritores.

Tipos de copia de seguridad

La infraestructura proporciona compatibilidad especial para cinco tipos de copia de seguridad. A continuación se detalla la descripción de estos pasos:

  • Full (VSS _ BT _ FULL). Se realizará una copia de seguridad de los archivos, independientemente de la fecha de la última copia de seguridad. Se actualizará el historial de copia de seguridad de cada archivo y este tipo de copia de seguridad se puede usar como base de una copia de seguridad incremental o diferencial. Si hay archivos de registro, pueden truncarse como resultado de esta copia de seguridad.

    La restauración de una copia de seguridad completa solo requiere una sola imagen de copia de seguridad.

  • Diferencial (VSS _ BT _ DIFFERENTIAL). La API de VSS se usa para asegurarse de que solo los archivos que se han cambiado o agregado desde la última copia de seguridad completa se copiarán en un medio de almacenamiento. se omite toda la información de copia de seguridad intermedia. Esto puede incluir archivos completos o intervalos específicos dentro de los archivos. Una copia de seguridad diferencial está asociada a una copia de seguridad completa y, por lo general, no se puede restaurar hasta que se haya restaurado la copia de seguridad completa. Si hay archivos de registro, normalmente no se truncarán como resultado de esta copia de seguridad.

    La restauración de una copia de seguridad diferencial requiere la imagen de copia de seguridad original y la imagen de copia de seguridad diferencial más reciente realizada desde la última copia de seguridad completa.

  • Incremental (VSS _ BT _ INCREMENTAL). La API de VSS se usa para asegurarse de que solo los archivos que se han cambiado o agregado desde la última copia de seguridad completa o incremental se copiarán en un medio de almacenamiento. Esto puede incluir archivos completos o intervalos específicos dentro de los archivos. Algunos escritores no permiten que las copias de seguridad incrementales se mezclen con copias de seguridad diferenciales. Si hay archivos de registro, pueden truncarse como resultado de esta copia de seguridad.

    La restauración de una copia de seguridad incremental requiere la imagen de copia de seguridad original y todas las imágenes de copia de seguridad incremental realizadas desde la copia de seguridad inicial.

  • Copia de seguridad de registros (VSS _ BT _ LOG). Solo se realizará una copia de seguridad de los archivos de registro de un escritor (archivos agregados a un componente con el método IVssCreateWriterMetadata::AddDataBaseLogFiles y recuperados mediante una llamada a IVssWMComponent::GetDatabaseLogFile). Este tipo de copia de seguridad es específico de VSS. Las copias de seguridad de registros tienden a realizarse con bastante frecuencia. Normalmente, el archivo de registro se truncará como resultado de esta copia de seguridad.

  • Copia de seguridad (COPIA DE VSS _ BT _). Al igual que el tipo de copia de seguridad FULL de VSS BT, se realizará una copia de seguridad de los archivos _ _ independientemente de la fecha de la última copia de seguridad. Sin embargo, no se actualizará el historial de copia de seguridad de cada archivo y este tipo de copia de seguridad no se puede usar como base de una copia de seguridad incremental o diferencial. Los archivos de registro nunca se deben truncar como resultado de una copia de seguridad.

Compatibilidad con archivos parciales

Algunos escritores admiten la restauración de archivos mediante la sobrescritura de partes de los archivos que administran. Un solicitante puede estar diseñado para aprovechar esto y, si es así, lo indica estableciendo la información en IVssBackupComponents::SetBackupState.

Los escritores indican qué tipo de copias de seguridad se admiten mediante una llamada a IVssCreateWriterMetadata::SetBackupSchema mientras se procesa el evento Identify. El parámetro dsSchemaMask del método IVssCreateWriterMetadata::SetBackupSchema es una máscara de bits que indica qué tipos de copia de seguridad se admiten. Todos los escritores deben admitir copias de seguridad completas.

DIFERENCIAL DE VSS _ BS _

Indica la compatibilidad con copias de seguridad diferenciales.

VSS _ BS _ INCREMENTAL

Indica compatibilidad con copias de seguridad incrementales.

REGISTRO DE VSS _ BS _

Indica la compatibilidad con las copias de seguridad de registros.

COPIA DE VSS _ BS _

Indica la compatibilidad con copias de seguridad de copia.

DIFERENCIAL INCREMENTAL EXCLUSIVO DE VSS _ BS _ _ _

Indica que un escritor no admite la combinación de copias de seguridad incrementales con copias de seguridad diferenciales.

El sistema de escritura puede determinar qué tipo de copia de seguridad se está realizando llamando a CVssWriter::GetBackupType. El punto más antiguo en el que se puede realizar este proceso es al procesar el evento PrepareForBackup. CVssWriter::GetBackupType devolverá un miembro de la enumeración VSS _ BACKUP _ TYPE. Si el escritor no admite el tipo de copia de seguridad, el escritor debe tratar la copia de seguridad como una copia de seguridad completa.

Marcas de copia de seguridad

Las copias de seguridad incrementales y diferenciales siempre están vinculadas a una copia de seguridad anterior. Hay dos maneras de vincular las copias de seguridad. En el caso de los almacenes de datos simples, el solicitante puede realizar un seguimiento de la correlación entre las copias de seguridad. Sin embargo, para almacenes de datos más complejos, el escritor deberá mantener su propia marca de tiempo con la copia de seguridad. esta marca de tiempo puede realizar un seguimiento de la posición del registro, la información del punto de control, y así sucesivamente. Un escritor indica que necesita sus propias marcas de tiempo estableciendo el bit _ _ TIMESTAMPED de VSS BS cuando llama a IVssCreateWriterMetadata::SetBackupSchema.

Un escritor puede almacenar una marca de tiempo con cada componente del que se va a realizar una copia de seguridad. El escritor almacena la marca de tiempo llamando a IVssComponent::SetBackupStampy pasando una representación de cadena de la marca para el parámetro wszBackupStamp. Por lo general, un escritor llamará a este método mientras procesa el evento PostSnapshot. Sin embargo, para las copias de seguridad que no implican una instantánea, no se enviará el evento PostSnapshot. En este caso, se debe llamar a IVssComponent::SetBackupStamp al procesar el evento PrepareForBackup.

Cuando se realiza una copia de seguridad incremental o diferencial, el solicitante indicará al escritor la marca de copia de seguridad de la copia de seguridad anterior que sirve como base para esta copia de seguridad. El escritor puede acceder a esta marca de copia de seguridad anterior mientras procesa el evento PrepareForBackup o PostSnapshot, llamando a IVssComponent::GetPreviousBackupStamp. El sistema de escritura puede usar la marca devuelta para determinar de qué se debe hacer una copia de seguridad.

Estrategias de copia de seguridad

Estrategias de archivos de copia de seguridad de archivos

A menudo, solo es necesario realizar copias de seguridad de determinados archivos notificados en los metadatos del escritor al realizar determinados tipos de copia de seguridad. Es posible que algunos archivos solo sean necesarios al realizar una copia de seguridad completa. Es posible que solo se requieran otros archivos al realizar una copia de seguridad incremental o diferencial. VSS proporciona un método para que los escritores indiquen esta información al solicitante. Al agregar archivos a componentes mediante IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFileso IVssCreateWriterMetadata::AddFilesToFileGroup, el parámetro dwBackupTypeMask indica para qué tipos de copia de seguridad se deben realizar copias de seguridad de estos archivos. La máscara puede contener uno o varios de los valores siguientes:

SE REQUIERE COPIA _ DE SEGURIDAD COMPLETA DE VSS FSBT _ _ _

Necesario para copias de seguridad completas.

SE REQUIERE COPIA _ DE SEGURIDAD DIFERENCIAL DE VSS FSBT _ _ _

Necesario para copias de seguridad diferenciales.

SE REQUIERE COPIA _ DE SEGURIDAD INCREMENTAL DE VSS FSBT _ _ _

Necesario para las copias de seguridad incrementales.

SE REQUIERE LA _ COPIA DE SEGURIDAD DE REGISTROS DE VSS FSBT _ _ _

Necesario para las copias de seguridad de registros.

VSS _ FSBT _ ALL _ BACKUP _ REQUIRED

Obligatorio para todos los tipos de copia de seguridad; este es el valor predeterminado.

Esta especificación invalida la especificación de selectividad del componente. Por ejemplo, considere un componente cuyos archivos están marcados con VSS _ FSBT _ LOG BACKUP _ _ REQUIRED, pero no con VSS _ FSBT _ FULL BACKUP _ _ REQUIRED. Supongamos que este componente no se puede seleccionar para la copia de seguridad (bSelectable era false cuando se llamó a IVssCreateWriterMetadata::AddComponent). En el caso de una copia de seguridad de registros, esto significa que siempre se debe realizar una copia de seguridad de todos los archivos de este componente. Sin embargo, en el caso de una copia de seguridad completa, no es necesario hacer una copia de seguridad de ninguno de los archivos, a pesar de que la selectividad del componente implica que se debe realizar una copia de seguridad.

Copia de seguridad por hora de última modificación

Una manera de que un escritor indique qué archivos han cambiado es mediante el mecanismo de archivo diferenciado. Un sistema de escritura puede especificar que solo se debe realizar una copia de seguridad de determinados archivos de un componente si se han modificado desde un momento determinado. El escritor llama a IVssComponent::AddDifferencedFilesByLastModifyTime con una especificación de archivo y una hora de última modificación. IVssComponent::AddDifferencedFilesByLastModifyTime se suele llamar al procesar el evento PostSnapshot, aunque se puede llamar al procesar el evento PrepareForBackup. A continuación, el solicitante debe hacer una copia de seguridad de todos los archivos que coincidan con la especificación de archivo que han cambiado desde la hora especificada. Si el escritor usa el mecanismo de marca de copia de seguridad, esta hora de última modificación se determinará en función de la marca de copia de seguridad anterior del documento de copia de seguridad. El escritor también puede pasar cero durante la última hora de modificación, lo que indica que el solicitante es responsable de determinar la hora de la última copia de seguridad y los archivos han cambiado desde esa hora.

Copia de seguridad parcial de archivos

Otra manera de que un escritor indique cambios en el solicitante es mediante el mecanismo de archivo parcial. Un escritor puede especificar intervalos de bytes dentro de los archivos de componentes de los que es necesario realizar una copia de seguridad; el escritor puede especificar estos intervalos de archivos al procesar el evento PostSnapshot o PrepareForBackup. El escritor llama a IVssComponent::AddPartialFile para agregar especificaciones de archivo parciales a la copia de seguridad. Una especificación de archivo parcial consta de una ruta de acceso y un nombre de archivo junto con información sobre los intervalos del archivo de los que se debe realizar una copia de seguridad.

Reglas de especificación de archivos

IVssComponent::AddDifferencedFilesByLastModifyTime o IVssComponent::AddPartialFile se pueden usar para modificar las especificaciones de archivo especificadas durante el evento Identify o para agregar archivos completamente nuevos a la especificación. Si el escritor está modificando el conjunto de información durante el evento Identify mediante IVssComponent::AddDifferencedFilesByLastModifyTime, la especificación de archivo debe coincidir exactamente con una de las especificaciones de archivo del componente actual. La especificación de archivo no debe superponerse parcialmente a los archivos del componente actual y no debe coincidir con los archivos de ningún otro componente. Sin embargo, los archivos especificados mediante IVssComponent::AddPartialFile pueden superponerse parcialmente a otra especificación de archivo. La información establecida por IVssComponent::AddDifferencedFilesByLastModifyTime o IVssComponent::AddPartialFile invalida el conjunto de información anterior mediante la interfaz IVssCreateWriterMetadata en respuesta al evento Identify.

Las especificaciones generales de archivo pueden tener un valor de ubicación alternativa (establecido por el parámetro wszAlternateLocation de IVssCreateWriterMetadata::AddFilesToFileGroup)que indica una ubicación alternativa desde la que obtener el archivo en tiempo de copia de seguridad. Si la especificación de archivo establecida a través de los mecanismos differenced-file o partial-file coincide con una especificación de archivo existente que tiene una ubicación alternativa, la aplicación de copia de seguridad obtendrá los datos de esta ubicación alternativa.

Si la especificación de archivo establecida en IVssComponent::AddDifferencedFilesByLastModifyTime o en IVssComponent::AddPartialFile no coincide con los archivos y del componente del que se realiza la copia de seguridad, todos los archivos correspondientes ahora se agregan a la copia de seguridad. Se debe tener cuidado de que el escritor solo agrega los archivos que existen en un volumen que ya se está copiando en la sombra mientras lo hace. De lo contrario, es posible que el solicitante no pueda hacer una copia de seguridad de estos archivos. Si se llama a estas funciones al procesar el evento PostSnapshot, esto se puede determinar mediante el método CVssWriter::IsPathAffected. Si se llama al controlar el evento PrepareForBackup, el escritor debe realizar esta determinación mediante otro método.

Copia de seguridad sin instantáneas

Es posible que no sea necesario realizar una copia de seguridad de determinados tipos de archivos fuera de un volumen de instantáneas. Por ejemplo, esto suele ser cierto para los archivos de registro de base de datos. Dado que los archivos de registro crecen de forma monónica y un escritor puede especificar exactamente qué partes del archivo se van a realizar con archivos parciales, a menudo será posible realizar una copia de seguridad del registro del volumen original. Como optimización, un escritor puede marcar qué archivos requieren instantáneas para diferentes tipos de copia de seguridad mediante las marcas establecidas en el parámetro dwBackupTypeMask de IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles o IVssCreateWriterMetadata::AddFilesToFileGroup. Entre las marcas admitidas se incluyen las siguientes:

SE REQUIERE UNA _ INSTANTÁNEA COMPLETA DE VSS FSBT _ _ _

Instantánea necesaria para copias de seguridad completas.

INSTANTÁNEA DIFERENCIAL _ DE VSS FSBT _ _ _ REQUERIDA

Instantánea necesaria para las copias de seguridad diferenciales.

SE REQUIERE INSTANTÁNEA _ INCREMENTAL DE VSS FSBT _ _ _

Instantánea necesaria para las copias de seguridad incrementales.

SE REQUIERE UNA _ INSTANTÁNEA DE REGISTRO DE VSS FSBT _ _ _

Instantánea necesaria para las copias de seguridad de registros.

VSS _ FSBT _ ALL _ SNAPSHOT _ REQUIRED

Instantánea necesaria para todos los tipos de copia de seguridad; este es el valor predeterminado.

Si un volumen específico solo contiene componentes que no requieren una instantánea para esta copia de seguridad, el solicitante puede omitir el paso de creación de una instantánea para este volumen. Todos los datos de este volumen se pueden copiar en el medio de copia de seguridad directamente desde el volumen original.

Limpieza de copia de seguridad

Si el escritor necesita realizar el truncamiento del registro u otra limpieza posterior a la copia de seguridad, el lugar adecuado para hacerlo es al procesar el evento BackupComplete. El evento BackupShutdown se enviará algún tiempo después de BackupComplete, por lo que también se puede realizar alguna limpieza en el controlador de eventos BackupShutdown.

El evento BackupShutdown siempre se envía después de finalizar una copia de seguridad. Si el solicitante finaliza de forma anómala al realizar una copia de seguridad, BackupShutdown se enviará inmediatamente, sin enviar primero BackupComplete. Si el escritor necesita limpiar cualquier estado, se puede hacer aquí. sin embargo, el truncamiento del registro no debe producirse en este evento porque la copia de seguridad no se ha completado necesariamente.

Estrategias de restauración

Las tareas básicas de los escritores durante la restauración son comprobar que la restauración puede producirse al controlar el evento PreRestore y que la restauración se ha producido al controlar el evento PostRestore. Los almacenes más complejos también realizarán un proceso de recuperación en el controlador PostRestore. Si la restauración forma parte de una restauración incremental o diferencial, el escritor generalmente querrá retrasar este proceso de recuperación hasta que se hayan completado todas las restauraciones incrementales o diferenciales. IVssComponent::GetAdditionalRestores indicará si se trata de la restauración final de este componente o si hay más restauraciones. Si IVssComponent::GetAdditionalRestores devuelve true, el escritor no debe realizar su procedimiento de recuperación en ese componente.

Nuevos destinos

Si es compatible con el sistema de escritura, el solicitante puede restaurar los archivos de datos en una ubicación que no sea la ubicación original en tiempo de copia de seguridad. Un escritor indica la compatibilidad con este modo de restauración estableciendo el bit VSS _ BS _ WRITER SUPPORTS NEW _ _ _ TARGET en el parámetro dsSchemaMask al llamar a IVssCreateWriterMetadata::SetBackupSchema. Un sistema de escritura obtiene las nuevas ubicaciones de los archivos de componente en tiempo de restauración mediante una llamada a IVssComponent::GetNewTargetCount e IVssComponent::GetNewTarget.

Destinos dirigidos

En escenarios de restauración complicados, es posible que un escritor quiera asignar intervalos de un archivo de copia de seguridad a intervalos diferentes del mismo archivo o de otro. Esto se puede hacer mediante el mecanismo de destino dirigido. Para ello, un escritor debe indicar primero que esto sucede llamando a IVssComponent::SetRestoreTarget,pasando VSS _ RT _ DIRECTED para el parámetro de destino. A continuación, para cada asignación, el escritor llama a IVssComponent::AddDirectedTarget. Este método toma una ruta de acceso completa a un archivo de origen en la copia de seguridad y una ruta de acceso completa a un archivo de destino en el que se restaurará. También toma una lista de intervalos para cada uno de estos archivos. El escritor llama a estas funciones mientras se administra el evento PreRestore y, a continuación, el solicitante es responsable de restaurar los intervalos especificados en el archivo de origen a los intervalos asignados en el archivo de destino. El formato de la cadena de intervalos es el mismo que en IVssComponent::AddPartialFile

Metadatos de escritor privado

A menudo resulta útil que un escritor mantenga metadatos privados con una copia de seguridad para realizar correctamente una restauración incremental o diferencial. Un escritor puede llamar a IVssComponent::SetBackupMetadata mientras se administra PrepareForBackup o PostSnapshot para almacenar los metadatos. El escritor puede tener acceso a estos metadatos durante PreRestore o PostRestore llamando a IVssComponent::GetBackupMetadata. Los metadatos también se pueden almacenar con especificación de archivo parcial mediante el parámetro wszMetadata de IVssComponent::AddPartialFile; Se tiene acceso a estos metadatos a través del parámetro pbstrMetadata de IVssComponent::GetPartialFile. El escritor también puede pasar metadatos a sí mismo entre CVssWriter::OnPreRestore y CVssWriter::OnPostRestore. En CVssWriter::OnPreRestore, los metadatos se establecen mediante una llamada a IVssComponent::SetRestoreMetadata. En CVssWriter::OnPostRestore, los metadatos se recuperan llamando a IVssComponent::GetRestoreMetadata.