Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
Een database herstellen naar een momentopname van een database met behulp van:Transact-SQL-
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:
Controleer of de database niet is beschadigd.
Notitie
Als de database is beschadigd, moet u deze herstellen vanuit back-ups. Zie Volledige databaseherstelbewerkingen (Simple Recovery Model) of Volledige databaseherstel (Volledig herstelmodel)voor meer informatie.
Identificeer een recente momentopname die is gemaakt vóór de fout. Zie Een momentopname van een database (SQL Server) weergevenvoor meer informatie.
Verwijder eventuele andere momentopnamen die momenteel in de database aanwezig zijn. Zie voor meer informatie Een momentopname van een database verwijderen (Transact-SQL).
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.
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.
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).
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.
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.
Start de database.
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:
Zie 'Een database maken met bestandsgroepen' en 'Een momentopname maken' in CREATE DATABASE (SQL Server Transact-SQL)voor de Sales database en de momentopname van de sales_snapshot0600.
Voor de sales_snapshot1200 momentopname, zie 'Een momentopname maken in de verkoopdatabase' in Een momentopname van een database maken (Transact-SQL).
--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)