Delen via


Een database herstellen naar een momentopname van een database

van toepassing op:SQL Server-

Als gegevens in een onlinedatabase beschadigd raken, kan het in sommige gevallen geschikt zijn om de database terug te zetten naar een momentopname die voorafgaat aan de schade, als alternatief voor het herstellen van de database vanuit een back-up. Het terugdraaien van een database kan bijvoorbeeld handig zijn voor het omkeren van een recente ernstige gebruikersfout, zoals een verwijderde tabel. Alle wijzigingen die zijn aangebracht nadat de momentopname is gemaakt, gaan echter verloren.

Voordat u begint

Beperkingen en beperkingen

Herstellen wordt niet ondersteund onder de volgende voorwaarden:

  • Er zijn meerdere momentopnamen voor de database. Voor het terugzetten mag er slechts één momentopname zijn voor de database waarnaar u van plan bent om terug te keren.

  • Alle alleen-lezen of gecomprimeerde bestandsgroepen bestaan in de database.

  • Bestanden zijn nu offline, maar waren online toen de momentopname werd gemaakt.

Voordat u een database terugdraait, moet u rekening houden met de volgende beperkingen:

  • Terugzetten is niet bedoeld voor mediaback-up. Een momentopname van een database is een onvolledige kopie van de databasebestanden. Als de database of de momentopname van de database beschadigd is, is het terugzetten van een momentopname waarschijnlijk onmogelijk. Zelfs wanneer het mogelijk is, is het terugdraaien in geval van beschadiging onwaarschijnlijk dat het probleem wordt opgelost. Daarom zijn het maken van regelmatige back-ups en het testen van uw herstelplan essentieel om een database te beveiligen. Zie Back-up maken en herstellen van SQL Server-databasesvoor meer informatie.

    Notitie

    Als u de brondatabase wilt herstellen naar het tijdstip waarop u een momentopname van een database hebt gemaakt, gebruikt u het volledige herstelmodel en implementeert u een back-upbeleid waarmee u dat kunt doen.

  • De oorspronkelijke brondatabase wordt overschreven door de herstelde database, zodat alle updates van de database sinds het maken van de momentopname verloren gaan.

  • De herstelbewerking overschrijft ook het oude logboekbestand en herbouwt het logboek. Daarom kunt u de herstelde database niet doorsturen naar het punt van de gebruikersfout. Daarom raden we u aan een back-up van het logboek te maken voordat u een database terugdraait.

    Notitie

    Hoewel u het oorspronkelijke logboek niet kunt herstellen om de database door te sturen, kan de informatie in het oorspronkelijke logboekbestand nuttig zijn voor het reconstrueren van verloren gegevens.

  • Als u teruggaat, wordt de back-upketen van het logboek verbroken. Dus voordat u logboekback-ups van de herstelde database kunt maken, moet u eerst een volledige databaseback-up of bestandsback-up maken. U wordt aangeraden een volledige databaseback-up te maken.

  • Tijdens een terugdraaibewerking zijn zowel de momentopname als de brondatabase niet beschikbaar. De brondatabase en momentopname zijn beide gemarkeerd als 'In herstel'. Als er een fout optreedt tijdens de terugdraaibewerking, probeert de terugdraaibewerking wanneer de database opnieuw wordt gestart, het terugdraaien te voltooien.

  • De metagegevens van een teruggedraaide database zijn hetzelfde als de metagegevens op het moment van de momentopname.

  • Als u herstelt, worden alle volledige tekstcatalogi verwijderd.

Voorwaarden

Zorg ervoor dat de brondatabase en de momentopname van de database voldoen aan de volgende vereisten:

Veiligheid

Machtigingen

Elke gebruiker met RESTORE DATABASE-machtigingen voor de brondatabase kan deze terugzetten naar de status wanneer een momentopname van een database is gemaakt.

Een database herstellen naar een momentopname van een database (met behulp van Transact-SQL)

Een database terugzetten naar een momentopname van een database

Notitie

Zie voorbeelden (Transact-SQL)verderop in deze sectie voor een voorbeeld van deze procedure.

  1. Identificeer de momentopname van de database waarnaar u de database wilt terugzetten. U kunt de momentopnamen op een database weergeven in SQL Server Management Studio (zie Een momentopname van een database (SQL Server) weergeven). U kunt ook de brondatabase van een weergave identificeren vanuit de source_database_id kolom van de sys.databases (Transact-SQL) catalogusweergave.

  2. Verwijder alle andere momentopnamen van de database.

    Zie Een momentopname van een database (Transact-SQL) verwijderenvoor meer informatie over het verwijderen van momentopnamen. Als de database gebruikmaakt van het volledige herstelmodel, moet u een back-up van het logboek maken voordat u teruggaat. Voor meer informatie, zie Back-up maken van een transactielogbestand (SQL Server) of Back-up maken van het transactielogbestand wanneer de database beschadigd is (SQL Server).

  3. Voer de terugdraaibewerking uit.

    Voor een herstelbewerking zijn HERSTEL DATABASE-machtigingen voor de brondatabase vereist. Gebruik de volgende Transact-SQL instructie om de database te herstellen:

    DATABASE-database_name HERSTELLEN VANUIT DATABASE_SNAPSHOT =database_snapshot_name

    Waar database_name de brondatabase is en database_snapshot_name de naam is van de momentopname waarnaar u de database wilt terugzetten. U ziet dat u in deze instructie een naam voor een momentopname moet opgeven in plaats van een back-upapparaat.

    Zie RESTORE (Transact-SQL)voor meer informatie.

    Notitie

    Tijdens de terugdraaibewerking zijn zowel de momentopname als de brondatabase niet beschikbaar. De brondatabase en momentopname zijn beide gemarkeerd als 'In restore'. Als er een fout optreedt tijdens de terugdraaibewerking, wordt geprobeerd het terugdraaien te voltooien wanneer de database opnieuw wordt gestart.

  4. Als de eigenaar van de database is gewijzigd sinds het maken van de momentopname van de database, wilt u misschien de eigenaar van de herstelde database bijwerken.

    Notitie

    De herstelde database behoudt de machtigingen en configuratie (zoals database-eigenaar en herstelmodel) van de momentopname van de database.

  5. Start de database.

  6. Maak desgewenst een back-up van de herstelde database, met name als deze gebruikmaakt van het volledige (of bulkgewijs vastgelegde) herstelmodel. Zie Een volledige databaseback-up (SQL Server) makenals u een back-up van een database wilt maken.

Voorbeelden (Transact-SQL)

Deze sectie bevat de volgende voorbeelden van het terugzetten van een database naar een momentopname van een database:

Een. Een momentopname terugzetten in de AdventureWorks-database

In dit voorbeeld wordt ervan uitgegaan dat er momenteel slechts één momentopname bestaat in de AdventureWorks2022-database. Zie Een momentopname (Transact-SQL) makenvoor het voorbeeld dat laat zien hoe de database hier wordt teruggezet.

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. Een momentopname terugdraaien in de verkoopdatabase

In dit voorbeeld wordt ervan uitgegaan dat er momenteel twee momentopnamen bestaan in de database Sales: sales_snapshot0600 en sales_snapshot1200. In het voorbeeld wordt de oudere momentopname verwijderd en wordt de database teruggezet naar de recentere momentopname.

Zie voor de code voor het maken van de voorbeelddatabase en momentopnamen waarvan dit voorbeeld afhankelijk is:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT database_id FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

Gerelateerde taken

Zie ook

Database Snapshots (SQL Server)
RESTORE (Transact-SQL)
sys.databases (Transact-SQL)
Databasespiegeling en Databasemomentopnamen (SQL Server)