Meer informatie
De procedures die in dit artikel worden beschreven, zijn meestal succesvol bij het herstellen van beschadigde databasebestanden. Ter beveiliging van uw gegevens wordt echter aangeraden zo vaak mogelijk een reservekopie van de databasebestanden te maken.
Het hulpprogramma Comprimeren en herstellen
Het hulpprogramma Comprimeren verwijdert lege ruimte uit een bestaande database. Hierbij wordt een nieuwe doeldatabase gemaakt en wordt elk object uit de oude database naar de nieuwe database gekopieerd. Als u ervoor kiest om de database te comprimeren onder de oorspronkelijke databasenaam in plaats van een nieuwe naam, maakt het hulpprogramma Comprimeren een tijdelijke database. Vervolgens worden alle objecten uit de oorspronkelijke database naar de tijdelijke database geëxporteerd, wordt de oorspronkelijke database verwijderd en krijgt de tijdelijke database de naam van de oorspronkelijke database.
Het proces Herstellen is uitsluitend gericht op het herstellen van tabellen, query's en indexen in de database en niet op het herstellen van beschadigde formulieren, rapporten, macro's of modules.
Het hulpprogramma Comprimeren voert de volgende acties uit:
- De pagina's van de tabel worden zodanig gereorganiseerd dat deze in aangrenzende databasepagina's terecht komen.
Hierdoor worden de prestaties verbeterd omdat de tabel niet meer in fragmenten door de database verspreid is. - Lege ruimte als gevolg van het verwijderen van objecten en records wordt vrijgemaakt.
Wanneer objecten of records uit de database worden verwijderd, komt de ruimte die ze in beslag nemen beschikbaar voor toevoegingen aan de database. De omvang van de database wordt echter alleen kleiner als de database wordt gecomprimeerd. Databases waarin vaak objecten en records worden toegevoegd, verwijderd en bijgewerkt, moeten regelmatig worden gecomprimeerd. - Het opnieuw instellen van oplopende AutoNummering-velden, zodat de volgende toegewezen waarde één waarde hoger is dan de hoogste waarde in de resterende records.
Als bijvoorbeeld alle records uit de database zijn verwijderd nadat u de database hebt gecomprimeerd, is de waarde in het AutoNummering-veld 1 wanneer de volgende record wordt toegevoegd. Als de hoogste resterende AutoNummering-waarde in de database 50 is, wordt deze waarde na het comprimeren verhoogd naar 51 wanneer de volgende record wordt toegevoegd. Dit is zelfs het geval als records met waarden hoger dan 50 werden toegevoegd, maar weer werden verwijderd voordat het comprimeren werd uitgevoerd. - De tabelstatistieken die zijn gebruikt tijdens de query-optimalisatie, worden opnieuw gegenereerd.
Deze statistieken kunnen in de loop van de tijd verouderd raken. Dit doet zich normaal gesproken voor als transacties ongedaan worden gemaakt of als de database niet goed wordt gesloten als gevolg van stroomuitval of als het programma niet volledig wordt afgesloten met Microsoft Jet voordat de computer wordt uitgeschakeld. - Het markeren van alle query's zodat deze opnieuw worden gecompileerd wanneer de query de volgende keer wordt uitgevoerd.
Dit is belangrijk omdat databasestatistieken kunnen veranderen en een eerder gecompileerde query een onnauwkeurige queryplanning kan hebben.
Belangrijke richtlijnen voor het uitvoeren van het hulpprogramma Comprimeren en herstellen
Voordat u de hulpprogramma's Comprimeren en herstellen voor een database kunt uitvoeren, moet aan de onderstaande voorwaarden zijn voldaan:
- U moet zijn aangemeld via een account met de beveiligingsmachtigingen Ontwerp wijzigen of Beheren voor alle tabellen in de database.
- Er moet voldoende schijfruimte aanwezig zijn voor zowel de oorspronkelijke als de gecomprimeerde versie van de database, zelfs als de database via de gebruikersinterface van Microsoft Access 2000 wordt gecomprimeerd met dezelfde bestandsnaam.
De herstelde/gecomprimeerde database krijgt alleen de naam van de oorspronkelijke database als het comprimeren is gelukt. - De database mag niet geopend zijn door andere gebruikers.
Wanneer een database wordt gecomprimeerd, moet deze exclusief geopend zijn door Microsoft Jet om te voorkomen dat andere gebruikers de database openen en wijzigen tijdens het comprimeren.
Een beschadigde database herstellen
De volgende stappen geven een overzicht van een algemene methode voor het herstellen van een beschadigde database:
- Installeer het meest recente Service Pack voor Microsoft Jet.
U weet dan zeker dat u over de laatste correcties voor Microsoft Jet beschikt. Als u meer informatie wilt over het ophalen van het meest recente service pack voor Jet 4.0, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base: 239114 De meest recente service pack voor de Microsoft Jet 4.0-database-engine ophalen
Als u werkt in een netwerkomgeving, moet u het laatste service pack voor Microsoft Jet installeren op alle clientcomputers. Het service pack voor Microsoft Jet hoeft u alleen te installeren op de netwerkbestandsserver als op de server een of meer toepassingen worden uitgevoerd die gebruikmaken van Microsoft Jet. - Maak een reservekopie van het beschadigde databasebestand (.MDB).
- Verwijder het LDB-bestand als dit aanwezig is. U moet het overeenkomstige MDB-bestand sluiten voordat u dit bestand verwijdert.
Het LDB-bestand wordt gebruikt om vast te stellen welke records in een gedeelde database vergrendeld zijn en door wie dat is gebeurd. Als een database wordt geopend voor gezamenlijk gebruik, wordt het LDB-bestand gemaakt onder dezelfde naam als de overeenkomstige database (.MDB). Als u bijvoorbeeld de voorbeelddatabase Noordenwind.mdb in de map C:\Msoffice\Access opent voor gezamenlijk gebruik, wordt in dezelfde map automatisch een bestand met de naam Noordenwind.ldb gemaakt. Het LDB-bestand wordt automatisch verwijderd nadat de laatste gebruiker de database sluit, met de volgende twee uitzonderingen:
- wanneer de laatste gebruiker geen verwijdermachtiging heeft voor de map met het MDB-bestand
- wanneer de database beschadigd is
Het LDB-bestand bevat een lijst met gebruikers die de database op dat moment geopend hebben.
Als u de oorzaak van de databasebeschadiging probeert te achterhalen, moet u in sommige gevallen weten wie er bij de database is aangemeld. Met behulp van Microsoft Visual Basic for Applications in Access 2000 kunt u een lijst weergeven met gebruikers die bij een bepaalde database zijn aangemeld. Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over de wijze waarop u aangemelde gebruikers kunt controleren en voor een voorbeeldcode: 198755 Procedure: Controleren wie zich bij de database heeft aangemeld met Jet UserRoster in Access 2000
- Ga als volgt te werk om de hulpprogramma's Comprimeren en Repareren uit te voeren:
- Sluit de database als deze geopend is.
- Wijs in het menu Extra de opdracht Databasehulpprogramma's aan en klik op Database comprimeren en herstellen.
- Selecteer in het dialoogvenster Te comprimeren database opgeven het bestand dat u wilt comprimeren en klik op Comprimeren.
- Voer in het dialoogvenster Database comprimeren als een nieuwe bestandsnaam in en klik op Opslaan.
Als het comprimeren en herstellen niet is gelukt, wordt dit in een bericht gemeld. Dit betekent dat de beschadiging zo ernstig is dat de database niet kan worden hersteld.
- Als u de beschadigde database niet kunt herstellen met de voorgaande procedure, kunt u een nieuwe database maken en de objecten een voor een vanuit de oude database naar de nieuwe database importeren. Vervolgens moet u de relaties opnieuw aanbrengen. Via deze techniek kunt u problemen met beschadigde systeemtabellen in de database oplossen.
U kunt geen Data Access-pagina's importeren met de wizard Importeren. In plaats daarvan moet u een bestaande Data Access-pagina openen in de nieuwe database. Ga hiervoor als volgt te werk: - Klik in het databasevenster op Pagina's onder Objecten.
- Klik op de knop Nieuw.
- Klik in het dialoogvenster Nieuwe Data Access-pagina op Bestaande webpagina en klik op OK.
- Als de beschadiging een tabel betreft en deze kon niet worden hersteld met behulp van de voorgaande stappen, gaat u als volgt te werk:
- Exporteer de tabel vanuit Microsoft Access 2000 naar een ASCII-bestand (tekstbestand met scheidingstekens). Voor meer informatie over dit onderwerp zoekt u in de Help-index naar 'tekst met scheidingstekens' en geeft u het onderwerp 'Access-gegevens exporteren' weer.
- Verwijder alle relaties die aan deze tabel gekoppeld zijn en verwijder vervolgens de tabel uit de database.
- Comprimeer de database.
- Maak de tabel opnieuw en herstel de relaties van en naar de tabel.
- Als u een tekstverwerker gebruikt, kunt u het ASCII-bestand controleren op beschadigde of vreemde gegevens en deze vervolgens verwijderen. Sla het bestand op in een ASCII-tekstindeling.
- Importeer het ASCII-bestand in de opnieuw gemaakte tabel. Voor meer informatie over dit onderwerp zoekt u in de Help-index naar 'tekst met scheidingstekens' en geeft u het onderwerp 'importeren of koppelen' weer.
- Voer de records in die u eerder moest verwijderen.
- Als de beschadiging een formulier of een rapport betreft, kan het formulier of rapport zelf beschadigd zijn of kunnen een of meer besturingselementen in het formulier of rapport beschadigd zijn. U kunt het formulier of rapport verwijderen en opnieuw importeren met behulp van de reservekopie van de database. U kunt ook een van de volgende methoden gebruiken:
- Als het formulier of rapport zelf beschadigd is, maakt u een nieuw formulier of rapport en kopieert u de besturingselementen uit het oorspronkelijke formulier of rapport.
- Als een besturingselement in het formulier of rapport beschadigd is, kunt u een nieuw formulier of rapport maken en maakt u de besturingselementen opnieuw in het nieuwe formulier of rapport. U moet alle besturingselementen opnieuw maken, omdat het niet mogelijk is vast te stellen welk besturingselement beschadigd is.
- Als de beschadiging in een macro of module optreedt, kan de macro of module zelf of de inhoud van de macro of module beschadigd zijn. U kunt de macro of module verwijderen en opnieuw importeren uit de reservekopie van de database. U kunt ook een van de volgende methoden gebruiken:
- Als de macro of module zelf beschadigd is, maakt u een nieuwe macro of module, waarna u de inhoud van de oorspronkelijke macro of module kopieert.
- De beschadiging kan betrekking hebben op niet-ASCII-tekens die in de module zijn ingesloten. Sla de module op als tekstbestand, verwijder beschadigde of vreemde gegevens en laad het bestand in een nieuwe module.
- Als de inhoud van de macro of module beschadigd is, maakt u een nieuwe macro of module en maakt u de inhoud van de oorspronkelijke macro of module opnieuw.
Als u de database via deze stappen niet kunt herstellen, is deze waarschijnlijk zodanig beschadigd dat herstellen niet mogelijk is. In dat geval moet u de laatste reservekopie van de database herstellen of de database opnieuw maken.
Als laatste optie bieden sommige consultants een herstelservice voor Microsoft Access-databases. Dit is een zeer gespecialiseerde service. De meest efficiënte manier om een dergelijke consultant op te sporen is door een bericht te publiceren in de Microsoft Access-nieuwsgroep 'Third Party and User Groups' op het volgende internetadres:
microsoft.public.access.3rdpartyusrgrp
Voor meer informatie over internetnieuwsgroepen voor Microsoft Access klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
150057 Access: Microsoft Access Nieuwsgroepen beschikbaar op internet.
Belangrijkste oorzaken van beschadiging van het .mdb-bestand
Er zijn drie hoofdoorzaken van beschadiging van MDB-bestanden in Access/Jet.
De database is onbetrouwbaar/beschadigd ten gevolge van een onderbroken schrijfbewerking
U wordt ten sterkste aangeraden correct en volledig af te sluiten door te klikken op
Afsluiten of op
Sluiten in het menu
Bestand. Als de database echter geopend is en bezig is met het schrijven van gegevens op het moment dat Access op onjuiste wijze wordt afgesloten, kan de Jet Database Engine het bestand markeren als onbetrouwbaar/beschadigd. Dit kan gebeuren als de computer handmatig wordt uitgezet zonder eerst Windows af te sluiten, of in geval van een stroomonderbreking. In andere gevallen wordt Access niet afgesloten maar wordt een conflict veroorzaakt wanneer Jet gegevens naar schijf schrijft terwijl de database geopend is. Dit kan bijvoorbeeld gebeuren in geval van gegevensconflicten in een netwerk of bij slecht functioneren van een schijfstation. Als een van deze onderbrekingen optreedt, kan Jet de database markeren als mogelijk beschadigd.
Wanneer Jet een schrijfbewerking start, wordt een markering ingesteld. Deze markering wordt weer verwijderd als de bewerking is voltooid. Als een schrijfbewerking wordt onderbroken, blijft de markering ingesteld. Als u de database opnieuw probeert te openen, neemt Jet waar dat de markering is ingesteld en wordt gerapporteerd dat de database beschadigd is. In de meeste gevallen zijn de gegevens in de database niet daadwerkelijk beschadigd, maar wordt Jet door de markering gewaarschuwd dat een beschadiging kan zijn opgetreden. In dergelijke gevallen kunt u de database meestal herstellen door te comprimeren en/of te herstellen. Er zijn gelukkig manieren om vast te stellen welke gebruiker en welk werkstation verantwoordelijk waren voor de markering van het bestand. Zie het onderwerp 'Methoden om vast te stellen welke gebruikers en/of werkstations ervoor zorgen dat het bestand wordt gemarkeerd als mogelijk beschadigd' verderop in dit artikel om vast te stellen welke gebruikers of werkstations (of beide) ervoor zorgen dat Jet het bestand als mogelijk beschadigd aanmerkt.
Defecte netwerkhardware
In dit geval heeft de beschadiging van het bestand niets te maken met de Jet-engine. Het bestand is waarschijnlijk letterlijk beschadigd door een externe oorzaak. De oorzaak kan liggen in een of meer koppelingen in de hardwareketen tussen de computer waarop de database is geïnstalleerd en de computer waarop de database is geopend. De lijst met mogelijk defecte hardware omvat onder meer netwerkinterfacekaarten, netwerkbekabeling, routers en hubs.
Een symptoom van door hardware veroorzaakte beschadiging is dat MDB-bestanden niet kunnen worden hersteld door het gebruik van het hulpprogramma Comprimeren en herstellen of door Jetcomp. Hardwarebeschadiging kan normaal gesproken worden verholpen door de hardware te repareren of te vervangen.
Het mdb-bestand openen en opslaan in een ander programma
Het is niet mogelijk om een MDB-bestand te herstellen dat in een ander programma werd geopend en opgeslagen. Microsoft Word staat u bijvoorbeeld toe een Access-database te openen en daarna op te slaan. (Het heeft geen zin een MDB-bestand in een andere toepassing te openen, omdat u alleen bepaalde tekens ziet.) Als u het bestand op deze manier opslaat, wordt u door het MDB-bestand naar een wachtwoord gevraagd als u het bestand in Access opent. Dit probleem doet zich ook voor als er in Access nooit een wachtwoord voor het bestand is gemaakt. De vraag naar een wachtwoord wordt in dergelijke gevallen weergegeven omdat het eerste byte-bereik dat door Access wordt gecontroleerd bij het openen van een bestand, het bereik is waar het databasewachtwoord zich moet bevinden. Als dit byte-bereik beschadigde gegevens bevat, behandelt Access het bestand als een bestand met wachtwoordbeveiliging. Zelfs als het mogelijk zou zijn om in dit geval de vraag om een wachtwoord te omzeilen, zou het nog altijd niet mogelijk zijn de database te herstellen. De binaire structuur is namelijk vervormd en daarom onleesbaar voor Access. In dit geval is het terugzetten van een reservekopie van het bestand de enige oplossing. Klik op het volgende artikelnummer in de Microsoft Knowledge Base als u meer informatie over dit probleem wilt:
243895 Access 2000: Databasewachtwoord wordt weergegeven, ook al is dit nooit ingesteld
Verschillende versies van de Jet database-engine
Als u verschillende versies van de Jet database-engine gebruikt, kan dit ook beschadiging van Access-databases veroorzaken. Verschillende versies van Jet schrijven gegevens op verschillende manieren in de database, en kunnen daardoor beschadigingen in een database veroorzaken.
Methoden om vast te stellen welke gebruikers en/of werkstations ervoor zorgen dat het bestand wordt gemarkeerd als mogelijk beschadigd
Als u de oorzaak van de databasebeschadiging probeert te achterhalen, moet u in bepaalde gevallen weten wie er bij de database is aangemeld. Met behulp van Microsoft Visual Basic for Applications in Access 2000 kunt u een lijst weergeven met gebruikers die bij een bepaalde database zijn aangemeld.
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over de wijze waarop u aangemelde gebruikers kunt controleren en voor een voorbeeldcode:
198755 Procedure: Controleren wie zich bij de database heeft aangemeld met Jet UserRoster in Access 2000
Methoden die u kunt gebruiken om beschadiging te voorkomen
- Voorkom stroomuitval tijdens schrijven naar de database. Door stroomonderbrekingen tijdens het schrijven naar een database kan de database de status 'mogelijk beschadigd' krijgen.
- Voorkom het verbreken van netwerkverbindingen.
- Voorkom onjuiste beëindiging van Microsoft Jet-verbindingen, zoals stroomonderbrekingen, handmatig afsluiten of door de toepassing door Taakbeheer te laten afsluiten.
- Sluit tijdens het programmeren alle geopende DAO- en ADO-objecten. Voorbeelden hiervan zijn de objecten Recordset, QueryDef, TableDef en Database.
- Fatale systeemfouten veroorzaken bijna altijd een onjuiste beëindiging. Als uw database gevoelig is voor fatale fouten, moet u de fouten herstellen voordat de database te zeer beschadigd raakt om te kunnen worden geopend of hersteld.Als u meer informatie wilt over fatale systeemfouten, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
208488 Access2000: Problemen oplossen met fouten met ongeldige pagina's in Access 2000
- Comprimeer de database regelmatig.
- Voer IPX niet uit op een Windows NT-server als er zich overal in het netwerk Jet-databases bevinden en Microsoft Windows 95 met IPX/SPX de client is. Voer in plaats daarvan TCP/IP uit op de Windows NT-server en een tweeledige protocolstack van IPX en TCP/IP op de Win95-client. (Windows NT-naar-Windows NT met IPX/SPX zal het probleem niet veroorzaken, en Novell naar een willekeurige andere client evenmin.)
- Voorkom grote aantallen open-/sluitbewerkingen in een lus (van 40.000 opeenvolgende open-/sluitbewerkingen tot meer dan 1.000.000).
- Controleer of het meest recente Microsoft Jet Service Pack is geïnstalleerd op alle clientcomputers die toegang hebben tot het databasebestand.
Referenties
Als u meer informatie wilt over het herstellen van databases, klikt u op
Microsoft Access Help in het menu
Help, typt u
herstellen in de Office-assistent of de Antwoordwizard en klikt u vervolgens op
Zoeken om het bijbehorende onderwerp weer te geven.
Raadpleeg het volgende Microsoft Knowledge Base-artikel voor meer informatie over een downloadbaar hulpprogramma waarmee beschadigde databases mogelijk kunnen worden hersteld:
273956 Access 2000: Hulpprogramma Jet Compact beschikbaar in Download Center
Voor meer informatie over het oplossen van problemen met databases in eerdere versies van Access klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:
279334 Access 97: Een beschadigde Jet 3.5-database herstellen
109953 Access: Problemen oplossen met beschadigde databases van Jet 3.0 en eerder