Si vous utilisez SQL Server Management Studio (SSMS) ou une autre interface graphique pour gérer vos bases de données, vous avez peut-être l'habitude de sauvegarder et de restaurer des bases de données à l'aide de "pointer et cliquer".
Cela implique généralement un clic droit sur la base de données et la sélection de Restaurer ou similaire, puis suivez les invites (par exemple, lors de la restauration d'une base de données dans Azure Data Studio).
Mais si jamais vous avez besoin de le faire avec T-SQL, vous pouvez utiliser le RESTORE DATABASE
déclaration.
Exemple
Voici un exemple de base :
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
C'est presque aussi simple que possible. Le RESTORE DATABASE
a une syntaxe assez complexe (comme avec la plupart des choses T-SQL), mais cette instruction est suffisante pour une opération de restauration de base par défaut.
Dans ce cas, j'ai restauré une base de données appelée World à partir d'un fichier .bak. J'ai utilisé FROM DISK
pour spécifier qu'il provenait d'un fichier .bak, et j'ai fourni le chemin complet de ce fichier. D'autres options ici incluent FROM TAPE
et FROM URL
.
J'ai également inclus WITH FILE = 1
ici, mais c'est la valeur par défaut de toute façon. Cette clause spécifie le numéro de fichier du jeu de sauvegarde à utiliser. C'est-à-dire quel jeu de sauvegarde utiliser dans le fichier (un fichier peut avoir plusieurs jeux de sauvegarde).
Obtenir une liste des jeux de sauvegarde
Vous pouvez utiliser RESTORE HEADERONLY
pour obtenir une liste des jeux de sauvegarde dans le fichier. Plus précisément, il renvoie un ensemble de résultats d'informations d'en-tête de sauvegarde pour tous les ensembles de sauvegarde.
Exemple :
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Cela renvoie beaucoup de colonnes donc je ne les présenterai pas toutes ici.
L'une des colonnes s'appelle Position . Ceci doit être utilisé avec le FILE =
option lors de la restauration de la base de données.
Exemple avec plus d'options
Voici un exemple avec plus d'options :
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;
Il s'agit en fait du script qu'Azure Data Studio a généré pour moi lorsque j'ai utilisé l'interface graphique pour lancer une opération de restauration. Lorsque vous faites cela, Azure Data Studio vous donne la possibilité d'exécuter la restauration immédiatement ou de générer un script avec le code T-SQL que vous pouvez exécuter ultérieurement.
Dans ce cas, le script utilise le MOVE
argument pour déplacer chaque nom de fichier logique dans le fichier de sauvegarde vers l'emplacement de fichier physique spécifié sur le système d'exploitation. Dans ce cas, le fichier .bak utilisait un emplacement de fichier physique différent (et utilisait des chemins de fichiers Windows) et cela a donc dû changer pour s'adapter à mon système. Voir ci-dessous pour une explication sur la façon d'obtenir ces informations.
Le NOUNLOAD
est en fait une option de bande. Il garantit que la bande n'est pas déchargée du lecteur une fois la restauration terminée. Étant donné que je n'étais pas en train de restaurer à partir d'une bande, cette option a été ignorée.
Les STATS
L'argument vous permet d'évaluer la progression de l'opération de restauration. Il précise qu'un message sera affiché à chaque fois qu'un autre pourcentage se termine. Si vous n'incluez pas de valeur de pourcentage ici, SQL Server affichera un message une fois que chaque tranche de 10 % sera terminée.
RESTAURER LE FICHIER UNIQUEMENT
Si vous vouliez créer une déclaration comme la précédente, qui utilise le MOVE
argument pour déplacer chaque nom de fichier logique dans le fichier de sauvegarde, vers l'emplacement de fichier physique spécifié sur le système d'exploitation, vous pouvez utiliser RESTORE FILELISTONLY
pour renvoyer les noms de fichiers logiques (et plus).
RESTORE FILELISTONLY
renvoie un jeu de résultats contenant une liste de la base de données et des fichiers journaux contenus dans le jeu de sauvegarde.
Voici un exemple utilisant le même fichier WideWorldImporters .bak de l'exemple précédent :
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Résultat (en utilisant la sortie verticale) :
-[ 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
Nous pouvons donc voir que les emplacements physiques de ce fichier utilisent les chemins de fichiers Windows. Par exemple, le premier (avec un nom logique de WWI_Primary ) a un emplacement physique de D:\Data\WideWorldImporters.mdf .
Dans mon cas, j'ai restauré la base de données sur SQL Server pour Linux (s'exécutant dans un conteneur Docker sur mon Mac). Ainsi, lorsque j'ai restauré ce fichier .bak sur mon système, j'ai dû modifier les chemins physiques en fonction de mon système.
Bien sûr, vous pouvez également modifier les chemins d'accès aux fichiers lors de la restauration sur une machine Windows si nécessaire.
La syntaxe complète
La sauvegarde et la restauration des bases de données peuvent être assez complexes, selon vos besoins. Le RESTORE
déclaration est conçue pour couvrir de nombreux scénarios différents. En particulier, il couvre les scénarios de restauration suivants :
- Restaurer une base de données entière à partir d'une sauvegarde complète de la base de données (une restauration complète).
- Restaurer une partie d'une base de données (une restauration partielle).
- Restaurer des fichiers ou des groupes de fichiers spécifiques dans une base de données (une restauration de fichier).
- Restaurer des pages spécifiques dans une base de données (une restauration de page).
- Restaurer un journal des transactions sur une base de données (une restauration du journal des transactions).
- Rétablir une base de données au point dans le temps capturé par un instantané de base de données.
La syntaxe complète contient de nombreuses options, donc si vos besoins dépassent la portée de cet article, consultez la documentation Microsoft pour le RESTORE
officiel syntaxe et explication.
Lisez également la présentation de la restauration et de la récupération de Microsoft pour un aperçu des différentes considérations et approches de restauration des bases de données.