Restaurations complètes de bases de données (mode de récupération complète)

S’applique à : SQL Server

Lors d'une restauration complète de base de données, le but est de restaurer la totalité de la base de données. L'ensemble de la base de données est hors ligne pendant la durée de la restauration. Avant qu'une partie quelconque de la base de données ne puisse être mise en ligne, toutes les données sont récupérées dans un état cohérent où toutes les parties de la base de données sont chronologiquement synchronisées et aucune transaction non validée n'existe.

Dans le mode de récupération complète, après avoir restauré vos sauvegardes de données, vous devez restaurer toutes les sauvegardes ultérieures des journaux de transactions, puis récupérer la base de données. Vous pouvez restaurer une base de données vers un point de récupération spécifique dans l'une de ces sauvegardes de fichiers journaux. Ce point de récupération peut correspondre à une date et une heure spécifiques, une transaction marquée ou un numéro séquentiel dans le journal (LSN, Log Sequence Number).

Lorsque vous restaurez une base de données, en particulier en mode de restauration complète ou de récupération utilisant les journaux des transactions, vous devez utiliser une séquence de restauration unique. Une séquence de restauration consiste en une ou plusieurs opérations de restauration déplaçant des données entre une ou plusieurs phases de restauration.

Sources non approuvées

Nous vous recommandons de ne pas attacher ni restaurer de bases de données provenant de sources inconnues ou non approuvées. Ces bases de données peuvent contenir du code malveillant susceptible d’exécuter du code Transact-SQL indésirable ou de provoquer des erreurs en modifiant le schéma ou la structure physique des bases de données. Avant d'utiliser une base de données à partir d'une source inconnue ou non approuvée, exécutez DBCC CHECKDB sur la base de données, sur un serveur hors production. Examinez également le code écrit par l’utilisateur dans la base données, tel que les procédures stockées ou tout autre code défini par l'utilisateur.

Sauvegarde de versions antérieures

Pour plus d’informations sur la prise en charge de sauvegardes provenant de versions antérieures de SQL Server, consultez la section « Prise en charge de la compatibilité » de RESTORE (Transact-SQL).

Restauration d'une base de données jusqu'au point de défaillance

Généralement, la récupération d'une base de données jusqu'au point de défaillance comprend les étapes de base suivantes :

  1. Sauvegardez le journal des transactions actives (connu sous le nom de fin du journal). Cela entraîne la création d'une sauvegarde de la fin du journal. Si le journal des transactions actives n'est pas disponible, toutes les transactions contenues dans cette partie du journal sont perdues.

    Important

    Dans le mode de récupération utilisant les journaux de transactions, la sauvegarde de tout journal contenant des opérations journalisées en bloc nécessite un accès à tous les fichiers de données dans la base de données. Si les fichiers de données ne sont pas accessibles, le journal des transactions ne peut pas être sauvegardé. Dans ce cas, vous devez répéter manuellement tous les changements effectués depuis la dernière sauvegarde du journal.

    Pour plus d’informations, consultez Sauvegardes de la fin du journal (SQL Server).

  2. Restaurez la sauvegarde complète de base de données la plus récente sans récupérer la base de données (RESTORE DATABASE nom_base_de_données FROM unité_sauvegarde WITH NORECOVERY).

  3. S’il existe des sauvegardes différentielles, restaurez la plus récente sans récupérer la base de données (RESTORE DATABASE nom_base_de_données FROM unité_sauvegarde_différentielle WITH NORECOVERY).

    La restauration de la sauvegarde différentielle la plus récente réduit le nombre de sauvegardes de fichiers journaux qui doivent être restaurées.

  4. En commençant par la première sauvegarde du journal des transactions qui a été créée après la sauvegarde que vous venez de restaurer, restaurez les journaux en séquence avec l'instruction NORECOVERY.

  5. Récupérez la base de données (RESTORE DATABASE nom_base_de_données WITH RECOVERY). Cette étape peut également être combinée avec la restauration de la dernière sauvegarde du journal.

L'illustration suivante montre cette séquence de restauration. Après une défaillance (1), une sauvegarde de la fin du journal est créée (2). Ensuite, la base de données est restaurée jusqu'au point de défaillance. Cela implique la restauration d'une sauvegarde de base de données suivie d'une sauvegarde différentielle, ainsi que de chaque sauvegarde de journal effectuée après la sauvegarde différentielle, y compris la sauvegarde de la fin du journal.

Restauration de base de données complète au moment d'une défaillance

Remarque

Quand vous restaurez une sauvegarde de base de données sur une instance de serveur différente, consultez Copier des bases de données avec la sauvegarde et la restauration.

Syntaxe de base de l'instruction Transact-SQL RESTORE

La syntaxe Transact-SQL RESTORE de base pour la séquence de restauration dans l’illustration précédente est la suivante :

  1. RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

  2. RESTORE DATABASE base_de_données FROM sauvegarde_base_de_données_complète WITH NORECOVERY;

  3. RESTORE LOG base_de_données FROM sauvegarde_journal WITH NORECOVERY;

    Répétez cette étape de restauration pour chaque sauvegarde de fichier journal supplémentaire.

  4. RESTORE DATABASE database WITH RECOVERY;

Exemple : récupération jusqu'au point de défaillance (Transact-SQL)

L’exemple Transact-SQL suivant présente les principales options d’une séquence de restauration qui restaure la base de données jusqu’au point de défaillance. L'exemple crée une sauvegarde de la fin du journal de la base de données. Ensuite, il restaure une sauvegarde complète de base de données et une sauvegarde de fichier journal, puis restaure la sauvegarde de la fin du journal. L'exemple récupère la base de données dans une dernière étape séparée.

Remarque

Cet exemple utilise une sauvegarde de base de données et une sauvegarde du journal créées dans la section « Utilisation des sauvegardes de base de données en mode de récupération complète » dans Sauvegardes complètes de bases de données (SQL Server). Avant la sauvegarde de la base de données, l'exemple de base de données de AdventureWorks2022 a été défini pour utiliser le mode de récupération complète.

USE master;  
--Create tail-log backup.  
BACKUP LOG AdventureWorks2022   
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    
   WITH NORECOVERY;   
GO  
--Restore the full database backup (from backup set 1).  
RESTORE DATABASE AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=1,   
    NORECOVERY;  
  
--Restore the regular log backup (from backup set 2).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   
  WITH FILE=2,   
    NORECOVERY;  
  
--Restore the tail-log backup (from backup set 3).  
RESTORE LOG AdventureWorks2022   
  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  
  WITH FILE=3,   
    NORECOVERY;  
GO  
--recover the database:  
RESTORE DATABASE AdventureWorks2022 WITH RECOVERY;  
GO  

Restauration d'une base de données jusqu'à un point dans une sauvegarde de fichier journal

En mode de récupération complète, une restauration complète de base de données peut généralement être récupérée jusqu'à une date et une heure, une transaction marquée ou un LSN dans une sauvegarde de fichier journal. Cependant, en mode de récupération utilisant les journaux des transactions, si la sauvegarde du journal contient des modifications journalisées en bloc, la récupération jusqu'à une date et heure est impossible.

Exemples de scénarios de restauration jusqu'à une date et heure

L'exemple suivant suppose un système de bases de données critique pour lequel une sauvegarde complète est créée chaque nuit à minuit, une sauvegarde différentielle chaque heure tous les jours du lundi au samedi et une sauvegarde du journal des transactions toutes les 10 minutes pendant la journée. Pour restaurer la base de données dans l’état où elle se trouvait mercredi à 5 h 19, procédez comme suit :

  1. Restaurez la sauvegarde complète de la base de données créée mardi à minuit.

  2. Restaurez la sauvegarde différentielle de base de données créée à 5 heures du matin le mercredi.

  3. Appliquez la sauvegarde de journal des transactions qui a été créée à 5 h 10 le mercredi.

  4. Appliquez la sauvegarde du journal des transactions créée mercredi à 5 h 20, en précisant que le processus de récupération ne s’applique qu’aux transactions effectuées avant 5 h 19.

Par ailleurs, si la base de données doit être restaurée à son état à 3 h 04 le jeudi, mais que la sauvegarde différentielle de la base de données créée à 3 h 00 le jeudi n’est pas disponible, procédez comme suit :

  1. Restaurez la sauvegarde de base de données qui a été créée mercredi à minuit.

  2. Restaurez la sauvegarde différentielle de base de données créée à 2 heures du matin le jeudi.

  3. Appliquez toutes les sauvegardes du journal des transactions créées entre 2 h 10 et 3 h 00 jeudi.

  4. Appliquez la sauvegarde du journal des transactions créée à 3 h 10 le jeudi, en arrêtant le processus de récupération à 3 h 04.

Remarque

Pour obtenir un exemple de restauration de point-à-temps, consultez Restaurer une base de données SQL Server jusqu’à une limite dans le temps (mode de récupération complète).

Tâches associées

Pour restaurer une sauvegarde complète de base de données

Pour restaurer une sauvegarde différentielle de base de données

Pour restaurer une sauvegarde de journal des transactions

Pour restaurer une sauvegarde à l'aide de SMO (SQL Server Management Objects)

Pour restaurer une base de données jusqu'à un point dans une sauvegarde de fichier journal

Voir aussi

RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
Appliquer les sauvegardes du journal de transactions (SQL Server)
sp_addumpdevice (Transact-SQL)
Sauvegardes de base de données complètes (SQL Server)
Sauvegardes différentielles (SQL Server)
Backup Overview (SQL Server)
Vue d'ensemble de la restauration et de la récupération (SQL Server)