Partager via


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

Dans une restauration complète de la base de données, l’objectif est de restaurer l’ensemble de la base de données. Toute la base de données est hors connexion pendant la durée de la restauration. Avant que n’importe quelle partie de la base de données puisse être mise en ligne, toutes les données sont récupérées à un point cohérent dans lequel toutes les parties de la base de données sont au même moment et aucune transaction non validée n’existe.

Sous le modèle de récupération complète, après avoir restauré vos sauvegardes ou sauvegardes de données, vous devez restaurer toutes les sauvegardes de journal des transactions suivantes, 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 journaux. Le point de récupération peut être une date et une heure spécifiques, une transaction marquée ou un numéro de séquence de journal (LSN).

Lors de la restauration d’une base de données, en particulier sous le modèle de récupération complète ou le modèle de récupération journalisé en bloc, vous devez utiliser une seule séquence de restauration. Une séquence de restauration se compose d’une ou plusieurs opérations de restauration qui déplacent les données par une ou plusieurs phases de restauration.

Important

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 qui peut exécuter du code Transact-SQL involontaire ou provoquer des erreurs en modifiant le schéma ou la structure de base de données physique. 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 et examinez également le code, tel que des procédures stockées ou d’autres codes définis par l’utilisateur, dans la base de données.

Dans cette rubrique :

Remarque

Pour plus d’informations sur la prise en charge des sauvegardes à partir 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 au point de défaillance

En règle générale, la récupération d’une base de données au point de défaillance implique les étapes de base suivantes :

  1. Sauvegardez le journal des transactions actif (appelé dernière partie du journal). Cela crée une sauvegarde de fin de journal. Si le journal des transactions actif n’est pas disponible, toutes les transactions de cette partie du journal sont perdues.

    Important

    Sous le modèle de récupération journalisé en bloc, la sauvegarde d’un journal contenant des opérations journalisées en bloc nécessite l’accès à tous les fichiers de données de 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établir manuellement toutes les modifications apportées depuis la dernière sauvegarde du journal.

    Pour plus d’informations, consultez Tail-Log Sauvegardes (SQL Server).

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

  3. Si des sauvegardes différentielles existent, restaurez la dernière version sans récupérer la base de données (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).

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

  4. À compter de la première sauvegarde du journal des transactions créée après la sauvegarde que vous venez de restaurer, restaurez les journaux en séquence avec NORECOVERY.

  5. Restaurez la base de données (RESTORE DATABASE database_name WITH RECOVERY). Vous pouvez également combiner cette étape avec la restauration de la dernière sauvegarde du journal.

L’illustration suivante montre cette séquence de restauration. Après qu'une panne se produit (1), une sauvegarde du journal est créée (2). Ensuite, la base de données est restaurée au point de l’échec. Cela implique de restaurer une sauvegarde de base de données, suivie d'une sauvegarde différentielle et de chaque sauvegarde de journal effectuée après la sauvegarde différentielle, y compris la sauvegarde de la fin du journal.

Restauration complète de la base de données à l'instant de la défaillance

Remarque

Lorsque vous restaurez une sauvegarde de base de données sur une autre instance de serveur, consultez Copier des bases de données avec sauvegarde et restauration.

Syntaxe de base 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 la sauvegarde complète de la base de données AVEC L'OPTION NORECOVERY ;

  2. RESTAURER BASE DE DONNÉES database À PARTIR DE full_differential_backup AVEC NORECOVERY;

  3. RESTORE LOG database FROM log_backup WITH NORECOVERY ;

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

  4. RESTAURER LA BASE DE DONNÉES database AVEC RÉCUPÉRATION;

Exemple : récupération jusqu’au point d’échec (Transact-SQL)

L’exemple de Transact-SQL suivant montre les options essentielles d’une séquence de restauration qui restaure la base de données au point de défaillance. L’exemple crée une sauvegarde de fin de journal de la base de données. Ensuite, l’exemple restaure une sauvegarde complète d’une base de données et une sauvegarde de journal, puis restaure la sauvegarde du journal en attente. L’exemple récupère la base de données dans une étape finale distincte.

Remarque

Cet exemple utilise une sauvegarde de base de données et une sauvegarde de journal créée dans la section « Utilisation des sauvegardes de base de données sous le modèle de récupération complète » dans sauvegardes complètes de base de données (SQL Server). Avant la sauvegarde de la base de données, l’exemple de base de données AdventureWorks2012 a été défini pour utiliser le modèle de récupération complète.

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

Restauration d’une base de données à un point précis d'une sauvegarde de journal

Sous le modèle de récupération complète, une restauration complète de base de données peut généralement être récupérée à un point de temps, une transaction marquée ou un LSN dans une sauvegarde de journal. Toutefois, selon le modèle de récupération journalisé en bloc, si la sauvegarde du journal contient des changements journalisés en bloc, la récupération à un point dans le temps n’est pas possible.

Exemples de scénarios de restauration à un instant précis

L’exemple suivant suppose un système de base de données stratégique pour lequel une sauvegarde complète de base de données est créée tous les jours à minuit, une sauvegarde différentielle de base de données est créée le lundi au samedi et les sauvegardes du journal des transactions sont créées toutes les 10 minutes tout au long de la journée. Pour restaurer la base de données à l’état où elle se trouvait à 5h19 mercredi, 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 à 17h00 le mercredi.

  3. Appliquez la sauvegarde du journal des transactions créée à 17 h 10 le mercredi.

  4. Appliquez la sauvegarde du journal des transactions qui a été créée 5:20 le mercredi, en spécifiant que le processus de récupération s’applique uniquement aux transactions qui se sont produites avant 5:19 A.M.

Sinon, si la base de données doit être restaurée à son état à 3:04 A.M. Jeudi, mais que la sauvegarde différentielle de base de données créée à 3:00 A.M. Jeudi n’est pas disponible, procédez comme suit :

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

  2. Restaurez la sauvegarde différentielle de base de données créée à 2 h 00 le jeudi.

  3. Appliquez toutes les sauvegardes du journal des transactions créées à partir de 2 h 10 à 3 h 00 le 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 à un point dans le temps, consultez Restaurer une base de données SQL Server à un point dans le temps (modèle 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 du journal des transactions

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

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

Voir aussi

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