Dela via


Återställ sidor (SQL Server)

gäller för:SQL Server

Det här avsnittet beskriver hur du återställer sidor i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Målet med en sidåterställning är att återställa en eller flera skadade sidor utan att återställa hela databasen. Vanligtvis har sidor som är kandidater för återställning markerats som "misstänkta" på grund av ett fel som uppstår vid åtkomst till sidan. Misstänkta sidor identifieras i tabellen suspect_pages i databasen msdb.

i det här avsnittet

Innan du börjar

När är en sidåterställning användbar?

En sidåterställning är avsedd för reparation av isolerade skadade sidor. Det kan gå snabbare att återställa och återställa några enskilda sidor än en filåterställning, vilket minskar mängden data som är offline under en återställningsåtgärd. Men om du måste återställa fler än några sidor i en fil är det i allmänhet mer effektivt att återställa hela filen. Om till exempel många sidor på en enhet anger ett väntande enhetsfel kan du överväga att återställa filen, eventuellt till en annan plats, och reparera enheten.

Dessutom kräver inte alla sidfel en återställning. Ett problem kan uppstå i cachelagrade data, till exempel ett sekundärt index, som kan lösas genom att beräkna om data. Om databasadministratören till exempel släpper ett sekundärt index och återskapar det, anges inte skadade data, även om de är fasta, som sådana i tabellen suspect_pages.

Begränsningar och restriktioner

  • Sidåterställning gäller för SQL Server-databaser som använder de fullständiga eller massloggade återställningsmodellerna. Sidåterställning stöds endast för läs-/skrivfilgrupper.

  • Det går bara att återställa databassidor. Sidåterställning kan inte användas för att återställa följande:

    • Transaktionsloggen

    • Allokeringssidor: SIDOR med global allokeringskarta (GAM), SGAM-sidor (Delad global allokeringskarta) och PFS-sidor (Sidfritt utrymme).

    • Sida 0 för alla datafiler (startsidan för filen)

    • Sida 1:9 (startsidan för databasen)

    • Fulltextkatalog

  • För en databas som använder den massloggade återställningsmodellen har sidåterställningen följande ytterligare villkor:

    • Säkerhetskopiering när filgrupps- eller siddata är offline är problematiskt för massloggade data, eftersom offlinedata inte registreras i loggen. Alla offlinesidor kan förhindra säkerhetskopiering av loggen. I det här fallet bör du överväga att använda DBCC REPAIR, eftersom detta kan orsaka mindre dataförlust än återställning till den senaste säkerhetskopieringen.

    • Om en loggbackup av en massloggad databas påträffar en felaktig sida misslyckas den förutom om "WITH CONTINUE_AFTER_ERROR" anges.

    • Sidåterställning fungerar vanligtvis inte med massloggad återställning.

      Ett bra sätt att utföra sidåterställning är att ange databasen till den fullständiga återställningsmodellen och prova en loggsäkerhetskopia. Om loggbackupen fungerar kan du fortsätta med sidåterställningen. Om loggsäkerhetskopieringen misslyckas måste du antingen förlora arbetet sedan den senaste loggsäkerhetskopian eller köra DBCC med alternativet REPAIR_ALLOW_DATA_LOSS för att försöka återställa.

Rekommendationer

  • Scenarier för sidåterställning:

    Återställning av offlinesida
    Alla utgåvor av SQL Server stöder återställning av sidor när databasen är offline. Vid en sidåterställning offline är databasen offline medan skadade sidor återställs. I slutet av återställningssekvensen är databasen online.

    Online-sidåterställning
    SQL Server Enterprise-utgåvan stöder sidåterställningar online, men de använder offlineåterställning om databasen för närvarande är offline. I de flesta fall kan en skadad sida återställas medan databasen förblir online, inklusive den filgrupp som en sida återställs till. När den primära filgruppen är online, även om en eller flera av dess sekundära filgrupper är offline, utförs vanligtvis sidåterställningar online. Ibland kan dock en skadad sida kräva en offlineåterställning. Till exempel kan skador på vissa kritiska sidor hindra databasen från att starta.

    Varning

    Om skadade sidor lagrar viktiga databasmetadata kan nödvändiga uppdateringar av metadata misslyckas under ett försök att återställa onlinesidan. I det här fallet kan du utföra en sidåterställning offline, men först måste du skapa en säkerhetskopia av tail log (genom att säkerhetskopiera transaktionsloggen med RESTORE WITH NORECOVERY).

  • Sidåterställning drar nytta av förbättrad felrapportering på sidnivå (inklusive sidkontrollsummor) och spårning. Sidor som identifieras som skadade av kontrollsummering eller en ofullständig skrivning, skadade sidor, kan återställas med en sidåterställning. Endast explicit angivna sidor återställs. Varje angiven sida ersätts av kopian av den sidan från den angivna säkerhetskopieringen av data.

    När du återställer efterföljande loggsäkerhetskopior tillämpas de endast på databasfiler som innehåller minst en sida som återställs. En sammanhängande kedja av loggbackupkopior måste tillämpas på den senaste fullständiga eller differentiella återställningen för att uppdatera filgruppen som innehåller sidan till den aktuella loggfilen. Precis som vid en filåterställning avanceras roll forward-uppsättningen med ett enda loggåterställningspass. För att en sidåterställning ska lyckas måste de återställda sidorna återställas till ett tillstånd som överensstämmer med databasen.

Säkerhet

Behörigheter

Om databasen som återställs inte finns måste användaren ha behörigheten SKAPA DATABAS för att kunna köra RESTORE. Om databasen finns, ges återställningsbehörigheter som standard till medlemmar i sysadmin och dbcreator fasta serverroller och ägaren (dbo) för databasen (för alternativet FROM DATABASE_SNAPSHOT existerar databasen alltid).

ÅTERSTÄLLNINGsbehörigheter ges till roller där medlemskapsinformation alltid är lättillgänglig för servern. Eftersom medlemskap i fast databasroll endast kan kontrolleras när databasen är tillgänglig och oskadad, vilket inte alltid är fallet när RESTORE körs, har medlemmar i db_owner fast databasroll inte RESTORE-behörighet.

Använda SQL Server Management Studio

Från och med SQL Server 2016 (13.x) stöder SQL Server Management Studio sidåterställningar.

Så här återställer du sidor

  1. Anslut till lämplig instans av SQL Server Database Engine i Object Explorer och klicka på servernamnet för att expandera serverträdet.

  2. Expandera Databaser. Beroende på databasen väljer du antingen en användardatabas eller expanderar systemdatabaseroch väljer sedan en systemdatabas.

  3. Högerklicka på databasen, peka på Uppgifter, peka på Återställoch klicka sedan på Sida, som öppnar dialogrutan Återställ sida.

    Återställ
    Det här avsnittet utför samma funktion som för Återställ tillÅterställ databas (Allmän sida).

    Databas
    Anger databasen som ska återställas. Du kan ange en ny databas eller välja en befintlig databas i listrutan. Listan innehåller alla databaser på servern, förutom systemdatabaserna master och tempdb.

    Varning

    Om du vill återställa en lösenordsskyddad säkerhetskopia måste du använda instruktionen RESTORE.

    Tail-Log säkerhetskopiering
    Ange eller välj ett filnamn i Säkerhetskopieringsenhet där säkerhetskopian av slutloggen lagras för databasen.

    säkerhetskopieringsuppsättningar
    I det här avsnittet visas de säkerhetskopieringsuppsättningar som ingår i återställningen.

    Rubrik Värden
    namn Namnet på säkerhetskopieringsuppsättningen.
    Komponent Den säkerhetskopierade komponenten: Database, Fileeller <tom> (för transaktionsloggar).
    typ Typen av säkerhetskopiering som utförs: Fullständig, Differentielleller transaktionslogg.
    Server Namnet på den databasmotorinstans som utförde säkerhetskopieringsåtgärden.
    Database Namnet på databasen som ingår i säkerhetskopieringsåtgärden.
    position Positionen för den säkerhetskopiering som angetts i volymen.
    första LSN- Loggsekvensnumret (LSN) för den första transaktionen i säkerhetskopieringsuppsättningen. Tom plats för filsäkerhetskopior.
    senaste LSN- Loggsekvensnumret (LSN) för den senaste transaktionen i säkerhetskopieringsuppsättningen. Tom för filsäkerhetskopior.
    Kontrollpunkt LSN Loggsekvensnumret (LSN) för den senaste kontrollpunkten när säkerhetskopieringen skapades.
    fullständiga LSN- Loggsekvensnumret (LSN) för den senaste fullständiga databassäkerhetskopian.
    startdatum Datum och tid då säkerhetskopieringen påbörjades, som visas i den regionala inställningen för klienten.
    Slutdatum Datum och tid när säkerhetskopieringen har slutförts, som visas i den regionala inställningen för klienten.
    Storlek Storleken på säkerhetskopieringen i byte.
    användarnamn Namnet på den användare som utförde säkerhetskopieringen.
    förfallodatum Datum och tid då säkerhetskopieringsuppsättningen upphör att gälla.

    Klicka på Verifiera för att kontrollera integriteten för de säkerhetskopierade filer som behövs för att utföra sidåterställningsåtgärden.

  4. Om du vill identifiera skadade sidor med rätt databas markerad i rutan Database klickar du på Kontrollera databassidor. Det här är en tidskrävande åtgärd.

    Varning

    Om du vill återställa specifika sidor som inte är skadade klickar du på Lägg till och anger fil-ID och sid-ID för de sidor som ska återställas.

  5. Sidrutnätet används för att identifiera de sidor som ska återställas. Till en början fylls det här rutnätet i från systemtabellen suspect_pages. Om du vill lägga till eller ta bort sidor från rutnätet klickar du på Lägg till eller Ta bort. Mer information finns i Hantera tabellen suspect_pages (SQL Server).

  6. I Säkerhetskopieringsuppsättningar-rutnätet listas säkerhetskopieringsuppsättningarna i standardåterställningsplanen. Du kan också klicka på Verifiera för att kontrollera att säkerhetskopiorna är läsbara och att säkerhetskopieringsuppsättningarna är slutförda, utan att återställa dem. Mer information finns i RESTORE VERIFYONLY (Transact-SQL).

    sidor

  7. Om du vill återställa sidorna i sidrutnätet klickar du på OK.

Använda Transact-SQL

Om du vill ange en sida i en RESTORE DATABASE-instruktion behöver du fil-ID:t för filen som innehåller sidan och sidans sid-ID. Den obligatoriska syntaxen är följande:

 RESTORE DATABASE <database_name>  
  
 PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
  
 FROM <backup_device> [ ,... n ]
  
 WITH NORECOVERY

Mer information om parametrarna för alternativet PAGE finns i RESTORE-argument (Transact-SQL). Mer information om syntaxen för RESTORE DATABASE finns i RESTORE (Transact-SQL).

Så här återställer du sidor

  1. Hämta sid-ID:t för de skadade sidorna som ska återställas. Ett kontrollsumma- eller sönderrivet skrivfel returnerar sid-ID med den information som krävs för att ange sidorna. Om du vill söka efter sid-ID för en skadad sida använder du någon av följande källor.

    Källa för sid-ID Ämne
    msdb..suspect_pages Hantera suspect_pages-tabellen (SQL Server)
    Felloggfil Visa fel-loggen i SQL Server (SQL Server Management Studio)
    Händelsespårningar Övervaka och svara på händelser
    DBCC DBCC (Transact-SQL)
    WMI-leverantör WMI-provider för koncept av serverhändelser
  2. Starta en sidåterställning med en fullständig databas, fil eller filgruppssäkerhetskopia som innehåller sidan. I instruktionen RESTORE DATABASE (ÅTERSTÄLL DATABAS) använder du PAGE-satsen för att visa sid-ID:t för alla sidor som ska återställas.

  3. Använd de senaste differenserna.

  4. Använd efterföljande loggsäkerhetskopior.

  5. Skapa en ny loggsäkerhetskopia av databasen som innehåller det sista LSN:t för de återställde sidorna, d.v.s. den punkt då den senast återställde sidan tas offline. Det sista LSN:t, som anges som en del av den första återställningen i sekvensen, är redo-målet LSN. Online-distributionen av filen som innehåller sidan kan stoppas vid det omgjorda mål-LSN:et. Information om den aktuella omgjorda mål-LSN:en för en fil finns i kolumnen redo_target_lsn i sys.master_files. Mer information finns i sys.master_files (Transact-SQL).

  6. Återställ den nya loggsäkerhetskopian. När den nya loggbackupen har tillämpats slutförs sidåterställningen. Sidorna kan nu användas.

    Notera

    Den här sekvensen motsvarar en filåterställningssekvens. I själva verket kan både sidåterställning och filåterställningar utföras som en del av samma sekvens.

Exempel (Transact-SQL)

I följande exempel återställs fyra skadade sidor i filen B med NORECOVERY. Därefter tillämpas två loggbackuper med NORECOVERY, följt av tail-loggbackupen, som återställs med RECOVERY. Det här exemplet utför en onlineåterställning. I exemplet är fil-ID:t för filen B1och sid-ID:t för de skadade sidorna är 57, 202, 916och 1016.

RESTORE DATABASE [<database>] PAGE='1:57, 1:202, 1:916, 1:1016'  
   FROM DISK = '<file_backup_of_file_B>'
   WITH NORECOVERY;  
RESTORE LOG [<database>] FROM [<log_backup>]
   WITH NORECOVERY;  
RESTORE LOG [<database>] FROM [<log_backup>]
   WITH NORECOVERY;   
BACKUP LOG [<database>] TO [<new_log_backup>];
RESTORE LOG [<database>] FROM [<new_log_backup>] WITH RECOVERY;  
GO

Se även

RESTORE (Transact-SQL)
Tillämpa säkerhetskopieringar av transaktionsloggar (SQL Server)
Hantera suspect_pages-tabellen (SQL Server)
säkerhetskopiering och återställning av SQL Server-databaser