Architecture logique du journal des transactions
Le journal des transactions de SQL Server fonctionne de façon logique comme s'il s'agissait d'une chaîne d'enregistrements de journal. Chacun de ces enregistrements est identifié par un numéro séquentiel dans le journal (LSN). Chaque nouvel enregistrement est écrit à la fin logique du journal avec un LSN supérieur à celui de l'enregistrement qui le précède.
Lors de leur création, les enregistrements de journal sont stockés séquentiellement. Chacun d'eux contient l'ID de la transaction à laquelle il appartient. Pour chaque transaction, tous les enregistrements de journal associés sont reliés de façon individuelle dans une chaîne grâce aux pointeurs arrière qui accélèrent la restauration de la transaction.
Les enregistrements de journal relatifs aux modifications de données consignent soit l'opération logique effectuée, soit les images avant/après des données modifiées. L'image avant est une copie des données avant que l'opération n'ait été effectuée, tandis que l'image après est une copie des données après que l'opération a été effectuée.
Les étapes pour récupérer une opération dépendent du type de journal d'enregistrement :
Opération logique enregistrée
Si vous repositionnez l'opération logique avant, elle est effectuée à nouveau.
Si vous annulez l'opération logique, l'opération inverse est effectuée.
Image avant et après enregistrées
Si vous repositionnez l'opération avant, l'image après est appliquée.
Si vous annulez l'opération, l'image avant est appliquée.
De nombreux types d'opérations sont enregistrés dans le journal des transactions. Ces opérations comprennent :
Le début et la fin de chaque transaction.
Chaque modification de données (insertion, mise à jour ou suppression). Il s'agit des modifications apportées aux tables, y compris les tables système, par les procédures stockées système ou les instructions DDL (Data Definition Language).
Chaque allocation ou désallocation de page et d'étendue.
Création ou suppression d'une table ou d'un index.
Les opérations de restauration sont également consignées dans le journal. Chaque transaction réserve de l'espace dans le journal des transactions afin qu'il existe suffisamment d'espace journal pour prendre en charge une restauration déclenchée par une instruction de restauration explicite ou par la détection d'une erreur. Le volume d'espace réservé dépend des opérations effectuées dans la transaction, mais il est généralement égal au volume d'espace utilisé pour la journalisation de chaque opération. Cet espace réservé est libéré lorsque la transaction est terminée.
La section du fichier journal comprise entre le premier enregistrement de journal nécessaire à une restauration portant sur l'ensemble de la base de données et la fin du journal représente la partie active du journal, également appelée le journal actif. Il s'agit de la section du journal indispensable à une récupération complète de la base de données. Aucune partie de ce journal actif ne peut être tronquée.