Récupération jusqu'à une transaction marquée

Cette rubrique s'applique uniquement aux bases de données qui contiennent des transactions marquées et qui utilisent le mode de récupération complète ou le mode de récupération utilisant les journaux de transactions.

Pour plus d'informations sur les conditions requises pour la restauration à un point de récupération spécifique, consultez Restauration d'une base de données vers un point dans une sauvegarde.

SQL Server prend en charge l'insertion de marques nommées dans le journal des transactions afin de permettre la récupération jusqu'à une marque particulière. Les marques de journal sont transactionnelles et ne sont insérées que si leurs transactions associées sont validées. Par conséquent, des marques peuvent être liées à un travail spécifique, et vous pouvez récupérer jusqu'à un point incluant ou excluant ce travail.

Avant d'insérer des marques nommées dans le journal des transactions, prenez en compte les éléments suivants :

  • les marques de transaction occupant de l'espace dans le journal, utilisez-les seulement pour les transactions ayant un rôle significatif dans la stratégie de récupération de la base de données ;

  • Après la validation d'une transaction marquée, une ligne est insérée dans la table logmarkhistory de la base de données msdb.

  • si une transaction marquée s'étend à plusieurs bases de données sur le même serveur de bases de données ou sur différents serveurs, les marques doivent être enregistrées dans les journaux de toutes les bases de données concernées. Pour plus d'informations, consultez Utilisation des transactions marquées (mode de sauvegarde complète).

[!REMARQUE]

Pour plus d'informations sur la manière de marquer des transactions, consultez Utilisation des transactions marquées (mode de sauvegarde complète).

Syntaxe Transact-SQL permettant d'insérer des marques nommées dans un journal des transactions

Pour insérer des marques dans les journaux des transactions, utilisez l'instruction BEGIN TRANSACTION et la clause WITH MARK [description]. La marque a le même nom que la transaction. La description facultative est une description textuelle de la marque, pas le nom de la marque. Par exemple, le nom de la transaction et de la marque créé dans l'instruction BEGIN TRANSACTION suivante est Tx1 :

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'  

Le journal des transactions enregistre le nom de la marque (nom de la transaction), la description, la base de données, l'utilisateur, les informations de datetime, et le numéro séquentiel dans le journal (LSN, Log Sequence Number). Les informations de datetime sont utilisées conjointement avec le nom de la marque pour identifier celle-ci de façon univoque.

Pour des informations sur l'insertion d'une marque dans une transaction englobant plusieurs bases de données, consultez Utilisation des transactions marquées (mode de sauvegarde complète).

Syntaxe Transact-SQL permettant de réaliser une récupération jusqu'à une marque

Si vous visez une transaction marquée à l'aide d'une instruction RESTORE LOG, vous pouvez utiliser une des clauses suivantes pour vous arrêter à la marque ou juste avant celle-ci :

  • Utilisez la clause WITH STOPATMARK = '<mark_name>' pour spécifier que la transaction marquée est le point de récupération.

    L'option STOPATMARK effectue une restauration par progression jusqu'à la marque et inclut la transaction marquée dans cette restauration.

  • Utilisez la clause WITH STOPBEFOREMARK = '<mark_name>' pour spécifier que l'enregistrement de journal situé juste avant la marque est le point de récupération.

    L'option STOPBEFOREMARK effectue une restauration par progression jusqu'à la marque et exclut la transaction marquée de cette restauration.

Les options STOPATMARK et STOPBEFOREMARK prennent toutes les deux en charge une clause AFTER datetime facultative. Lorsqu'ils sont utilisés avec datetime, il n'est pas nécessaire que les noms de marque soient uniques.

Si la clause AFTER datetime est omise, la restauration par progression s'arrête à la première marque portant le nom spécifié. Si une valeur est spécifiée pour AFTER datetime, la récupération par progression s'arrête à la première marque portant le nom spécifié, à datetime exactement ou après.

[!REMARQUE]

Comme dans le cas de toute opération de restauration dans le temps, la récupération jusqu'à une marque n'est pas permise pendant les périodes où la base de données subit des opérations journalisées en bloc.

Pour effectuer une restauration jusqu'à une transaction marquée

Procédure : restaurer une base de données jusqu'à une transaction marquée (SQL Server Management Studio)

RESTORE (Transact-SQL)

Préparation des sauvegardes de journaux

Dans cet exemple, il serait parfaitement envisageable d'appliquer la stratégie de sauvegarde appropriée suivante aux bases de données :

  1. Utilisation du mode de récupération complète pour les deux bases de données.

  2. Création d'une sauvegarde complète de chaque base de données.

    Les bases de données peuvent être sauvegardées l'une après l'autre ou de façon simultanée.

  3. Préalablement à la sauvegarde du journal des transactions, le marquage d'une transaction qui s'exécute dans toutes les bases de données. Pour plus d'informations sur la création des transactions marquées, consultez Utilisation des transactions marquées (mode de sauvegarde complète).

  4. Sauvegarde du journal des transactions sur chaque base de données.

Récupération de la base de données jusqu'à une transaction marquée

Pour restaurer la sauvegarde

  1. Créez des sauvegardes de fichier journal après défaillance pour les bases de données non endommagées, si possible.

  2. Restaurez la sauvegarde complète de base de données la plus récente pour chaque base de données.

  3. Identifiez la transaction marquée la plus récente disponible dans toutes les sauvegardes des journaux de transactions. Ces informations sont stockées dans la table logmarkhistory de la base de données msdb de chaque serveur.

  4. Identifiez les sauvegardes de journaux de toutes les bases de données associées contenant cette marque.

  5. Restaurez chaque sauvegarde de journal en vous arrêtant à la transaction marquée.

  6. Récupérez chaque base de données.