Si usa SQL Server Management Studio (SSMS) o alguna otra GUI para administrar sus bases de datos, es posible que esté acostumbrado a realizar copias de seguridad y restaurar bases de datos usando "apuntar y hacer clic".
Por lo general, esto implica hacer clic derecho en la base de datos y seleccionar Restaurar o similar, luego siga las indicaciones (por ejemplo, al restaurar una base de datos en Azure Data Studio).
Pero si alguna vez necesita hacerlo con T-SQL, puede usar RESTORE DATABASE
declaración.
Ejemplo
He aquí un ejemplo básico:
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
Esto es casi tan simple como puede ser. El RESTORE DATABASE
tiene una sintaxis bastante compleja (como ocurre con la mayoría de las cosas de T-SQL), pero esta declaración es suficiente para una operación básica de restauración predeterminada.
En este caso, restauré una base de datos llamada Mundo desde un archivo .bak. Usé FROM DISK
para especificar que era de un archivo .bak y proporcioné la ruta completa a ese archivo. Otras opciones aquí incluyen FROM TAPE
y FROM URL
.
También he incluido WITH FILE = 1
aquí, pero ese es el valor predeterminado de todos modos. Esta cláusula especifica el número de archivo del conjunto de copias de seguridad que se utilizará. Es decir, qué conjunto de copias de seguridad usar en el archivo (un archivo puede tener varios conjuntos de copias de seguridad).
Obtener una lista de conjuntos de copia de seguridad
Puedes usar RESTORE HEADERONLY
para obtener una lista de conjuntos de copia de seguridad en el archivo. Más específicamente, devuelve un conjunto de resultados de información de encabezado de respaldo para todos los conjuntos de respaldo.
Ejemplo:
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Esto devuelve muchas columnas, así que no las presentaré todas aquí.
Una de las columnas se llama Posición . Esto se debe usar con el FILE =
opción al restaurar la base de datos.
Ejemplo con más opciones
Aquí hay un ejemplo con más opciones:
RESTORE DATABASE [WideWorldImporters]
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5;
Esta es en realidad la secuencia de comandos que Azure Data Studio generó para mí cuando usé la interfaz GUI para iniciar una operación de restauración. Cuando lo hace, Azure Data Studio le ofrece la opción de ejecutar la restauración inmediatamente o generar un script con el código T-SQL que puede ejecutar más tarde.
En este caso, el script usa MOVE
argumento para mover cada nombre de archivo lógico en el archivo de copia de seguridad, a la ubicación de archivo físico especificada en el sistema operativo. En este caso, el archivo .bak usaba una ubicación de archivo física diferente (y usaba rutas de archivos de Windows), por lo que tuvo que cambiar para adaptarse a mi sistema. Consulte a continuación para obtener una explicación de cómo obtener esta información.
El NOUNLOAD
es en realidad una opción de cinta. Garantiza que la cinta no se descargue de la unidad una vez finalizada la restauración. Dado que no estaba restaurando desde una cinta, se ignoró esta opción.
Las STATS
El argumento le permite medir el progreso de la operación de restauración. Especifica que se mostrará un mensaje cada vez que se complete otro porcentaje. Si no incluye un valor de porcentaje aquí, SQL Server mostrará un mensaje después de completar cada 10 %.
RESTAURAR SOLO LA LISTA DE ARCHIVOS
Si quisiera crear una declaración como la anterior, que usa el MOVE
argumento para mover cada nombre de archivo lógico en el archivo de copia de seguridad, a la ubicación del archivo físico especificado en el sistema operativo, puede usar RESTORE FILELISTONLY
para devolver los nombres de archivo lógicos (y más).
RESTORE FILELISTONLY
devuelve un conjunto de resultados que contiene una lista de la base de datos y los archivos de registro contenidos en el conjunto de copia de seguridad.
Aquí hay un ejemplo usando el mismo archivo .bak de WideWorldImporters del ejemplo anterior:
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Resultado (usando salida vertical):
-[ RECORD 1 ]------------------------- LogicalName | WWI_Primary PhysicalName | D:\Data\WideWorldImporters.mdf Type | D FileGroupName | PRIMARY Size | 1073741824 MaxSize | 35184372080640 FileId | 1 CreateLSN | 0 DropLSN | 0 UniqueId | 8d30f4f9-a463-404f-805a-9bd1c634b66b ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 11993088 SourceBlockSize | 512 FileGroupId | 1 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 2 ]------------------------- LogicalName | WWI_UserData PhysicalName | D:\Data\WideWorldImporters_UserData.ndf Type | D FileGroupName | USERDATA Size | 2147483648 MaxSize | 35184372080640 FileId | 3 CreateLSN | 37000000095200001 DropLSN | 0 UniqueId | 28d406e0-78ff-4400-9a4b-3a05d136b1f3 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 434962432 SourceBlockSize | 512 FileGroupId | 2 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 3 ]------------------------- LogicalName | WWI_Log PhysicalName | E:\Log\WideWorldImporters.ldf Type | L FileGroupName | NULL Size | 104857600 MaxSize | 2199023255552 FileId | 2 CreateLSN | 0 DropLSN | 0 UniqueId | 6ac6807e-8774-415b-8efc-e8c569b0855e ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 0 SourceBlockSize | 512 FileGroupId | 0 LogGroupGUID | NULL DifferentialBaseLSN | 0 DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 4 ]------------------------- LogicalName | WWI_InMemory_Data_1 PhysicalName | D:\Data\WideWorldImporters_InMemory_Data_1 Type | S FileGroupName | WWI_InMemory_Data Size | 0 MaxSize | 0 FileId | 65537 CreateLSN | 624000000336200003 DropLSN | 0 UniqueId | f65663c8-a250-433e-bbe6-e13a5599a607 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 980090880 SourceBlockSize | 512 FileGroupId | 3 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL
Entonces podemos ver que las ubicaciones físicas de este archivo usan rutas de archivos de Windows. Por ejemplo, el primero (con un nombre lógico de WWI_Primary ) tiene una ubicación física de D:\Data\WideWorldImporters.mdf .
En mi caso, restauré la base de datos a SQL Server para Linux (que se ejecuta en un contenedor Docker en mi Mac), por lo que cuando restauré este archivo .bak en mi sistema, tuve que cambiar las rutas físicas para adaptarlas a mi sistema.
Por supuesto, también puede cambiar las rutas de archivo al restaurarlo en una máquina con Windows si es necesario.
La sintaxis completa
La copia de seguridad y la restauración de bases de datos pueden ser bastante complicadas, según sus requisitos. El RESTORE
La declaración está diseñada para cubrir muchos escenarios diferentes. En particular, cubre los siguientes escenarios de restauración:
- Restaurar una base de datos completa a partir de una copia de seguridad completa de la base de datos (una restauración completa).
- Restaurar parte de una base de datos (una restauración parcial).
- Restaurar archivos o grupos de archivos específicos en una base de datos (una restauración de archivos).
- Restaurar páginas específicas en una base de datos (una restauración de página).
- Restaurar un registro de transacciones en una base de datos (una restauración del registro de transacciones).
- Revertir una base de datos al punto en el tiempo capturado por una instantánea de la base de datos.
La sintaxis completa contiene muchas opciones, por lo que si sus requisitos superan el alcance de este artículo, consulte la documentación de Microsoft para obtener el RESTORE
oficial. sintaxis y explicación.
Lea también la Descripción general de restauración y recuperación de Microsoft para obtener una descripción general de las diversas consideraciones y enfoques para restaurar bases de datos.