Partager via


Meilleures pratiques pour la récupération d'une base de données jusqu'à un point de récupération spécifique

Icône présentant un disque de base de données bleue Cette rubrique s'applique uniquement aux bases de données utilisant le mode de restauration complète ou de récupération utilisant les journaux de transactions.

Cette rubrique traite des meilleures pratiques relatives à la restauration d'une base de données jusqu'à un point de récupération spécifique.

Utilisation de STANDBY pour retrouver un moment inconnu dans le temps

Il arrive parfois que vous souhaitiez restaurer une base de données jusqu'à un point de récupération spécifique, mais que vous ignoriez l'heure cible, le NSE ou la transaction marquée éventuels. Une solution consiste à restaurer par progression de manière incrémentielle les fichiers principaux, et, le cas échéant, les autres fichiers de données en spécifiant WITH STANDBY **=**standby_file_name au lieu de WITH RECOVERY. À l'aide de l'option STANDBY, vous pouvez récupérer la base de données pour un accès en lecture seule. Vous pouvez ainsi lire la base de données et rechercher les informations du point spécifique que vous souhaitez. Le fichier d'attente vous permet d'annuler l'impact du processus de récupération au cas où la base de données est restaurée par progression au delà du point spécifique cible. Si ce point n'a pas encore été atteint par la base de données, vous pouvez restaurer des sauvegardes de journaux successives à l'aide de WITH STANDBY en spécifiant le même fichier d'attente dans chaque instruction de restauration.

Une fois le point de récupération cible identifié, vous pouvez de nouveau restaurer par progression jusqu'à ce point spécifique. Lorsque vous atteignez ainsi le point cible dans le temps, restaurez la base de données partielle à l'aide de l'option RECOVERY. Les fichiers restants, le cas échéant, peuvent être restaurés et récupérés de façon à être cohérents avec la base de données. Au terme de la restauration de la dernière restauration complète du journal, restaurez la première sauvegarde du journal après le point de récupération cible.

Pour plus d'informations sur l'option STANDBY, consultez Arguments RESTORE (Transact-SQL).

Spécification du point d'arrêt suffisamment tôt dans la séquence de restauration

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 la restauration. Plus vous fournissez d'informations sur la finalité de la séquence, moins vous risquez de rencontrer des erreurs pouvant vous forcer à tout recommencer. Dans le cas de la récupération dans le temps, le moteur de base de données SQL Server utilise les informations indiquées au début de (ou pendant) la séquence de restauration afin d'identifier le but ponctuel de cette restauration. Si vous patientez trop longtemps dans la séquence, cette dernière échoue. Vous devez donc fournir les informations suffisamment tôt dans la séquence de restauration aux moments opportuns afin de vous assurer que vous ne dépassez pas le point de restauration voulu dans le temps.

Si vous comptez vous arrêter à un point de récupération précis, vous devez faire connaître votre intention dans chaque instruction RESTORE LOG (en utilisant les options STOPAT, STOPBEFOREMARK ou STOPATMARK) en même temps que l'option RECOVERY. Lorsque les options RECOVERY et STOPAT sont utilisées conjointement, si la sauvegarde du journal des transactions ne contient pas l'heure demandée (par exemple, si l'heure spécifiée dépasse la dernière heure figurant dans le journal des transactions), un avertissement est émis et la base de données n'est pas restaurée. Si le point de récupération est atteint, la base de données est restaurée, et une tentative de restaurer une autre sauvegarde de journal échoue. L'utilisation conjointe des options RECOVERY et STOPAT lorsque vous restaurez une sauvegarde de journal permet d'éviter le dépassement du point d'arrêt par une restauration de journal.

Exemple : restauration dans le temps

Dans l'exemple suivant, la séquence de restauration déclare son intention de s'arrêter à un moment particulier lorsqu'elle applique la première sauvegarde de journal. Dans cet exemple, le point d'arrêt dans le temps se produit dans la première sauvegarde de journal après la sauvegarde différentielle :

RESTORE DATABASE database_name FROM full_backup 
    WITH NORECOVERY;
RESTORE DATABASE database_name FROM full_differential_backup 
    WITH NORECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;
RESTORE LOG database_name FROM log_backup 
    WITH STOPAT = time, RECOVERY;

La réussite d'une restauration de journal donnée dépend si l'instant (time) se trouve dans l'intervalle capturé par la sauvegarde de journal comme cela est décrit dans le tableau suivant.

Relation entre l'instant (time) et l'intervalle capturé par la sauvegarde de fichier journal : Effet

time se trouve avant l'intervalle.

La restauration échoue alors, n'entraînant aucune récupération par progression.

time se trouve dans l'intervalle.

La dernière restauration se passe correctement et la base de données est récupérée.

time se trouve après l'intervalle.

La restauration par progression se passe correctement mais la base de données n'est pas récupérée car l'instant spécifié par time n'a pas encore été atteint.

Déclaration du point d'arrêt dans chaque instruction RESTORE ultérieure

Un point d'arrêt est spécifique à l'instruction qui spécifie l'option STOPAT, STOPBEFOREMARK, ou STOPATMARK. Si vous omettez cette option d'une instruction RESTORE, la sauvegarde complète est restaurée.

Au cours d'une séquence de restauration dans le temps, vous pouvez modifier le point de récupération en spécifiant une nouvelle valeur pour time à condition que la base de données n'a pas déjà dépassé le nouvel instant time.

ms191468.note(fr-fr,SQL.90).gifRemarque :
Les options STOPBEFOREMARK et STOPATMARK possèdent deux paramètres, mark_name et lsn_number. Le paramètre mark_name, qui identifie une marque de transaction dans une sauvegarde de journal, n'est pris en charge que dans les instructions RESTORE LOG. Le paramètre lsn_number, qui spécifie un numéro de séquence d'enregistrement, est pris en charge dans les instructions RESTORE DATABASE et RESTORE LOG.

Voir aussi

Concepts

Application de sauvegardes du journal des transactions
Récupération d'un numéro de séquence d'enregistrement (NSE)
Récupération jusqu'à une transaction marquée

Autres ressources

RESTORE (Transact-SQL)
Restauration d'une base de données vers un point dans une sauvegarde

Aide et Informations

Assistance sur SQL Server 2005