Cette page traite de certaines causes connues de corruption des données, des techniques d'anticipation et de prévention du problème, et enfin de quelques méthodes de récupération si cela arrive à vos fichiers. Cependant, la meilleure protection consiste à conserver fréquemment des sauvegardes complètes de toutes les données critiques.
Causes de la corruption des données
La corruption des données peut provenir de plusieurs causes. Ce fait, en soi, complique considérablement le problème de l'empêcher de se produire du tout, car lorsque le problème survient, il est souvent presque impossible de déterminer le coupable. Les cas décrits dans cette section proviennent d'un échantillon de questions d'assistance apparaissant dans le forum d'assistance de BTI sur CompuServe. Le premier, en particulier, fournit une litanie de causes fréquentes par rapport auxquelles vous pouvez vérifier votre situation si vous trouvez des fichiers tournant mal sans raison connue.
Le matériel peut causer des problèmes
Lorsqu'un système subit une corruption de données, il tombe généralement dans l'un des deux extrêmes. Soit c'est le résultat d'une seule catastrophe connue, comme un incendie, un tremblement de terre ou une panne de courant à un moment critique pendant le fonctionnement du système, soit c'est une chose insidieuse semblant s'infiltrer et s'aggraver avec le temps.
La première situation est relativement facile à diagnostiquer et à gérer, bien que le problème de récupération de données en résultant puisse être immense. Il n'est pas question de prévention lorsqu'il s'agit d'événements comme des tremblements de terre, même s'il est possible d'améliorer la protection contre les incendies, et une bonne alimentation sans interruption est une protection presque totale contre les pannes de courant.
La deuxième situation, cependant, fait vieillir les administrateurs système avant l'heure. Voici un incident typique de ce type de corruption de données, ainsi que les réponses des personnes du support technique BIT et d'un administrateur système expérimenté.
«J'ai un problème continu», a écrit l'administrateur système, «avec l'un de mes fichiers Btrieve étant corrompu. C'est un fichier assez volumineux de 150 000 enregistrements et il est fortement utilisé par un certain nombre d'utilisateurs. La corruption apparaît comme des erreurs avec le code d'état 2. Quelqu'un peut-il me dire les causes de la corruption de fichiers Btrieve et comment cela peut être évité ? J'utilise la version 6.10 en réseau et la version 6.10e demande.»
«Beaucoup de choses peuvent conduire à un code d'état 2», a répondu le support aux développeurs de BTI. «Si les fichiers de données Btrieve sont marqués partageables, par exemple, cela pourrait potentiellement provoquer un état 2. Si une carte d'interface réseau, en particulier la carte LAN, est défectueuse ou utilise un ancien pilote, cela peut entraîner l'échec d'un fichier de données Btrieve va mal. Vous devrez nous donner plus de détails sur l'environnement dans lequel vous vous trouvez, la fréquence à laquelle vous rencontrez l'erreur et sur le nombre de sites.»
Les réponses étaient un peu plus précise et souligne l'importance d'une attention particulière aux détails. On a écrit : «Tout d'abord, assurez-vous d'avoir le plus récent de tout. Le Btrieve actuel est 6.10c. Le serveur de fichiers est-il en panne ? Vous n'avez pas dit quelle version de Netware vous utilisez, mais des correctifs existent déjà pour NetWare 3.12. Nous avons eu un serveur nous ayant donné des ajustements avec 6.10c. Souvent, un fichier en cours de reconstruction (pour récupérer de la corruption) aurait une erreur 2 avant que la reconstruction puisse se terminer ! Comme il s'agissait d'un fichier volumineux, nos utilisateurs n'étaient pas satisfaits. Le serveur fonctionnait depuis longtemps, sans de tels problèmes, en utilisant la version 5.15 NLM. Il s'agissait d'un ordinateur à bus ISA avec 16 Mo de RAM et un unité de disque dur IDE récemment installé de 1 Go. J'étais fermement opposé à l'installation d'un unité de disque dur IDE, mais c'était un vieille unité de disque, et le problème a disparu. Les utilisateurs sont satisfaits maintenant, et le serveur est beaucoup plus rapide que jamais. Mais le gourou (récemment licencié) a juré que je gaspillais de l'argent sur cette unité de disque SCSI.»
Une morale pouvant en être tirée est de toujours vérifier les effets de toute modification apportée au matériel ou au logiciel, et de voir s'il existe une corrélation entre ces changements et le début de la corruption des données. Souvent, c'est tout ce qui est nécessaire pour résoudre le problème.
Un module d'interface incompatible corrompt les données
Ce n'est pas toujours le matériel étant à blâmer pour la corruption. Parfois, c'est un problème de logiciel. Si cela se trouve dans certains des outils fournis par BTI, ils s'empressent de corriger les choses. Considérez cette plainte reçue d'un développeur travaillant exclusivement avec le langage Basic :
«J'utilise Btrieve pour DOS, version 5.10a. Depuis que j'ai changé mes compilateurs Basic de QB45 à VBDOS 1.0, j'obtiens une corruption aléatoire des données de pages variables. J'obtiens des caractères bas et des caractères étendus. Je recherche la chaîne de caractères pour eux, juste avant l'appel Btrieve, et je ne réussis pas à les attraper. Leur problème est rare, mais assez fréquent pour que ce soit un vrai problème. J'ai téléchargé les correctifs pour BTRIEVE.EXE. Existe-t-il un correctif pour l'interface .OBJ ?»
La réponse du support aux développeurs BIT est revenue en quelques heures : «Assurez-vous que vous créez un lien dans le fichier BC7RBTRV.OBJ daté du 26/11/90 faisant 810 octets. Le fichier du même nom ayant été publié avec Btrieve pour DOS La v5.10a (datée du 13/04/90, 869 octets) contient un bogue pouvant être à l'origine de votre problème.»
C'était bien la cause du problème, et lorsque le développeur n'a pas pu localiser une copie de la bonne version (car la version 5 n'est plus la version actuelle), le Developer Support lui a envoyé le fichier par courriel. La plupart des opérations de soutien des autres entreprises pourraient tirer des leçons de cet événement.
Méfiez-vous de la version 6.10a de NLM ; Utilisez 6.10c à la place
Plusieurs sites ont signalé des retours de code d'état de 2 et 4 lorsque plusieurs utilisateurs tentent de récupérer simultanément des données à partir de fichiers écrits sous la version 5.1 ou antérieure, mais qui sont désormais récupérés par le moteur de serveur version 6.10 fourni par Novell. Le problème a finalement été attribué à des erreurs dans le moteur de la version 6.10a. La version 6.10c est la version actuelle et devrait toujours être celle utilisée.
Le NLM 6.10a provoque fréquemment ce problème, selon le rapport d'un utilisateur, lors de l'insertion d'un enregistrement dans une transaction.
Le problème peut être grave si votre site passe à Netware 3.12 car la mauvaise version 6.10a est fournie avec NW3.12. Vous pouvez télécharger la version correcte à partir du forum BTRIEVE de CompuServe sans autre frais que le temps de connexion. Il semble être exempt de tels problèmes.
La prévention est le meilleur remède
L'un des meilleurs moyens de lutter contre la corruption des données est de l'empêcher autant que possible. Si cela échoue, la meilleure chose à faire est de le détecter le plus rapidement possible après que la corruption se soit produite afin qu'elle puisse être corrigée avant que ses effets ne se propagent dans tout le système d'information.
Emballez les fichiers une fois par an
Un utilisateur de longue date de Btrieve propose cette technique de prévention des problèmes, qui, selon lui, lui a bien servi : «Une fois par an, en tant que maintenance, j'exécute BUTIL-SAVE sur mes principaux fichiers Btrieve. Ensuite, je les initialise et lance BUTIL-LOAD pour remettre les données. Cela réorganise les enregistrements par la première clef primaire et élimine tout espace inutilisé des enregistrements supprimés. Je considère cette maintenance de fin d'année.»
D'autres utilitaires peuvent remplacer les deux options BUTIL ; BTFILER, en particulier, inclut la possibilité de faire tout le travail en une seule passe, ce qui pourrait fournir des gains de temps significatifs pour les fichiers volumineux.
Détecter la corruption dès que possible
Un autre utilisateur pensait à l'avenir lorsqu'il a posé des questions sur la disponibilité des utilitaires pouvant aider à détecter la corruption immédiatement après qu'elle se soit produite.
«Je suis curieux», a écrit cet administrateur système, «si quelqu'un connaît des utilitaires disponibles pouvant analyser les bases de données Btrieve et m'avertir en cas de corruption. J'ai un grand nombre de bases de données Btrieve réparties sur trois serveurs. Lorsqu'un serveur tombe en panne, j'ai besoin de savoir immédiatement si une corruption a eu lieu, avant de laisser les utilisateurs revenir dans le système. J'utilise le Client/Server Btrieve version 6.10, et tous les utilitaires que j'ai vus sont pour la version 5.x. Merci à l'avance.»
Un autre utilisateur a répondu : «Mon BTFILER fera exactement cela. Les résultats peuvent être enregistrés dans un fichier. Les tests d'index sont assez complets. BTFILER est un partagiciel, et si vous l'aimez, il peut être enregistré via le forum SWREG sur CompuServe.»
Réparer les données corrompues
Peu importe comment cela se produit, ni avec quelle diligence vous vous efforcez de l'empêcher, la probabilité que vous ayez à essayer de récupérer une base de données corrompue au moins une fois dans votre carrière d'administrateur système est très proche de la certitude. Selon la nature des dommages causés aux fichiers et les techniques par lesquelles vous tentez la réparation, vous pourrez peut-être conserver toutes les données, ou vous ne pourrez peut-être pas en sauvegarder aucune. Le résultat moyen se situe quelque part entre ces extrêmes, mais plusieurs fois, les données perdues peuvent être maintenues à un faible pourcentage.
Si les dommages impliquent des dommages réels au système de fichiers DOS ou NetWare sous-jacent, tels que le brouillage de la FAT (File Allocation Table) du DOS, vos chances de récupérer des données sont minces. Si, cependant, la structure du fichier reste intacte et que les dommages n'affectent que le fichier Btrieve, il est probable que la perte sera faible et qu'il est tout à fait possible que vous puissiez obtenir une récupération complète avec les outils appropriés.
Étant donné que bien plus de la moitié de l'espace dans la plupart des fichiers Btrieve va aux pages d'index B-tree, il y a plus de chances que la corruption aléatoire de seulement quelques secteurs d'un fichier ait endommagé uniquement les informations d'index. De tels dommages à l'index peuvent rendre le fichier illisible par Btrieve lui-même (au moins par le biais de l'index endommagé). Cependant, un certain nombre d'utilitaires peuvent lire les données et reconstruire les enregistrements sous une forme que vous pouvez utiliser pour créer un nouveau fichier. Vous pourriez également être en mesure de récupérer tous les enregistrements de données en utilisant une autre clef, ou vous pourriez écrire un programme spécial en utilisant uniquement les appels Get First, Get Next, Get Last et Get Previous, pour copier les données dans un nouveau fichier.
Utiliser BUTIL pour récupérer
L'un des utilitaires capables de récupérer les données d'un fichier Btrieve endommagé est fourni gratuitement avec tous les produits Btrieve. C'est BUTIL (ou l'exécutable correspondant pour les plates-formes autres que DOS), incluant un commutateur d'option -RECOVER, lorsque vous exécutez BUTIL -RECOVER, le programme tente d'abord d'accéder au premier enregistrement de données physiques dans le fichier, en utilisant Get First pour éviter toute dépendance à l'index. Il écrit ensuite le contenu de cet enregistrement dans un fichier de sortie au format utilisé par les commutateurs d'options SAVE et RESTORE, et appelle Get Next pour récupérer l'enregistrement suivant. Tant qu'elle réussit, cette boucle continue jusqu'à atteindre la fin du fichier, écrivant tour à tour chaque enregistrement dans le fichier de sortie, puis récupérant le suivant.
Si la récupération se heurte à une erreur avant d'atteindre la fin du fichier, le programme note l'adresse physique de l'enregistrement ayant donné l'erreur. Il utilise ensuite Get Last pour accéder au dernier enregistrement du fichier, l'écrit dans la sortie et sauvegarde un enregistrement au moyen de la fonction Get Previous. En cas de succès, il écrit également cet enregistrement et sauvegarde à nouveau. Cette boucle se poursuit jusqu'à ce qu'elle atteigne l'enregistrement ayant provoqué l'erreur lors de la boucle d'avancement, ou jusqu'à ce qu'elle rencontre une autre erreur.
Lorsque la deuxième boucle se termine, BUTIL arrête de chercher plus de données. Si une seule page du fichier est endommagée, cette stratégie est efficace et récupère la plupart des enregistrements du fichier. Cependant, si les dommages sont plus étendus, BUTIL peut ne sauver que quelques enregistrements de la situation. Dans au moins un cas, seuls 6 des 8 000 enregistrements initialement contenus dans le fichier ont pu être sauvegardés.
Comment contourner l'indexation
Il est possible de contourner l'indexation d'une manière différente n'utilisant pas du tout un moteur Btrieve. Le programme DATADUMP fait exactement cela, et pourrait être capable de faire une récupération de données assez efficace. Fournir une telle capacité était la principale raison d'ajouter à DATADUMP la possibilité d'écrire un fichier de sortie au format BUTIL -SAVE en plus de simplement afficher des données sur le CRT.
Les fonctions Get de Btrieve et le programme DATADUMP utilisent le fait que chaque page de données a le bit supérieur de son mot de comptage d'utilisation défini sur 1 pour faire la distinction entre les pages de données et les autres types de pages dans le fichier. La plupart du temps, cela fonctionne parfaitement, mais il est possible qu'un fichier subisse une sorte de dommage faisant apparaître un index ou une page PAT (selon ce test) comme une page de données.
Si cela se produisait, le programme de récupération générerait de nombreux enregistrements de "données" erronés. Cependant, les seuls cas où cela créerait de sérieux problèmes seraient lorsque le fichier entreposerait à l'origine des données dans des formats compressés ou de longueur variable. Tous ces formats intègrent des pointeurs vers des données dans les enregistrements), et tenter de suivre des "pointeurs" invalides dans de telles pages de données erronées pourrait entraîner le blocage du programme de récupération.
Les chances sont extrêmement grandes qu'un fichier endommagé de cette manière ne puisse être récupéré par aucune méthode. Cependant, si les données sont suffisamment importantes et irremplaçables, il peut être utile d'utiliser un éditeur de fichiers binaires (tels que ceux fournis dans Norton Utilities ou PC Tools) pour localiser les pages spécifiques générant ces enregistrements de données erronés et modifier manuellement le mot de compte d'utilisation pour supprimer son bit indicateur "ce sont des données". Assurez-vous d'avoir des copies de sauvegarde du fichier, même dans son état endommagé, si vous essayez cette route. Il peut être nécessaire de restaurer le fichier plusieurs fois lors de la tentative de modification des bits indicateurs de données, en particulier si des pages de données apparemment correctes pointent ensuite vers des pages endommagées empêchant la poursuite du programme de récupération.
Btrieve et les sauvegardes
Bien sûr, la meilleure façon de récupérer d'un cas de corruption de fichiers est de loin de simplement restaurer le système à partir d'un ensemble actuel (et précis) de fichiers de sauvegarde. Malheureusement, le maintien d'ensembles de données de sauvegarde précis n'est pas toujours possible dans le monde réel du fonctionnement du système 24 heures sur 24 et des réseaux multi-utilisateurs.
La plupart des programmes de sauvegarde refusent de faire une copie de sauvegarde de tout fichier en cours d'utilisation. Cela, en soi, peut vous empêcher de conserver des copies de sauvegarde complètement à jour. Alors que d'autres programmes de sauvegarde et fonctionnalités réseau existent pour vous aider à surmonter le problème du "fichier en cours d'utilisation", ces solutions apportent avec elles une toute nouvelle série de problèmes. Ces nouveaux problèmes incluent la possibilité d'induire une corruption de fichiers en cas de plantage du serveur pendant l'opération de sauvegarde.
Fichiers toujours en utilisation
Outre le problème du "fichier en cours d'utilisation", les fichiers de données extrêmement volumineux ajoutent une dimension supplémentaire de difficulté simplement en raison du temps nécessaire pour effectuer une sauvegarde complète. Par exemple, un fonctionnement 24 heures sur 24 utilisant des fichiers dont la taille est de l'ordre de plusieurs gigaoctets, mettant à jour des dizaines de milliers d'enregistrements chaque jour, prend un temps appréciable à sauvegarder, même avec les unités de bande magnétiques les plus rapides actuellement disponibles.
Les solutions possibles incluent l'utilisation de l'approche de sauvegarde incrémentielle, en sauvegardant uniquement les enregistrements ayant été modifiés. Ceci, cependant, pourrait impliquer presque autant d'activité qu'une sauvegarde totale en raison de la façon dont Btrieve utilise ses pages de fichiers. Une autre solution pourrait être de prendre un instantané de tous les enregistrements modifiés, éventuellement à la fin de chaque transaction. Une autre technique peut consister à activer la fonction de journalisation de Btrieve, puis à sauvegarder le fichier journal afin qu'il soit possible de reconstruire toute modification du fichier si nécessaire.
Lorsque cette question s'est posée récemment, impliquant un fichier aussi volumineux et un fonctionnement 24 heures sur 24, plusieurs administrateurs système expérimentés ont émis des avis et des recommandations.
«Ma première pensée serait le mode continu», a déclaré un expert, faisant référence à une fonctionnalité disponible dans la version 6.0 de Btrieve et les moteurs basés sur serveur ultérieurs. «Vos mises à jour seront plus lentes pendant la sauvegarde, mais ensuite tout sera plus lent pendant la sauvegarde. Une chose demande de la prudence. Actuellement (version 6.10c), si le serveur plante alors que vous êtes en mode continu, le fichier de données sera corrompu dès que NetWare annule les transactions. La prochaine version de Btrieve NLM corrigera ce problème.»
«Une autre chose», a poursuivi l'expert, «serait d'activer la journalisation et de sauvegarder le fichier journal. Vous devrez arrêter l'opération de temps en temps, sauvegarder le fichier de données réelles et effacer le fichier journal. Il y a un problème avec l'utilisation du mode continu et l'enregistrement simultané. Sinon, vous pouvez passer en mode continu pour effectuer cette sauvegarde, disons une fois par semaine, et simplement sauvegarder le fichier journal quotidiennement.»
Un autre utilisateur a décrit comment il a résolu un problème similaire pour un client hospitalier nécessitant un fonctionnement 24 heures sur 24 :
«J'utilise mon utilitaire BTUTIL,» a écrit celui-ci, «pour faire un -XSAVE des fichiers pendant qu'ils sont en cours d'utilisation. Le problème avec cela est que vous n'avez pas d'instantané d'un moment précis dans le temps. Ce n'est pas un problème pour moi, puisque les enregistrements sont structurés de telle manière qu'il est nécessaire de procéder à des transactions de mise à jour multi-enregistrements (c'est-à-dire des enregistrements où l'un n'aura aucun sens sans l'autre), à un dossier patient) peut facilement être récupéré à partir d'autres sources. De plus, l'espace n'est pas un problème. Le -XSAVE enregistre les données sur un autre serveur dans un bâtiment différent, pas sur bande magnétique. Je n'ai pas eu besoin de faire un -XLOAD sauf lors des tests, mais je suis sûr que je pourrais récupérer plus de 100 mégaoctets d'informations en très peu de temps. Les fichiers de plusieurs gigaoctets seraient une autre histoire, mais la sauvegarde sur bande serait également longue.»
Un autre développeur a suggéré que le pourrait résoudre ce problème en modifiant l'application pour écrire des doublons de toutes les modifications sur un serveur séparé pouvant être fermé, sauvegardé et purgé périodiquement. «Ensuite», a-t-il écrit, «il vous suffirait d'écrire une routine de restauration appliquant ces modifications à votre base de données principale».
Utilisation de la sauvegarde en mode continu
Le fonctionnement en mode continu auquel l'utilisateur précédent fait référence offre une solution au problème de sauvegarde, si vous exécutez un système Novell NetWare. Cependant, son utilisation avec les moteurs de serveur Btrieve version 6.10x implique un certain nombre de problèmes connus.
Dans la version 6.10, celle fournie par Novell, la fonctionnalité de fonctionnement continu utilise les fichiers fragmentés de NetWare, ce qui peut créer des problèmes si le serveur lui-même tombe en panne. Novell ne prévoit pas de résoudre ce problème de sitôt. Par conséquent, BTI introduit une nouvelle méthode avec la sortie de Btrieve 6.15 (ce qui aurait dû arriver au moment où vous lisez ceci). La nouvelle méthode évite l'utilisation de fichiers clairsemés et est également indépendante de la plate-forme. Cela fonctionne pour le produit NT, et d'autres non encore annoncés.
Le fonctionnement en mode continu automatique ne peut pas être démarré à partir d'une sauvegarde basée sur un poste de travail. Il doit initier au serveur. Cependant, il fonctionne aussi bien avec les fichiers créés dans le format d'origine qu'avec ceux du nouveau format.