Felsökning och reparation av en skadad databas från Access 2002 eller senare

Artikelöversättning Artikelöversättning
Artikel-id: 283849 - Visa produkter som artikeln gäller.
Nybörjare: Kräver kunskaper om användargränssnittet på datorer för en användare.

Denna artikel gäller endast Microsoft Access-databaser (.mdb).

En version av den här artikeln för Microsoft Access 97 finns i 279334 (Länken kan leda till en webbplats som är helt eller delvis på engelska).
En version av den här artikeln för Microsoft Access 2000 finns i 209137 (Länken kan leda till en webbplats som är helt eller delvis på engelska).
Visa alla | Dölj alla

På den här sidan

Sammanfattning

Flera saker kan hända, både i och utanför Access, som gör att databasfilen blir skadad. Skador på databaser kan ge olika symtom, från att #Borttaget visas i vissa poster, till att det inte går att öppna ett av objekten i databasen, eller att det inte alls går att öppna databasfilen i Access. Verktyget Komprimera och reparera i Microsoft Access är användbart för att optimera eller försöka reparera databasfiler för Microsoft Access. I den här artikeln beskrivs verktyget och ytterligare alternativ för reparation av skadade databaser. Artikeln innehåller även information om olika orsaker till skador på databaser.

Obs! Microsoft Jet, databasmotorn som används i Microsoft Access, är ett databassystem för fildelning. När Microsoft Jet används i en fleranvändarmiljö används flera åtgärder för läsning, skrivning och låsning av filer i flera klientprocesser på en delad databas. Eftersom flera klientprocesser läser och skriver till samma databas, och ingen transaktionslogg används i Jet (till skillnad från mer avancerade databassystem som SQL Server), är det inte möjligt att på ett tillförlitligt sätt förhindra alla databasskador. Om du behöver ett databassystem som fungerar dygnet runt alla dagar i en fleranvändarmiljö rekommenderar Microsoft att du använder ett äkta klient-server-databassystem med stöd för beständiga transaktioner, till exempel Microsoft SQL Server.

Mer Information

Även om åtgärderna som beskrivs i den här artikeln vanligen innebär att skadade databasfiler kan återställas, bör du skydda dina data genom att säkerhetskopiera databasfilen så ofta du kan.

Beskrivning av Komprimera och reparera

Komprimera en databas

När en databas komprimeras återvinns outnyttjat utrymme i en databas som uppstår genom borttagning av objekt och poster. Detta sker genom att en ny måldatabas skapas och varje objekt i den gamla databasen kopieras till den nya. Om du väljer att komprimera databasen till det ursprungliga databasnamnet i stället för till en ny databas, skapar komprimeringsprocessen en tillfällig databas, exporterar alla objekt från den ursprungliga databasen till den tillfälliga databasen, tar bort den ursprungliga databasen och byter sedan namn på den tillfälliga databasen till den ursprungliga databasens namn.

Komprimeringsprocessen innebär följande:
  • Sidorna i en tabell ordnas om så att de lagras i angränsande databassidor. Detta förbättrar prestanda, eftersom tabellen inte längre är fragmenterad över hela databasen.
  • Outnyttjat utrymme som uppkommit vid borttagning av objekt och poster återtas. När objekt eller poster tas bort från databasen markeras det utrymme de har upptagit som tillgängligt för nya tillägg till databasen. Databasens storlek minskar emellertid aldrig om inte databasen komprimeras. I databaser där objekt och poster ofta läggs till, tas bort och uppdateras bör du komprimera ofta.
  • Stegvis ökande Räknare-fält ställs om, så att nästa värde som tilldelas är ett steg högre än det högsta värdet i de återstående posterna. Om exempelvis alla posterna i databasen har tagits bort, blir värdet i Räknare-fältet 1 efter det att databasen har komprimerats, när nästa post läggs till. Om det högsta återstående Räknare-värdet i databasen är 50, blir värdet i fältet Räknare 51 efter komprimering, när nästa post läggs till. Observera att detta gäller även om poster med högre värden än 50 har lagts till tidigare, men tagits bort före komprimeringen.
  • Tabellstatistiken som använts i frågeoptimeringsprocessen återskapas. Denna statistik kan med tiden bli föråldrad, något som normalt händer om transaktioner återställs eller om databasen inte stängs på rätt sätt på grund av ett elavbrott eller därför att datorn stängs av innan ett program där Microsoft Jet används har kunnat avslutas helt.
  • Alla frågor flaggas så att de kan kompileras om nästa gång frågan körs. Detta är viktigt, eftersom databasstatistik kan förändras, och en tidigare kompilerad fråga kan ha en felaktig frågeplan.
Reparera en databas

Under reparationsprocessen repareras bara tabeller, frågor och index i databasen, inte skadade formulär, rapporter, makron eller moduler.

Vad du bör ta reda på innan du använder Komprimera och reparera

Innan du använder Komprimera och reparera på en databas måste du ta reda på följande:
  • Se till att du har tillräckligt med ledigt lagringsutrymme på hårddisken för både den ursprungliga och den komprimerade versionen av Access-databasen. Detta innebär att du måste ha minst dubbelt så mycket ledigt lagringsutrymme som storleken av Access-databasen på enheten. Om du behöver frigöra utrymme tar du bort onödiga filer från enheten eller flyttar om möjligt Access-databasen till en enhet med mer ledigt utrymme.
  • Se till att du har både behörigheterna Öppna/köra och Öppna exklusivt för Access-databasen. Om du äger databasen anger du själv behörigheterna. Om du inte äger databasen kontaktar du ägaren för att se om du kan få behörigheterna.
  • Se till att ingen användare har Access-databasen öppen.
  • Se till att Access-databasen inte finns på en skrivskyddad nätverksresurs och att filattributen inte är skrivskyddade.

Åtgärder för att reparera en skadad databas

I det följande beskrivs en allmän metod som kan användas för att reparera en skadad databas.
  1. Kopiera den skadade databasfilen (.mdb) så att du har en säkerhetskopia.
  2. Ta bort LDB-filen, om det finns någon. Du måste stänga motsvarande MDB-fil innan du tar bort LDB-filen.

    LDB-filen används för att bestämma vilka poster som är låsta i en delad databas och av vem. Om en databas öppnas för delad användning skapas LDB-filen med samma namn som motsvarande databas (.mdb). Om du exempelvis öppnar exempeldatabasen Northwind.mdb i mappen C:\Microsoft Office\Office\Access\Exempel (för delad användning), skapas automatiskt en fil med namnet Northwind.ldb i samma mapp. LDB-filen tas automatiskt bort när databasen har avslutats av den siste användaren. Det finns dock två undantag: när den siste användaren inte har behörighet att ta bort mappen med MDB-filen eller när databasen är skadad. LDB-filen innehåller en lista med användare som har databasen öppen.
  3. Kör Komprimera och reparera så här:
    1. Om databasen är öppen stänger du den.
    2. Peka på DatabasverktygVerktyg-menyn, och klicka sedan på Komprimera och reparera databas.
    3. Markera filen du vill komprimera i dialogrutan Databas att komprimera från och klicka på Komprimera.
    4. Skriv ett nytt filnamn i dialogrutan Komprimera till och klicka på Spara.

      Om komprimeringen och reparationen inte lyckas får du ett meddelande om detta. Det innebär att skadorna är så svåra att de inte kan åtgärdas.
  4. Om du inte lyckas återställa den skadade databasen med föregående åtgärder kan du försöka skapa en ny databas och importera objekten ett och ett från den gamla till den nya databasen. Återskapa sedan relationerna. Denna metod löser problem med skadade systemtabeller i databasen.

    Obs! Du kan inte importera dataåtkomstsidor med Importguiden. Öppna i stället en befintlig dataåtkomstsida i den nya databasen så här:
    1. I fönstret Databas klickar du på Sidor under Objekt.
    2. Klicka på Ny.
    3. Klicka på Befintlig webbsida i dialogrutan Ny dataåtkomstsida och sedan på OK.
    4. Bläddra till platsen för den nya dataåtkomstsidan i fönstret Sök efter webbsida.
  5. Om skadan finns i en tabell och inte har återställts med föregående åtgärder, kan du prova med följande:
    1. I Microsoft Access exporterar du tabellen till en ASCII-fil (avgränsad textfil). Mer information finns i "Exportera data eller databasobjekt" i hjälpen för Microsoft Access.
    2. Ta bort alla relationer som är associerade med denna tabell, och ta sedan bort tabellen från databasen.
    3. Komprimera databasen.
    4. Återskapa tabellen och alla relationer den har haft.
    5. Undersök i en ordbehandlare om ASCII-filen innehåller skadade eller underliga data och ta bort dessa poster. Spara filen i ett ASCII-textfilformat
    6. Importera tillbaka ASCII-filen till den återskapade tabellen. Om du vill veta mer om detta ämne kan du söka på ordet "avgränsa" i Hjälpindex i Microsoft Access och sedan visa avsnittet "Importera eller länka data och objekt".
    7. Lägg in alla poster igen som du har tvingats ta bort.
  6. Om skadan finns i ett formulär eller en rapport, kan skadan antingen finnas i själva formuläret eller rapporten eller i en eller flera kontroller. Du kan ta bort formuläret eller rapporten och importera dem från säkerhetskopian av databasen eller utnyttja något av följande alternativ:
    • Om skadan finns i själva formuläret eller rapporten skapar du ett nytt formulär eller en ny rapport och kopierar sedan kontrollerna från det ursprungliga formuläret eller rapporten.
    • Om skadan finns i en kontroll i formuläret eller rapporten skapar du ett nytt formulär eller en ny rapport och återskapar sedan kontrollerna där. Det är bäst att återskapa samtliga kontroller, eftersom det inte går att se vilka kontroller som är skadade.
  7. Om skadan finns i ett makro eller en modul kan skadan finnas i själva makrot eller modulen eller i makrots eller modulens innehåll. Du kan ta bort makrot eller modulen och importera dem från säkerhetskopian av databasen eller utnyttja något av följande alternativ:
    • Om skadan finns i själva makrot eller modulen skapar du ett nytt makro eller en ny modul och kopierar sedan innehållet i det ursprungliga makrot eller modulen.
    • Skadan kan beröra icke-ASCII-tecken som är inbäddade i modulen. Spara modulen som en textfil, ta bort skadade eller underliga data och läs sedan in textfilen i en ny modul.
    • Om skadan finns i innehållet i makrot eller modulen skapar du ett nytt makro eller en ny modul och återskapar sedan innehållet i det ursprungliga makrot eller modulen.
Om du inte kan reparera databasen med dessa åtgärder går den sannolikt inte att reparera. I så fall bör du återställa den senaste säkerhetskopierade databasen eller återskapa databasen.

Som ett sista alternativ kan vissa konsulter tillhandahålla en reparationstjänst för Microsoft Access-databaser. Eftersom detta är en så specialiserad tjänst är det lättast att hitta en konsult genom att skicka ett meddelande till Internet-diskussionsgruppen "Third Party and User Groups" för Microsoft Access, på följande diskussionsgruppsadress:
microsoft.public.access.3rdpartyusrgrp
Mer information om diskussionsgrupper för Microsoft Access finns i följande artikel i Microsoft Knowledge Base: Om du vill veta mer klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
287756 Räknare-fält återställs inte efter komprimering av en databas (Länken kan leda till en webbplats som är helt eller delvis på engelska)

Orsaker till att MDB-filer skadas

Det finns tre huvudorsaker till att MDB-filer skadas:
  • Avbruten skrivning
  • Felaktig nätverksmaskinvara
  • MDB-filen öppnas och sparas i ett annat program

Avbruten skrivning

Avsluta alltid Access på rätt sätt genom att klicka på Avsluta eller StängArkiv-menyn. Om en databas är öppen och skriver data när Access avslutas onormalt, kan Jet-databasmotorn markera databasen som opålitlig eller skadad. Detta kan inträffa om datorn stängs av manuellt utan att Windows först avslutas eller om strömförsörjningen avbryts. Övriga situationer innebär kanske inte att Access avslutas, men kan ändå påverka skrivning av data i Jet till disken medan databasen är öppen. Detta kan exempelvis inträffa vid datakollisioner i nätverk eller fel i diskenheter. Om något sådant avbrott inträffar kan databasen markeras av Jet som eventuellt skadad.

När Jet börjar en skrivoperation ställer det in en flagga och återställer flaggan när operationen har slutförts. Om en skrivoperation avbryts förblir flaggan inställd. När du försöker öppna databasen igen drar Jet slutsatsen att flaggan är inställd och rapporterar att databasen är skadad. I de flesta fall är inte data i databasen skadade, men den inställda flaggan varnar Jet för att en skada kan ha uppstått. I sådana fall kan komprimering och/eller reparation normalt återställa databasen. Som tur är finns det sätt att avgöra vilken användare och arbetsstation som var ansvarig för markeringen av filen som opålitlig. Med hjälp av Microsoft Visual Basic for Applications i Access kan du ta fram en lista med användare som är inloggade i en viss databas.
208449 Microsoft Access-diskussionsgrupper på Internet (Länken kan leda till en webbplats som är helt eller delvis på engelska)
Mer information om hur du gör finns i "Så tar du reda på vilka användare/arbetsstationer som orsakar att filen markeras som opålitlig" nedan.

Felaktig nätverksmaskinvara

Ibland kan en skada uppstå utan att Jet-databasmotorn är inblandad. Felaktig nätverksmaskinvara kan till exempel medföra att en fil skadas. Denna orsak kan vara en eller flera länkar i maskinvarukedjan mellan den dator där databasen finns och den dator där databasen är öppen. Det kan bland annat röra sig om nätverkskort, nätverkskablar, routrar och hubbar.

Skador på grund av maskinvara yttrar sig normalt i att MDB-filer inte kan återställas genom komprimering, reparationer eller Jetcomp. Sådana skador återkommer normalt tills den felaktiga maskinvaran repareras eller byts ut.

Öppna och spara MDB-filen i ett annat program

Det finns inget sätt att återställa en MDB-fil som har öppnats och sedan sparats i ett annat program. Du kan till exempel öppna och spara en MDB-fil i Microsoft Word, men i så fall kan filen aldrig återskapas, utom från en säkerhetskopia. Om du av misstag öppnar en MDB-fil i ett annat program måste du se till att du inte sparar den. Det är ingen mening med att öppna en MDB-fil i ett annat program, eftersom det enda som syns är en mängd till synes slumpmässigt ordnade tecken.

Så tar du reda på vilka användare/arbetsstationer som orsakar att filen markeras som opålitlig

När du genomför felsökning för att ta reda på vad skadan på databasen beror på, måste du kanske se efter vem som är inloggad i databasen. Med hjälp av Microsoft Visual Basic for Applications i Access 2002 eller 2003 kan du ta fram en lista med användare som är inloggade i en viss databas.
Om du vill veta mer om hur du gör klickar du på artikelnumret nedan och läser artikeln i Microsoft Knowledge Base:
285822 Ta reda på vem som är inloggad i en databas med hjälp av Microsoft Jet UserRoster i Access 2002 eller Access 2003 (Länken kan leda till en webbplats som är helt eller delvis på engelska)

Åtgärder för att förhindra skador

Så här förhindrar du att databasen skadas:
  • Se till att strömförsörjningen inte bryts under skrivning till databasen, eftersom detta kan medföra att databasen försätts i ett opålitligt tillstånd.
  • Undvik att bryta nätverksanslutningar.
  • Undvik onormal avslutning av Microsoft Jet-anslutningar som strömförlust, manuell avslutning, att låta Aktivitetshanteraren avsluta programmet o.s.v.
  • Vid programmering ska alla öppna DAO- och ADO-objekt stängas. Här ingår Recordset, QueryDef, TableDef och Database-objekt.
  • Allvarliga systemfel medför nästan alltid onormal avslutning. Om det lätt uppstår allvarliga fel i databasen bör du lösa problemen innan databasen blir så skadad att den inte kan öppnas eller återställas. Om du vill veta mer om hur du gör och se exempel på kod som du kan använda klickar du på artikelnumret nedan och läser artikeln i Microsoft Knowledge Base:
    285822 Ta reda på vem som är inloggad i en databas med hjälp av Microsoft Jet UserRoster i Access 2002 (Länken kan leda till en webbplats som är helt eller delvis på engelska)
    Om du vill veta mer om allvarliga systemfel klickar du på artikelnumret nedan och läser artikeln i Microsoft Knowledge Base:
    294301 ACC2002: Felsökning av allvarliga systemfel i Access 2002 som körs i Microsoft Windows 2000 (Länken kan leda till en webbplats som är helt eller delvis på engelska)
  • Komprimera databasen ofta.
  • Kör inte IPX i Microsoft Windows NT Server om Jet-databaser är placerade över nätverket och klienten är Microsoft Windows 95 med IPX/SPX. Kör i stället TCP-IP i Windows NT Server och en dubbel protokollstack med IPX och TCP-IP på Win95-klienten. (Vid Windows NT till Windows NT med IPX/SPX uppstår inte problemet, och inte heller med Novell till någon klient.)
  • Undvik ett stort antal öppnings-/stängningsoperationer i en loop (mer än 40 000 på varandra följande öppnings-/stängningsoperationer kan medföra skador).

Särskild anmärkning om konverterade databaser

I tidigare Access-versioner än Access 2002 finns det inget enkelt sätt att ta reda på vilka objekt som har påverkats och möjligen innehållit märkbara skador, om det inträffade fel under konvertering av en databas till den aktuella versionen.

När det uppstår fel i Microsoft Access 2002 eller senare vid konvertering av en Access-fil kan du visa en sammanfattning av felen genom att öppna tabellen Konverteringsfel i den nya Access-filen. Tabellen Konverteringsfel innehåller följande kolumner:

Objekttyp. Typen av databasobjekt där ett fel påträffades, eller "Databas" om ett fel har påträffats som inte är specifikt för en viss typ av objekt.

Objektnamn. Namnet på objektet där ett fel påträffades. Om ett kompileringsfel påträffas under konvertering anges emellertid inte namnet på modulen där felet finns.

Felbeskrivning: Vid behov kan du trycka på SKIFT+F2 om du vill se hela beskrivningen av felet.

Referenser

Gör så här om du vill veta mer om reparation av databaser: klicka på Hjälp om Microsoft AccessHjälp-menyn, skriv reparera i Office-assistenten eller Svarsguiden och klicka på Sök. Om du vill veta mer om felsökning av databaser i tidigare Access-versioner klickar du på följande artikelnummer och läser artiklarna i Microsoft Knowledge Base:
209137 Felsöka och reparera en skadad Jet 4.0-databas (Länken kan leda till en webbplats som är helt eller delvis på engelska)
279334 Reparera en skadad Jet 3.5-databas (Länken kan leda till en webbplats som är helt eller delvis på engelska)
109953 ACC: Felsöka och reparera skadade databaser för Jet 3.0 och tidigare
284152 Felsökning av allvarliga systemfel i Access 2002 som körs i Windows Millennium (Länken kan leda till en webbplats som är helt eller delvis på engelska)

Egenskaper

Artikel-id: 283849 - Senaste granskning: den 14 september 2006 - Revision: 6.2
Informationen i denna artikel gäller:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Nyckelord: 
kbcorrupt kbtshoot kbhowto KB283849

Ge feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com