dinsdag 11 juni 2013

Help! Mijn Access database doet het niet meer!

Komen de onderstaande typen meldingen bekend voor?

Access kan de database file niet meer lezen of vinden...
Access kan database objecten niet meer vinden...
Access kan tabellen of velden niet vinden die je niet bekend in de oren klinken (en dus wel intern moeten zijn)...

...dan is de kans groot dat de Access database corrupt is.

Hierop is snelle actie geboden omdat een corrupte Access database verlies van gegevens en van programmatuur kan betekenen.

In dit artikel in het kort een paar tips om problemen te voorkomen en, als het echt nodig is, proberen te verhelpen.

Wat betekent een "corrupte" Access database eigenlijk?

Een Access database wordt in een (1) bestand opgeslagen (b.v. .mdb, .accdb). Hierin is zowel data, data definities als code opgeslagen. Access leest en schrijft continu in dit bestand. En naarmate de activiteiten toenemen (meer gebruikers, grotere en complexere bewerkingen), wordt ook de kans dat Access (schrijf) fouten maakt groter, waardoor data, definities en code beschadigd raken.
Factoren als hardware fouten (b.v. disk, netwerk) vergroten deze kans.

Hoe kun je voorkomen dat een Access database corrupt raakt?

Tip: MAAK REGELMATIG BACKUPS!!

(in het groot geschreven omdat dit een van de meest belangrijke, maar ook een van de meest nagelaten activiteiten is)

Het regelmatig maken van backups voorkomt geen corruptie, maar vermindert de moeite die gedaan moet worden om data, stuctuur en programmatuur te herstellen.

Tip: gebruik Access waarvoor het gemaakt is: eenvoudige, kleine databases die door een beperkt aantal gebruikers, niet intensief, worden gebruikt. Access is namelijk een file based Database management System waarbij een (1) centraal bestand door alle Access clients wordt aangesproken (lezen/schrijven). Dit in tegenstelling tot een (echt) client-server based Database Management System waarbij een proces op de server verantwoordelijk is voor alle dataverkeer tussen database (server side) en client. Wanneer een client een selectie van gegevens (een query op een tabel) opvraagt wordt de hele tabel eerst door de client ingelezen waarna selectie op de client wordt uitgevoerd. In een client-server based systeem wordt de selectie al op de server uitgevoerd, waarbij de hoeveelheid gegevens die naar de client worden gestuurd aanzienlijk kleiner is.

Wil je meer? Gebruik dan een solider Database Management Systeem als SQL-server. Ook hiervan zijn versies die eenvoudig op de pc gebruikt kunnen worden. Zie: SQL Server 2012 Express Edition (gratis).

Tip: splits je Access database in een gegevens deel en een programmatuur deel
Zo blijft eventuele schade beperkt.

Tip: voor toegang door meerdere gebruikers: splits je Access database in een (master) gegevens deel en (voor iedere gebruiker) een (werk) programmatuur deel
Gebruikers bewerken gegevens in hun lokale database, waarna definitieve wijzigingen in de centrale database worden opgeslagen. Zodoende wordt de werklast van de database(s) verdeeld en daarmee verminderd. Ook hier: eventuele schade blijft beperkt.

Tip: vermijd Memo velden en in het algemeen velden waarin veel data wordt opgeslagen
Access databases raken regelmatig corrupt bij het (over)vullen van velden. Vermijd dit soort velden of zorg ervoor dat deze velden niet overvuld (te grote string in een memo veld proberen op te slaan) worden.

Tip: Sluit formulieren af voordat je wijzigingen aan code uitvoert
Met het tegelijk wijzigen van code en gebruik van formulieren heeft Access moeite. Databases kunnen hierdoor corrupt raken. Na het testen dus de formulieren afsluiten, daarna pas programma code aanpassen.

Tip: Vermijd langlopende en complexe bewerkingen
Langlopende en complexe queries vergroten de kans op fouten. Splits deze daarom in kleinere delen, en maak gebruik van tijdelijke tabellen. Vooral in omgevingen waarbij databases op centrale (remote) servers staan nemen langlopende en complexe bewerkingen veel tijd in beslag, hetgeen de kans op fouten groter maakt. Ook hier: gebruik een lokale (snelle) database voor complexere en langduriger bewerkingen en update de centrale database daarna.

Tip: "Compact & repair" je Access database regelmatig
Regelmatig controleren en opschonen van je Access database verkleint de database en stelt je in staat om eerder fouten te ontdekken. Access biedt hiervoor in het Database tool menu een "Compact & repair" functie. Deze is ook in de programmatuur aan te roepen zodat automatisering hiervan goed mogelijk is.

En als het toch misgaat? Hoe kun je (proberen) een corrupte Access database te herstellen?

Het is niet altijd mogelijk om een corrupte Access database te herstellen. Stappen die je hiervoor kunt ondernemen zijn:

1. Verwijderen van het lock bestand (b.v. .ldb, .accldb)
2. Kopieer de Access database naar een backup (mocht de eerste herstel actie mislukken)
3. Open de Access database en probeer deze middels de "Compact & repair" functie te herstellen
4. Test de herstelde database grondig, door alle objecten te openen en te testen, en te controleren op foutmeldingen en onverwacht gedrag.

Mocht dit niet lukken:
1. Open de corrupte database
2. Exporteer alle objecten naar schijf of een nieuwe database
3. Mocht je een (werkende) backup hebben, importeer de geexporteerde objecten in deze backup
4. En ook hier geldt na herstel: testen.

Geen opmerkingen:

Een reactie posten