Disons, pour SQLServer2008R2 et supérieur, avec des bases de données en mode de récupération complète.
J'ai toujours pensé :
Lorsqu'une transaction est validée (COMMIT), la transaction est écrite dans le journal des transactions dans la RAM.
Lorsqu'un CHECKPOINT se produit (après un certain temps et / ou certaines transactions et d'autres critères), les transactions entre le dernier CHECKPOINT et le courant sont écrites sur le disque.
Lorsqu'un journal de sauvegarde se produit, les données sont écrites dans le fichier MDF.
Ai-je raison? Certains de mes collègues disent que je me trompe, et il est difficile de trouver la bonne réponse, même avec le BOL.
Merci!
sql-server
Patator
la source
la source
Réponses:
Malheureusement, il y a un certain nombre d'erreurs dans les réponses à ce jour concernant le fonctionnement de COMMIT, alors j'en ajouterai une autre. Voir Comment cela fonctionne: Présentation d'E / S SQL Server de Bob Dorr pour plus de détails et les bases d'E / S SQL Server 2000 . Voici comment cela fonctionne:
Toutes les écritures (modifications) de données entièrement enregistrées se produisent dans l'ordre exactement suivant (voir Comprendre comment SQL Server exécute une requête: écriture de données ):
UN COMMIT fait ce qui suit
Un POINT DE CONTRÔLE fait ce qui suit (simplifié), voir Comment fonctionnent les points de contrôle et ce qui est enregistré :
Les écritures fonctionnent différemment pour les opérations journalisées de manière minimale, voir Opérations pouvant être journalisées de manière minimale . En gros, les opérations enregistrées de façon minimale agissent comme suit (simplifiées):
la source
Une transaction est écrite dans le journal des transactions avant même de changer la page ou les données comme demandé par la requête. C'est ce que l'on appelle la journalisation en écriture (WAL). Si SQL Server se bloque pendant la mise à jour d'une page en mémoire, WAL garantit que le moteur de base de données peut lire le journal des transactions et annuler la transaction. Il s'agit d'une propriété ACID d'un SGBDR.
Un point de contrôle vide les pages sales du tampon vers le disque. Il se comporte un peu différemment pour tempdb . Une page sale est une page qui a changé depuis sa lecture sur le disque. Ce processus de point de contrôle crée une marque dans le journal des transactions jusqu'au point où les transactions ont été validées. Après un échec, la récupération sait que toutes les transactions jusqu'à cette marque ont été validées. Vous pouvez émettre un point de contrôle manuellement avec une commande TSQL.
Non, lorsque le journal de sauvegarde se produit, SQL Server copie les informations du journal des transactions du fichier journal de la base de données sur le disque sur lequel vous écrivez la sauvegarde. Une opération de sauvegarde lit les données du disque et écrit des données sur le disque.
Je voudrais que vous lisiez les liens ci-dessous
Comprendre la journalisation et la récupération dans SQL Server Déjà signalé par Mark
Livre interne et de dépannage de SQL Server 2008
Architecture et gestion du journal des transactions
la source
Ci-dessous clarifiera les choses pour vous:
Faire référence à :
la source