sql >> Base de Datos >  >> RDS >> Database

Copia de seguridad y restauración de la base de datos habilitada para FILESTREAM

En mis artículos anteriores, expliqué cómo crear y configurar la función FILESTREAM en la instancia del servidor SQL. Además, demostré cómo crear una tabla que tiene una columna FILESTREAM y caliente para insertar y eliminar los datos de ella.

En este artículo, voy a explicar cómo hacer una copia de seguridad y restaurar la base de datos habilitada para FILESTREAM. Además, voy a demostrar cómo restaurar el grupo de archivos FILESTREAM sin desconectar la base de datos.

Como expliqué en mis artículos anteriores, cuando habilitamos FILESTREAM en la instancia de SQL Server, debemos crear un contenedor FILESTREAM que tenga el grupo de archivos FILESTREAM. Cuando realizamos una copia de seguridad de la base de datos habilitada para FILESTREAM, la copia de seguridad del grupo de archivos de FILESTREAM se incluirá en el conjunto de copia de seguridad. Cuando restauramos la base de datos, SQL Server restaurará la base de datos y el contenedor FILESTREAM y los archivos que contiene.

Cuando realizamos una copia de seguridad de una base de datos habilitada para FILESTREAM, hará lo siguiente:

  • Copia de seguridad de todos los archivos de datos disponibles de la base de datos.
  • Haga una copia de seguridad del grupo de archivos FILESTREAM y los archivos que contiene.
  • Registro T de respaldo.

SQL Server brinda la flexibilidad de realizar una copia de seguridad del contenedor FILESTREAM únicamente. Si los archivos dentro del contenedor FILESTREAM se dañan, no necesitamos recuperar toda la base de datos. Podemos restaurar solo el grupo de archivos FILESTREAM.

En esta demostración, voy a:

  • Explicar cómo realizar una copia de seguridad completa de la base de datos de FS y hacer una copia de seguridad solo del contenedor FILESTREAM.
  • Explicar cómo restaurar la base de datos habilitada para FILESTREAM.
  • Cómo restaurar el contenedor FILESTREAM en línea y sin conexión. Nota:SQL Server Enterprise Edition y Developer Edition admiten la restauración EN LÍNEA.

Configuración de demostración:

En esta demostración, voy a usar:

  1. Base de datos :Servidor SQL 2017
  2. Software :Estudio de administración de SQL Server.

Copia de seguridad de la base de datos habilitada para FILESTREAM

Para demostrar el proceso de copia de seguridad, he creado una base de datos habilitada para FILESTREAM llamada FileStream_Demo . Tiene una tabla FILESTREAM llamada Document_Content .

Copia de seguridad completa de la base de datos

La copia de seguridad de una base de datos habilitada para FILESTREAM es un proceso sencillo. Para generar una copia de seguridad completa, ejecute el siguiente script T-SQL.

BACKUP DATABASE [FileStream_Demo] TO  DISK = N'E:\Backups\FileStream_Demo.bak'
 WITH NOFORMAT, NOINIT,  NAME = N'FileStream_Demo-Full Database Backup', 
 SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

El siguiente es el registro de copia de seguridad generado por la ejecución del comando de copia de seguridad anterior:

/*Begin Backup DataFile*/

Processed 568 pages for database 'FileStream_Demo', file 'FileStream_Demo' on file 1.

/*Begin backup of FILESTREAM container*/

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
Processed 111106 pages for database 'FileStream_Demo', file 'Dummy-Documents' on file 1.

/*Begin backup of FILESTREAM container*/

Processed 4 pages for database 'FileStream_Demo', file 'FileStream_Demo_log' on file 1.
100 percent processed.

BACKUP DATABASE successfully processed 111677 pages in 18.410 seconds (47.391 MB/sec).

Como mencioné al comienzo del artículo, primero, el servidor SQL realiza una copia de seguridad del archivo de datos principal, luego los archivos de datos secundarios y, por último, los registros de transacciones. Como puede ver en el registro de la copia de seguridad, en primer lugar, el archivo de datos principal de la copia de seguridad del servidor SQL, luego el grupo de archivos FILESTREAM y los datos asociados con él, y finalmente los registros de transacciones.

Copia de seguridad del contenedor FILESTREAM

Como mencioné al principio del artículo, también podemos generar una copia de seguridad del contenedor FILESTREAM. Para crear una copia de seguridad del contenedor FILESTREAM, ejecute el siguiente script T-SQL.

BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO  DISK = N'E:\Backups\FS_Container.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'FileStream_Demo-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Restaurar base de datos habilitada para FILESTREAM

Cuando restauramos la base de datos de FILESTREAM, SQL restaura el contenedor de FileStream junto con todos los archivos dentro del contenedor de FILESTREAM.

Para restaurar la base de datos, realice las siguientes tareas:

  1. En SSMS, haga clic con el botón derecho en la base de datos y seleccione Restaurar base de datos .
  2. En el cuadro de diálogo Restaurar, seleccione Dispositivo y haz clic en Examinar . Se abrirá otro cuadro de diálogo. En el cuadro de diálogo, haga clic en  Agregar. .
  3. En Localizar archivo de copia de seguridad cuadro de diálogo, navegue por la estructura del directorio, haga clic en una copia de seguridad adecuada y haga clic en Aceptar .
  4. Una vez que la información de la copia de seguridad se carga en los Conjuntos de copia de seguridad para restaurar vista de cuadrícula, haga clic en Aceptar para comenzar a restaurar el proceso.

Alternativamente, puede restaurar una base de datos ejecutando el siguiente comando:

USE [master]
RESTORE DATABASE [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Demo.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 5
GO

Escenario de recuperación de base de datos habilitado para FILESTREAM

El grupo de archivos FILESTREAM restaura el proceso como el proceso de restauración de grupos de archivos.

Para generar el escenario de restauración, cree una base de datos habilitada para FILESTREAM llamada FileStream-Demo . La base de datos tiene una tabla FILESTREAM llamada Document_Content . Inserte algunos datos y archivos aleatorios en el Document_Content mesa.

Ejecute la siguiente consulta para completar los detalles de los archivos insertados en la tabla.

SELECT  
RootDirectory,  
FileName,  
FileAttribute,   
FileCreateDate,   
FileSize,  
FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

La salida es la siguiente:

La siguiente es una captura de pantalla del contenedor FILESTREAM:

En primer lugar, genere una copia de seguridad completa de la base de datos. Para ello, ejecute el siguiente comando.

BACKUP DATABASE [FileStream_Demo] TO DISK = N'E:\Backups\Full_FileStream_Demo_20180810.bak' WITH NOFORMAT, NOINIT,NAME = N'FileStream_Demo-Full Database Backup'

En segundo lugar, genere una copia de seguridad de FILEGROUP del grupo de archivos FILESTREAM llamado Dummy-Document ejecutando el siguiente comando:

BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO  DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' 
WITH NOFORMAT, NOINIT, NAME = N'FileStream_Demo-Full FILEGROUP Backup'

Para generar la corrupción de FILESTREAM, elimine algunos archivos del contenedor de FILESTREAM. Una vez que se eliminen esos archivos, intente recuperar datos de "Document_Content" ejecutando el siguiente comando:

Use FileStream_Demo
Go
select * from Document_Content

Obtendrá el siguiente error:

Msg 233, Level 20, State 0, Line 122
A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, 
error: 0 - No process is on the other end of the pipe.)

Vea la siguiente captura de pantalla:

Ahora, necesitamos restaurar el contenedor FILESTREAM para corregir este error. Generamos una copia de seguridad completa y una copia de seguridad del documento ficticio grupo de archivos.

Podemos restaurar todo el contenedor de FILESTREAM restaurando el grupo de archivos de FILESTREAM. Voy a mostrar:

  1. Restauración sin conexión del grupo de archivos FILESTREAM.
  2. Restauración en línea del grupo de archivos FILESTREAM.

Restauración sin conexión del grupo de archivos del contenedor FILESTREAM

Como había eliminado archivos del contenedor FILESTREAM, no necesitamos restaurar toda la base de datos. Por lo tanto, en lugar de restaurar toda la base de datos, restauraremos el único grupo de archivos. Para hacer eso, primero, genere una copia de seguridad de Tail-Log para capturar los cambios de datos que no fueron respaldados. La copia de seguridad de Tail-log se debe realizar con la opción NORECOVERY para llevar la base de datos al estado de restauración, y eso permite aplicar copias de seguridad en la base de datos. Para hacer eso, ejecute la siguiente consulta:

backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' With NORECOVERY

Una vez que se genera la copia de seguridad de Tail-log, la base de datos estará en modo de restauración. Ahora, podemos aplicar la copia de seguridad de FILEGROUP en una base de datos con la opción NORECOVERY. Para ello, ejecute el siguiente comando:

use master
go
RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY,REPLACE;

Ahora aplique la copia de seguridad de Tail-log con la opción RECUPERAR. Para ello, ejecute el siguiente comando:

RESTORE LOG [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'

Una vez que se restablezca la copia de seguridad, la base de datos estará en línea y todos los archivos se restaurarán en el contenedor FILESTREAM. Para verificarlo, ejecute el siguiente comando:

SELECT  
RootDirectory,  
FileName,  
FileAttribute,   
FileCreateDate,   
FileSize,  
FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

El resultado de la consulta anterior es el siguiente:

Restauración en línea del grupo de archivos FILESTREAM

Usando la edición empresarial del servidor SQL, podemos restaurar la copia de seguridad cuando la base de datos está en línea. Por ejemplo, si un archivo F1 del grupo de archivos secundario FG-1 está dañado, podemos restaurar el archivo F1 mientras la base de datos permanece en línea. La secuencia de restauración de la restauración fuera de línea y la restauración en línea son las mismas.

Como se mencionó anteriormente, para realizar una restauración en línea del grupo de archivos FILESTREAM, cree el Dummy-Document archivo de datos fuera de línea. Para ello, ejecute el siguiente comando.

use master
go
Alter database [FileStream_Demo] MODIFY FILE (NAME='Dummy-Documents',OFFLINE)

Para verificar el estado del archivo, ejecute la siguiente consulta:

Use [FileStream_Demo]
Go
select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files

La salida es la siguiente:

Ya hemos realizado una copia de seguridad del documento ficticio grupo de archivos. Por lo tanto, una vez que el archivo de datos esté fuera de línea, restaure la copia de seguridad de FILEGROUP en una base de datos con la opción NORECOVERY. Para ello, ejecute el siguiente comando:

use master
go
RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY, REPLACE;

Ahora, realice una copia de seguridad del registro de la base de datos para asegurarse de que se captura el punto en el que el archivo de datos se desconectó. Para ello, ejecute el siguiente comando:

backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

Ejecute el siguiente comando para restaurar la última copia de seguridad de T-Log.

use master
go
RESTORE LOG [FileStream_Demo] FROM  DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

Una vez que se restaura la copia de seguridad del registro, se restaurarán todos los archivos en el contenedor FILESTREAM y el grupo de archivos estará en línea. Para verificar eso, ejecute la siguiente consulta:

Use [FileStream_Demo]
Go
select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files

La salida es la siguiente:

Una vez que se restablezca la copia de seguridad, la base de datos estará en línea y todos los archivos se restaurarán en el contenedor FILESTREAM. Para verificarlo, ejecute el siguiente comando:

SELECT  
RootDirectory,  
FileName,  
FileAttribute,   
FileCreateDate,   
FileSize,  
FileStreamCol.PathName() AS FilePath FROM Document_Content  order by filesize desc

La salida es la siguiente:

Resumen

En este artículo, expliqué:

  1. Cómo realizar una copia de seguridad y restaurar la base de datos habilitada para FILESTREAM y el grupo de archivos de FILESTREAM.
  2. Cómo restaurar un grupo de archivos FILESTREAM en línea y sin conexión.