Rétablir une base de données dans l’état d’un instantané de base de données

S'applique à : SQL Server

Si les données d'une base de données en ligne sont endommagées, dans certains cas, rétablir la base de données dans l'état d'un instantané précédant le problème peut être une bonne solution plutôt que de restaurer la base de données à partir d'une sauvegarde. Par exemple, rétablir une base de données peut être utile pour annuler une grave erreur de l'utilisateur, telle que la suppression d'une table. Toutefois, toutes les modifications apportées depuis la création de l'instantané sont perdues.

Avant de commencer

Limitations et restrictions

Le rétablissement n'est pas pris en charge dans les conditions suivantes :

  • Il existe plusieurs instantanés pour la base de données. Le rétablissement doit compter un seul instantané de base de données que vous prévoyez de rétablir.

  • Des groupes de fichiers compressés ou en lecture seule existent dans la base de données.

  • Des fichiers sont maintenant hors connexion alors qu'ils étaient en ligne lors de la création de l'instantané.

Avant de rétablir une base de données, tenez compte des limitations suivantes :

  • Le rétablissement n'est pas destiné à la récupération des supports. L'instantané de base de données est une copie incomplète des fichiers de base de données, donc si la base de données ou l'instantané de base de données est endommagé, le rétablissement à partir d'un instantané sera probablement impossible. En outre, même lorsque le rétablissement est possible, il est peu probable qu'il permette de corriger le problème en cas de corruption. Par conséquent, effectuer des sauvegardes régulières et tester votre plan de restauration sont essentiels pour la protection d'une base de données. Pour plus d’informations, consultez Sauvegarder et restaurer des bases de données SQL Server.

    Remarque

    Si vous devez restaurer la base de données source jusqu'à la date et l'heure où vous avez créé un instantané de base de données, utilisez le mode de récupération complète et implémentez une stratégie de sauvegarde qui vous permette une telle opération.

  • La base de données source d'origine est remplacée par la base de données rétablie, donc toutes les mises à jour de la base de données depuis la création de l'instantané sont perdues.

  • L'opération de retour à un état antérieur remplace également l'ancien fichier journal puis le reconstruit. De ce fait, vous ne pouvez plus restaurer la base de données par progression jusqu'à l'erreur de l'utilisateur. Aussi, nous vous recommandons de sauvegarder le journal avant de rétablir une base de données.

    Remarque

    Bien que vous ne puissiez pas restaurer le journal original pour restaurer la base de données par progression, les informations qu'il contient peuvent être utiles pour reconstituer les données perdues.

  • Le retour à un état antérieur brise la chaîne de sauvegarde du journal. Aussi, avant d'effectuer les sauvegardes du journal de la base de données ainsi récupérée, vous devez d'abord effectuer une sauvegarde de base de données complète ou une sauvegarde de fichiers. Nous recommandons une sauvegarde de base de données complète.

  • Au cours d'une opération de retour à un état antérieur, l'instantané et la base de données source sont tous deux inaccessibles. La base de données source et l’instantané sont tous deux marqués « In restore ». En cas d'erreur pendant cette opération, lorsque la base de données redémarrera, la restauration tentera de se terminer.

  • Les métadonnées d'une base de données ainsi restituée sont les mêmes qu'au moment de l'instantané.

  • Le rétablissement supprime tous les catalogues de texte intégral.

Prérequis

Vérifiez que la base de données source et l'instantané de base de données remplissent les conditions préalables suivantes :

Sécurité

autorisations

Tout utilisateur qui dispose des autorisations RESTORE DATABASE sur la base de données source peut la rétablir dans l'état qui était le sien au moment où l'instantané a été créé.

Comment rétablir une base de données dans l'état d'un instantané de base de données (à l'aide de Transact-SQL)

Pour rétablir une base de données dans l'état d'un instantané de base de données

Remarque

Pour obtenir un exemple de cette procédure, consultez Exemples (Transact-SQL)plus loin dans cette section.

  1. Identifiez l'instantané de base de données auquel vous souhaitez restaurer la base de données. Vous pouvez afficher les instantanés sur une base de données dans SQL Server Management Studio (voir Afficher une capture instantanée de base de données (SQL Server)). En outre, vous pouvez identifier la base de données source d’un affichage à partir de la colonne source_database_id de l’affichage catalogue sys.databases (Transact-SQL).

  2. Supprimez tous les autres instantanés de base de données.

    Pour plus d’informations sur le dépôt d’instantanés, consultez Déposer une capture instantanée de base de données (Transact-SQL). Si la base de données utilise le mode de restauration complète, vous devez sauvegarder le journal avant de rétablir la base de données. Pour plus d’informations, consultez Sauvegarder un journal des transactions (SQL Server) ou Sauvegarder le journal des transactions lorsque la base de données est endommagée (SQL Server).

  3. Effectuez l'opération de restauration.

    Une opération de restauration nécessite des autorisations RESTORE DATABASE sur la base de données source. Pour restaurer la base de données, utilisez l'instruction Transact-SQL suivante :

    RESTORE DATABASE nom_base_de_données FROM DATABASE_SNAPSHOT =nom_instantané_base_de_données

    nom_base_de_données est la base de données source et nom_instantané_base_de_données le nom de l’instantané auquel vous souhaitez rétablir la base de données. Notez que dans cette instruction, vous devez spécifier un nom d'instantané et non un périphérique de sauvegarde.

    Pour plus d’informations, consultez RESTORE (Transact-SQL).

    Remarque

    Pendant l'opération de restauration, l'instantané et la base de données source ne sont pas disponibles. La base de données source et l’instantané sont tous deux marqués comme "In restore." Si une erreur se produit pendant l’opération de rétablissement, il essaiera de terminer le rétablissement lorsque la base de données redémarrera.

  4. Si le propriétaire de la base de données a changé depuis la création de l'instantané de base de données, il convient de mettre à jour le propriétaire de la base de données restaurée.

    Remarque

    La base de données restaurée conserve les autorisations et la configuration (par exemple, le propriétaire de la base de données et le mode de récupération) de l'instantané de base de données.

  5. Démarrez la base de données.

  6. En option, sauvegardez la base de données restaurée, notamment si elle utilise le mode de récupération complète (ou utilisant les journaux de transactions). Pour sauvegarder une base de données, consultez Créer une sauvegarde complète de base de données (SQL Server).

Exemples (Transact-SQL)

Cette section présente les exemples suivants de rétablissement d'une base de données à un état antérieur par le biais d'un instantané de base de données :

A. Rétablissement d'un instantané sur la base de données AdventureWorks

L'exemple suivant part du principe qu'un seul instantané existe actuellement sur la base de données AdventureWorks2022 . Pour l’exemple qui crée l’instantané auquel la base de données est ici rétablie, consultez Créer un instantané de base de données (Transact-SQL).

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. Rétablissement d'un instantané sur la base de données Sales (Ventes)

Cet exemple suppose que deux instantanés existent actuellement sur la base de données Sales : sales_snapshot0600 et sales_snapshot1200. Cet exemple supprime l'instantané le plus ancien et rétablit la base de données au moyen de l'instantané le plus récent.

Pour voir le code servant à créer la base de données et les instantanés donnés en exemple ici, consultez :

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT database_id FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

Tâches associées

Voir aussi

Instantanés de base de données (SQL Server)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)
Mise en miroir de base de données et Captures instantanées de base de données (SQL Server)