Vérification de l'intégrité du fichier de données de la base de données PostgreSQL

12

Lors de l'exécution d'un système de base de données PostgreSQL, comment puis-je savoir que ma base de données dans son ensemble est 100% intègre? Fondamentalement, comment savoir si mes fichiers et pages de données sont tous 100% bons sans corruption?

Dans le monde Microsoft SQL Server, il existe une commande que vous pouvez exécuter DBCC CHECKDB qui vous indiquera s'il y a des problèmes. Voici un lien si vous souhaitez en savoir plus sur la commande. DBCC CHECKDB (Transact-SQL)

Je suis une personne soucieuse d'intégrité de la base de données paranoïaque (ce que toute personne qui travaille avec la base de données dans un rôle de type DBA devrait être) et ce genre de choses rend difficile pour moi de bien dormir la nuit. Un utilitaire comme celui-ci est un must! Les recherches sur Google ont trouvé quelques tentatives d'outils comme celui-ci et à mon avis, sauf si c'est un outil officiellement accepté par le projet PostgreSQL, je ne lui ferai pas confiance pour quelque chose d'aussi important.

Voici quelques liens vers des personnes qui posent des questions similaires avec ce que je considère comme aucune vraie réponse définitive. Et à mon avis, montre que PostgreSQL doit avoir en place certains outils qu'Oracle et Microsoft SQL Server semblent avoir.

Le premier lien est le plus intéressant que j'ai trouvé à ce sujet. Je pense qu'un commentaire sur l'article qui le résume probablement dit: "Postgres est assez boiteux lorsqu'il s'agit d'identifier la corruption de la base de données et de la réparer. La seule façon de le détecter est de vider la base de données ou de sélectionner * dans chaque table de la base de données . "

Comment PostgreSQL protège contre les écritures de page partielles et la corruption de données

Vérification de la corruption des données et des fichiers d'index - Dev Shed

Aide: ma table est corrompue!

PostgreSQL: clé primaire corrompue, table incohérente

Je crois qu'il y a une chance que 9.3 puisse avoir des fonctionnalités de vérification de la corruption. Il semble qu'il y ait un espoir de faire vérifier la vérification des fichiers de page si l'on le souhaite. Les choses semblent donc brillantes si vous envisagez d'utiliser ZFS et / ou une future version de Postgres avec sommation de vérification de page. https://commitfest.postgresql.org/action/patch_view?id=759

MISE À JOUR: 14-JAN-2012 - Il semble que l'utilisation d'un système de fichiers basé sur ZFS puisse détecter la corruption en vérifiant la somme de chaque bloc de données. Je vais devoir approfondir cela et voir s'il s'agit d'un moyen de contourner le problème pour bien dormir la nuit, sachant que les données de leur base de données ne sont pas silencieusement corrompues.

MISE À JOUR: 17-JAN-2012 - Comment trouver quels fichiers sont corrompus avec ZFS. http://docs.oracle.com/cd/E18752_01/html/819-5461/gbbwl.html#gbcuz

MISE À JOUR: 14-AVR-2014 9.3 a obtenu des sommes de contrôle de données. https://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3

Kuberchaun
la source
2
Par intégrité, je voulais dire l'intégrité des fichiers d'échange et autres. Type de contenu que vous ne voyez normalement que si vous écrivez une requête qui arrive sur une page corrompue. Par exemple, lorsqu'un lecteur de disque commence à tomber en panne, certaines données du plateau peuvent commencer à mal tourner. Comment verriez-vous cela?
Kuberchaun

Réponses:

8

PostgreSQL antérieur à 9.3 n'avait pas de somme de contrôle de bloc. La fonctionnalité a été ajoutée en 9.3 (longtemps après la publication de cette question).

Pour répondre à vos besoins, je développerais probablement ma propre somme de contrôle (déclencheurs?) - en travaillant sur les valeurs d'attribut, pas sur les pages de données.

filiprem
la source
4
Cela pourrait valoir la peine d'ajouter que depuis Postgres 9.3, vous pouvez éventuellement activer les sommes de contrôle
a_horse_with_no_name