Pourquoi devrais-je me préoccuper de la compression d'un fichier .mdb MS Access?

StackOverflow https://stackoverflow.com/questions/74484

  •  09-06-2019
  •  | 
  •  

Question

Nous distribuons une application utilisant un fichier .mdb MS Access. Quelqu'un a remarqué qu'après l'ouverture du fichier dans MS Access, la taille du fichier diminue beaucoup. Cela suggère que le fichier est un bon candidat pour le compactage, mais nous ne fournissons pas les moyens à nos utilisateurs de le faire.

Donc, ma question est la suivante: est-ce important? Est-ce que nous nous en soucions? Quelles sont les mauvaises choses qui peuvent arriver si nos utilisateurs ne compactent jamais la base de données?

Était-ce utile?

La solution

En plus de réduire la taille de votre base de données, il recalculera les index de vos tables et défragmentera vos tables, ce qui facilitera l'accès. Il détectera également les incohérences qui ne devraient jamais se produire dans votre base de données, mais qui pourraient être dues à des bogues ou à des blocages dans Access.

Ce n'est pas totalement sans risque cependant - un Un bogue dans Access 2007 supprimait parfois votre base de données au cours du processus.

C'est donc généralement une bonne chose à faire, mais associez-le à une bonne routine de sauvegarde. Une fois la sauvegarde en place, vous pouvez également récupérer les problèmes de compression et de réparation «irrécupérables» avec un minimum de perte de données.

Autres conseils

Assurez-vous de compacter et de réparer la base de données régulièrement, en particulier si l'application de base de données subit de fréquentes mises à jour, suppressions et insertions d'enregistrements. Non seulement la taille du fichier de base de données sera réduite au minimum - ce qui contribuera à accélérer les opérations de la base de données et les communications réseau - mais elle gérera également la gestion de la base de données, ce qui améliorera encore la stabilité de vos données. Mais avant de compacter la base de données, assurez-vous de faire une sauvegarde du fichier, juste au cas où quelque chose se passe mal avec le compactage.

Jet compresse une base de données pour réorganiser le contenu du fichier afin que chaque page de 4 Ko "page " (2 Ko pour Access 95/97) de l’espace alloué pour les données, les tables ou les index est situé dans une zone contiguë. Jet récupère l'espace des enregistrements marqués comme supprimés et réécrit les enregistrements de chaque table dans l'ordre des clés primaires, à la manière d'un index en cluster. Cela accélérera les opérations de lecture / écriture de votre base de données.

Jet met également à jour les statistiques de la table lors du compactage. Cela inclut l'identification du nombre d'enregistrements dans chaque table, ce qui permettra à Jet d'utiliser la méthode la plus optimale pour analyser des enregistrements, à l'aide des index ou d'une analyse complète de la table lorsqu'il existe peu d'enregistrements. Après le compactage, exécutez chaque requête stockée afin que Jet la réoptimise à l'aide de ces statistiques de table mises à jour, ce qui peut améliorer les performances de la requête.

Access 2000, 2002, 2003 et 2007 combinent le compactage avec une opération de réparation si nécessaire. Le processus de réparation:

1 - Supprime les transactions incomplètes

2 - Compare les données des tables système avec celles des tables réelles, des requêtes et des index et répare les erreurs

3 - Répare les erreurs de structure de données très simples, telles que les pointeurs perdus vers des enregistrements de plusieurs pages (ce qui ne réussit pas toujours et c'est pourquoi "réparation" ne permet pas toujours de sauvegarder une base de données Access corrompue)

4 - Remplace les informations manquantes sur la structure d'un projet VBA

5 - Remplace les informations manquantes nécessaires à l'ouverture d'un formulaire, d'un rapport et d'un module

6 - Réparation des erreurs de structure d'objet simple dans les formulaires, les rapports et les modules

Ce qui peut arriver si les utilisateurs ne compactent / réparent jamais la base de données, c’est qu’elle deviendra lente à cause de la surcharge, et elle risque de devenir instable - ce qui signifie corrompue.

Compacter une base de données Access (également appelée base de données MS JET) revient un peu à défragmenter un disque dur. L'accès (ou, plus précisément, le moteur de base de données MS JET) n'est pas très efficace avec la réutilisation d'espace. Ainsi, lorsqu'un enregistrement est mis à jour, inséré ou supprimé, cet espace n'est pas toujours récupéré. Un nouvel espace est ajouté à la place. la fin du fichier de base de données et utilisé à la place.

En règle générale, si votre base de données [Access] doit être écrite (mise à jour, modifiée ou ajoutée), vous devez autoriser le compactage. Sinon, sa taille augmentera ( beaucoup plus que les données que vous avez ajoutées, aussi).

Donc, pour répondre à votre (vos) question (s):

  • Oui, c'est important (sauf si votre base de données est en lecture seule).
  • Vous devriez vous en préoccuper (sauf si vous ne vous souciez pas de l'espace disque de votre utilisateur).
  • Si vous ne compactez pas une base de données Access, elle augmentera avec le temps, beaucoup, beaucoup plus que ne le suggèrent les données qu'elle contient, ce qui ralentit les performances et augmente les possibilités d'erreurs et de corruption. (En tant que base de données basée sur fichier, les fichiers de base de données Access sont connus pour leur corruption, en particulier lorsqu’ils sont accédés via un réseau.)

Cet article sur la comment compacter une base de données Microsoft Access via ADO vous donnera un bon départ si vous décidez d’ajouter cette fonctionnalité à votre application.

Je proposerais aux utilisateurs une méthode pour compacter la base de données. J'ai vu des bases de données atteindre plus de 600 mégaoctets lorsque le compactage a été réduit à 60-80.

Pour faire écho à Nate: Dans les versions antérieures, les bases de données étaient corrompues. Un bon régime de sauvegarde est donc essentiel. Je ne décoderais rien dans votre application pour le faire automatiquement. Toutefois, si un client constate que sa base de données est très lente, votre équipe de support technique peut le lui expliquer au besoin (avec des sauvegardes appropriées bien sûr).

Si leur base de données commence à devenir si volumineuse que le compactage devient une nécessité, il est peut-être temps de passer à MS-SQL.

Si vous n'offrez pas à vos utilisateurs un moyen de décompresser et que la taille brute ne pose pas de problème, ne vous inquiétez pas.

J'ai constaté que les fichiers de base de données Access étaient presque toujours corrompus au fil du temps. En les compactant et en les réparant, vous éviterez cela plus longtemps.

Bien, ça compte vraiment! La taille des fichiers mdb ne cesse de croître chaque fois que vous manipulez ses données, jusqu'à atteindre une taille insupportable. Mais vous n'avez pas à fournir de méthode de compactage via votre interface. Vous pouvez ajouter le code suivant dans votre fichier mdb pour le compacter à chaque fermeture du fichier:

Application.SetOption ("Auto Compact"), 1

Je recommanderais également vivement de consulter VistaDB ( http: //www.vistadb .net / ) ou SQL Compact ( http://www.microsoft.com / sql / editions / compact / ) pour votre application. Celles-ci pourraient ne pas convenir à votre application ... mais méritent assurément un coup d'oeil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top