Dump de base de données, isolation et consistance

  • Sharebar

Que se passe-t-il si vous lancez un dump de votre base de données pendant que des modifications sont effectuées sur cette base de données ?

Potentiellement cela peut générer un dump inconsistant qui ne permettra pas de restaurer votre base de données.

Exemple :

une table contient 3 colonnes ID, NAME, ID_AMI

ID_AMI est une clé étrangère

la table contient les lignes suivantes:

ID | NAME | ID_AMI |
1 | Pierre | 2000 |

2000 | Marc | |

Les opérations suivantes sont effectuées dans l’ordre:

- la ligne 1 est ajoutée au dump
- …
- la ligne 500 est ajoutée au dump
- un transaction X est démarrée
- X : update de la ligne Pierre, ID_AMI devient NULL
- X : la ligne Marc est supprimée
- la transaction X est commitée
- la ligne 501 est ajoutée au dump
- …
- la ligne 1999 est ajoutée
- le dump se termine

Ce scénario peut-il se produire ?

Avec Postgres (pg_dump) cela ne peut pas arriver, le dump est effectué avec le niveau d’isolation maximal (Serializable), ce qui signifie que le dump contiendra une image le base de donnée telle qu’elle était au démarrage du dump.

Avec MySql (mysqldump) il faut prendre des précautions qui dépendent des types de tables que vous utilisez. Sans options particulière vous vous exposez à de gros problèmes. Avec INNODB, vous pourrez utiliser l’option –single-transaction.

Pour les autres bases de données, lisez le manuel et consultez votre DBA.

This entry was posted in Divers and tagged , , . Bookmark the permalink.

Leave a Reply