Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why should I care about compacting an MS Access .mdb file?

Tags:

ms-access

We distribute an application that uses an MS Access .mdb file. Somebody has noticed that after opening the file in MS Access the file size shrinks a lot. That suggests that the file is a good candidate for compacting, but we don't supply the means for our users to do that.

So, my question is, does it matter? Do we care? What bad things can happen if our users never compact the database?

like image 205
Corey Trager Avatar asked Nov 30 '22 07:11

Corey Trager


2 Answers

In addition to making your database smaller, it'll recompute the indexes on your tables and defragment your tables which can make access faster. It'll also find any inconsistencies that should never happen in your database, but might, due to bugs or crashes in Access.

It's not totally without risk though -- a bug in Access 2007 would occasionally delete your database during the process.

So it's generally a good thing to do, but pair it with a good backup routine. With the backup in place, you can also recover from any 'unrecoverable' compact and repair problems with a minimum of data loss.

like image 99
Nate Avatar answered Dec 10 '22 06:12

Nate


Make sure you compact and repair the database regularly, especially if the database application experiences frequent record updates, deletions and insertions. Not only will this keep the size of the database file down to the minimum - which will help speed up database operations and network communications - it performs database housekeeping, too, which is of even greater benefit to the stability of your data. But before you compact the database, make sure that you make a backup of the file, just in case something goes wrong with the compaction.

Jet compacts a database to reorganize the content within the file so that each 4 KB "page" (2KB for Access 95/97) of space allotted for data, tables, or indexes is located in a contiguous area. Jet recovers the space from records marked as deleted and rewrites the records in each table in primary key order, like a clustered index. This will make your db's read/write ops faster.

Jet also updates the table statistics during compaction. This includes identifying the number of records in each table, which will allow Jet to use the most optimal method to scan for records, either by using the indexes or by using a full table scan when there are few records. After compaction, run each stored query so that Jet re-optimizes it using these updated table statistics, which can improve query performance.

Access 2000, 2002, 2003 and 2007 combine the compaction with a repair operation if it's needed. The repair process:

1 - Cleans up incomplete transactions

2 - Compares data in system tables with data in actual tables, queries and indexes and repairs the mistakes

3 - Repairs very simple data structure mistakes, such as lost pointers to multi-page records (which isn't always successful and is why "repair" doesn't always work to save a corrupted Access database)

4 - Replaces missing information about a VBA project's structure

5 - Replaces missing information needed to open a form, report and module

6 - Repairs simple object structure mistakes in forms, reports, and modules

The bad things that can happen if the users never compact/repair the db is that it will become slow due to bloat, and it may become unstable - meaning corrupted.

like image 36
Chris OC Avatar answered Dec 10 '22 04:12

Chris OC