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

 Cette rubrique s'applique uniquement aux bases de données SQL Server qui utilisent les modes de récupération complète ou utilisant les journaux de transactions. Elle traite des meilleures pratiques relatives à la restauration d'une base de données jusqu'à un point de récupération spécifique (une limite dans le temps, une transaction marquée ou un numéro séquentiel dans le journal (LSN)).

Utilisation de STANDBY pour retrouver un moment inconnu dans le temps

Il arrive parfois que vous souhaitiez restaurer une base de données à une limite dans le temps spécifique, mais vous ne connaissez pas exactement l'heure et la date qui conviennent le mieux à votre objectif de récupération (autrement dit, votre point de récupération optimal). Pour trouver ce point de récupération, vous pouvez utiliser RESTORE … WITH STANDBY **=**nom_fichier_annulation avec une clause STOPAT dont l'heure cible précède le point de récupération que vous recherchez. Une opération de restauration STANDBY récupère la base de données pour un accès en lecture seule, ce qui vous permet d'examiner la base de données pour rechercher votre point de récupération optimal.

À l'aide d'une série d'opérations de restauration STANDBY, vous pouvez restaurer par progression de façon incrémentielle le fichier de données primaire (et, éventuellement, d'autres fichiers de données) jusqu'à ce que vous trouviez votre point de récupération optimal. Après avoir identifié votre point de récupération optimal, vous pouvez à nouveau restaurer par progression la base de données, en spécifiant WITH STOPAT pour indiquer votre point de récupération optimal comme point cible dans le temps. Lorsque vous atteignez ce point cible dans le temps, restaurez la base de données partielle à l'aide de l'option WITH 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 restauration 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.

Important

Si une séquence de restauration partielle exclut tout groupe de fichiers FILESTREAM, la limite de restauration dans le temps n'est pas prise en charge. Vous pouvez forcer la séquence de restauration à continuer. Cependant, les groupes de fichiers FILESTREAM omis de l'instruction RESTORE ne peuvent jamais être restaurés. Pour forcer une limite de restauration dans le temps, spécifiez l'option CONTINUE_AFTER_ERROR avec l'option STOPAT, STOPATMARK ou STOPBEFOREMARKx, que vous devez également spécifier dans vos instructions RESTORE LOG suivantes. Si vous spécifiez l'option CONTINUE_AFTER_ERROR, la séquence de restauration partielle réussit et le groupe de fichiers FILESTREAM devient irrécupérable.

Exemple : restauration jusqu'à une date et heure

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.

Notes

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 séquentiel dans le journal, est pris en charge dans les instructions RESTORE DATABASE et RESTORE LOG.

Historique des modifications

Mise à jour du contenu

Correction de la section « Utilisation de STANDBY pour retrouver un moment inconnu dans le temps » pour clarifier que WITH STANDBY vous permet simplement d'annuler les effets du processus de récupération.