Delen via


Momentopnamen van databases (SQL Server)

van toepassing op:SQL Server-

Een momentopname van een database is een alleen-lezen statische weergave van een SQL Server-database (de brondatabase). Het is transactioneel consistent met de brondatabase vanaf het moment van de momentopname en bevindt zich altijd op hetzelfde serverexemplaar als de brondatabase. Databasemomentopnamen bieden een alleen-lezen weergave van de gegevens in dezelfde toestand als wanneer de momentopname is gemaakt, maar de grootte van het momentopnamebestand neemt toe wanneer er wijzigingen worden aangebracht in de brondatabase.

Hoewel momentopnamen van databases nuttig kunnen zijn tijdens belangrijke schema-upgrades en het mogelijk maken om terug te keren naar een eerdere status, is het van cruciaal belang om te begrijpen dat momentopnamen de noodzaak van regelmatige back-ups niet vervangen. U kunt geen back-ups van databasemomentopnamen maken of herstellen, wat betekent dat ze moeten worden gebruikt met een robuuste back-upstrategie om gegevensbeveiliging en herstel te garanderen als er gegevensverlies of beschadiging is.

Databasemomentopnamen worden gemaakt met de CREATE DATABASE T-SQL-syntaxis, gebruikmakend van de AS SNAPSHOT OF syntaxis.

Er kunnen meerdere momentopnamen bestaan in een bepaalde brondatabase. Elke momentopname van de database blijft behouden totdat de eigenaar van de database deze expliciet verwijdert.

Notitie

Databasemomentopnamen zijn niet gerelateerd aan back-ups van momentopnamen, Transact-SQL momentopnameback-ups, momentopname-isolatie van transacties of replicatie van momentopnamen.

Overzicht van functies

Database snapshots werken op het niveau van gegevenspagina's. Voordat een pagina van de brondatabase voor het eerst wordt gewijzigd, wordt de oorspronkelijke pagina gekopieerd van de brondatabase naar de momentopname. De momentopname slaat de oorspronkelijke pagina op, waarbij de gegevensrecords behouden blijven zoals ze bestonden toen de momentopname werd gemaakt. Hetzelfde proces wordt herhaald voor elke pagina die voor het eerst wordt gewijzigd. Voor de gebruiker wordt een momentopname van een database nooit gewijzigd omdat leesbewerkingen op een momentopname van een database altijd toegang hebben tot de oorspronkelijke gegevenspagina's, ongeacht waar ze zich bevinden.

De momentopname slaat de gekopieerde oorspronkelijke pagina's op met behulp van een of meer sparse-bestanden. In eerste instantie is een sparse-bestand een leeg bestand dat geen gebruikersgegevens bevat en nog geen schijfruimte voor gebruikersgegevens is toegewezen. De bestandsgrootte groeit naarmate er meer pagina's worden bijgewerkt in de brondatabase. In de volgende afbeelding ziet u de effecten van twee contrasterende updatepatronen op de grootte van een momentopname. Updatepatroon A weerspiegelt een omgeving waarin slechts 30 procent van de oorspronkelijke pagina's wordt bijgewerkt tijdens de levensduur van de momentopname. Updatepatroon B weerspiegelt een omgeving waarin 80 procent van de oorspronkelijke pagina's wordt bijgewerkt tijdens de levensduur van de momentopname.

diagram met alternatieve updatepatronen en momentopnamegrootte.

Voordelen

  • Momentopnamen kunnen worden gebruikt voor rapportagedoeleinden.

    • Clients kunnen een query uitvoeren op een momentopname van een database, waarmee rapporten kunnen worden geschreven op basis van de gegevens wanneer de momentopname wordt gemaakt.
  • Historische gegevens onderhouden voor het genereren van rapporten.

    • Een momentopname kan gebruikerstoegang tot gegevens vanaf een bepaald tijdstip uitbreiden. U kunt bijvoorbeeld een momentopname van een database maken voor latere rapportage aan het einde van een bepaalde periode (zoals een financieel kwartaal). U kunt vervolgens eindrapporten van de periode uitvoeren op de momentopname. Als schijfruimte is toegestaan, kunt u ook momentopnamen voor onbepaalde tijd onderhouden, zodat query's op basis van de resultaten van deze perioden bijvoorbeeld de prestaties van de organisatie kunnen onderzoeken.
  • Het gebruik van een gespiegelde database die u onderhoudt voor beschikbaarheidsdoeleinden om rapportage te offloaden.

    • Door databasemomentopnamen te gebruiken met databasespiegeling, kunt u de gegevens op de mirrorserver toegankelijk maken voor rapportage. Daarnaast kan het uitvoeren van query's op de gespiegelde database resources vrijmaken voor de hoofdserver. Zie databasespiegeling en databasemomentopnamen (SQL Server)voor meer informatie.
  • Gegevens beschermen tegen administratieve fouten.

  • Als er een gebruikersfout optreedt in een brondatabase, kunt u deze terugzetten naar de status wanneer een momentopname van een database wordt gemaakt. Gegevensverlies is beperkt tot updates van de database sinds het maken van de momentopname.

    • Voordat u bijvoorbeeld belangrijke updates uitvoert, zoals een bulkupdate of een schemawijziging, maakt u een momentopname van de database om gegevens te beveiligen. Als u een fout maakt, kunt u de momentopname gebruiken om te herstellen door de database terug te zetten naar de momentopname. Omkeren is sneller dan herstellen vanuit een back-up; u kunt echter niet verdergaan.

      Belangrijk

      Terugzetten werkt niet in een offline of beschadigde database. Daarom zijn regelmatige back-ups en het testen van uw herstelplan nodig om een database te beveiligen.

      Notitie

      Databasemomentopnamen zijn afhankelijk van de brondatabase. Daarom is het gebruik van momentopnamen om een database terug te zetten geen vervanging voor uw back-up- en herstelstrategie. Het uitvoeren van al uw geplande back-ups blijft essentieel. Als u de brondatabase moet herstellen naar het punt waar u een momentopname van een database hebt gemaakt, implementeert u een back-upbeleid waarmee u dat kunt doen.

  • Gegevens beschermen tegen gebruikersfouten.

  • Door regelmatig databasemomentopnamen te maken, kunt u de gevolgen van een grote gebruikersfout beperken, zoals een verwijderde tabel. Voor een hoog beschermingsniveau kunt u een reeks momentopnamen van databases maken die voldoende tijd hebben om de meeste gebruikersfouten te herkennen en erop te reageren. Afhankelijk van uw schijfbronnen kunt u bijvoorbeeld 6 tot 12 rolling momentopnamen onderhouden gedurende een interval van 24 uur. Telkens wanneer er een nieuwe momentopname wordt gemaakt, kan de vroegste momentopname worden verwijderd.

    • Als u een gebruikersfout wilt herstellen, kunt u de database direct vóór de fout terugzetten naar de momentopname. Terugzetten is mogelijk veel sneller dan herstellen vanuit een back-upkopie; u kunt daarna echter niet verdergaan.

    • U kunt ook handmatig een verwijderde tabel of andere verloren gegevens uit de gegevens in een momentopname reconstrueren. U kunt bijvoorbeeld bulksgewijs de gegevens uit de momentopname naar de database kopiëren en de gegevens handmatig samenvoegen in de database.

      Notitie

      Uw redenen voor het gebruik van databasemomentopnamen bepalen hoeveel gelijktijdige momentopnamen u nodig hebt voor een database, hoe vaak u een nieuwe momentopname maakt en hoe lang u deze wilt bewaren.

  • Een testdatabase beheren.

    • In een testomgeving kan het handig zijn dat de database identieke gegevens bevat aan het begin van elke testronde wanneer een testprotocol herhaaldelijk wordt uitgevoerd. Voordat u de eerste ronde uitvoert, kan een toepassingsontwikkelaar of -tester een momentopname van de testdatabase maken. Na elke testuitvoering kan de database snel worden teruggezet naar de vorige status door de momentopname van de database te herstellen.

Termen en definities

Databasemomentopnamen in SQL Server omvatten verschillende belangrijke termen en definities. Een databasemomentopname is een alleen-lezen, statische weergave van een database (de brondatabasegenoemd) op een bepaald moment. De brondatabase is de oorspronkelijke database waarop de momentopname is gebaseerd, en deze moet online blijven en toegankelijk blijven om de momentopname bruikbaar te maken. Sparse-bestanden de oorspronkelijke pagina's van de brondatabase opslaan die zijn gewijzigd sinds de momentopname is gemaakt. Deze bestanden zijn in eerste instantie leeg en groeien naarmate er wijzigingen optreden in de brondatabase. Inzicht in deze termen is essentieel voor het effectief beheren en gebruiken van databasemomentopnamen in SQL Server.

Momentopname van de database

Een transactioneel consistente, alleen-lezen, statische weergave van een database (de brondatabase).

Brondatabase

Voor een momentopname van een database is de database waarop de momentopname is gemaakt. Databasemomentopnamen zijn afhankelijk van de brondatabase. De momentopnamen van een database moeten zich op hetzelfde serverexemplaren bevinden als de database. Als die database om welke reden dan ook niet meer beschikbaar is, zijn de momentopnamen bovendien niet meer beschikbaar.

Sparse-bestand

Het NTFS-bestandssysteem biedt een bestand dat veel minder schijfruimte vereist dan anders nodig zou zijn. Een sparse-bestand wordt gebruikt voor het opslaan van pagina's die zijn gekopieerd naar een momentopname van de database. Wanneer een sparse-bestand voor het eerst wordt gemaakt, neemt het weinig schijfruimte in beslag. Wanneer gegevens naar een momentopname van een database worden geschreven, wijst NTFS geleidelijk schijfruimte toe aan het bijbehorende sparse-bestand.

Voorwaarden

De brondatabase, die elk herstelmodel kan gebruiken, moet voldoen aan de volgende vereisten:

  • De serverinstantie moet draaien op een versie van SQL Server die databasemomentopnamen ondersteunt.

  • De brondatabase moet online zijn, tenzij het een gespiegelde database is binnen een databasespiegelingssessie.

  • U kunt een momentopname van een database maken in een beschikbaarheidsgroep op elke primaire of secundaire database. De replicarol moet PRIMAIR of SECUNDAIR zijn, niet in de status OPLOSSEN.

  • Het wordt aanbevolen dat de synchronisatiestatus van de database SYNCHRONISEREND of SYNCHRONISEERD is wanneer u een momentopname van een database maakt. Databasemomentopnamen kunnen echter worden gemaakt wanneer de status NIET SYNCHRONISEERT.

  • Om een momentopname van een gespiegelde database te maken, moet de database zich in de gesynchroniseerde spiegelingstoestand bevinden.

  • De brondatabase kan niet worden geconfigureerd als een schaalbare gedeelde database.

  • Vóór SQL Server 2019 kon de brondatabase geen MEMORY_OPTIMIZED_DATA bestandsgroep bevatten. Ondersteuning voor momentopnamen van databases in het geheugen is toegevoegd in SQL Server 2019.

  • Alle herstelmodellen ondersteunen databasesnapshots.

Beperkingen voor de brondatabase

Zolang er een momentopname van een database bestaat, gelden de volgende beperkingen voor de brondatabase van de momentopname:

  • De database kan niet worden verwijderd, losgekoppeld of hersteld.

  • Het maken van back-ups van de brondatabase werkt meestal, maar dit wordt niet beïnvloed door momentopnamen van databases.

  • De prestaties worden verminderd vanwege een verhoogde I/O op de brondatabase als gevolg van een kopieer-on-write-bewerking naar de momentopname telkens wanneer een pagina wordt bijgewerkt.

  • Bestanden kunnen niet worden verwijderd uit de brondatabase of momentopnamen.

Beperkingen voor databasemomentopnamen

Databasemomentopnamen zijn afhankelijk van de brondatabase en beschermen niet tegen schijffouten of beschadiging. Hoewel ze nuttig kunnen zijn voor rapportagedoeleinden of tijdens schemawijzigingen, moeten ze daarom aanvullen, niet vervangen, normale back-upprocedures. Als u de brondatabase wilt herstellen naar het punt waar u een momentopname van een database hebt gemaakt, implementeert u een back-upbeleid waarmee u dat kunt doen.

De volgende beperkingen zijn van toepassing op momentopnamen van databases:

  • Er moet een momentopname van de database worden gemaakt en op hetzelfde serverexemplaar blijven als de brondatabase.

  • Databasemomentopnamen bewerken altijd een volledige database.

  • Databasemomentopnamen zijn afhankelijk van de brondatabase en zijn geen redundante opslag. Ze beschermen niet tegen schijffouten of andere typen beschadigingen. Daarom is het gebruik van momentopnamen om een database terug te zetten geen vervanging voor uw back-up- en herstelstrategie. Het uitvoeren van al uw geplande back-ups blijft essentieel. Als u de brondatabase moet herstellen naar het punt waar u een momentopname van een database hebt gemaakt, implementeert u een back-upbeleid waarmee u dat kunt doen.

Wanneer een pagina die wordt bijgewerkt op de brondatabase naar een momentopname wordt gepusht, wordt deze verdachte en moet deze worden verwijderd als de momentopname onvoldoende schijfruimte heeft of een andere fout tegenkomt.

  • Momentopnamen zijn alleen lezen. Omdat ze alleen lezen zijn, kunnen ze niet worden bijgewerkt. Daarom worden databasemomentopnamen niet verwacht na een upgrade levensvatbaar te zijn.

  • Momentopnamen van de model, masteren tempdb databases zijn verboden.

  • U kunt de specificaties van de momentopnamebestanden van de database niet wijzigen.

  • U kunt geen bestanden verwijderen uit een momentopname van een database.

  • U kunt geen back-ups maken van momentopnamen van databases of deze herstellen.

  • U kunt geen momentopnamen van databases koppelen of loskoppelen.

  • U kunt geen momentopnamen van databases maken op het FAT32-bestandssysteem of RAW-partities. Het NTFS-bestandssysteem biedt de sparsebestanden die worden gebruikt door momentopnamen van databases.

  • Indexering in volledige tekst wordt niet ondersteund voor momentopnamen van databases. Catalogussen met volledige tekst worden niet doorgegeven vanuit de brondatabase.

  • Een momentopname van een database neemt de beveiligingsbeperkingen van de brondatabase over op het moment dat de momentopname wordt gemaakt. Omdat momentopnamen alleen-lezen zijn, kunnen geërfde machtigingen niet worden gewijzigd en worden wijzigingen in machtigingen die in de bron zijn aangebracht niet weerspiegeld in bestaande momentopnamen.

  • Een momentopname weerspiegelt altijd de status van bestandsgroepen op het moment dat er momentopnamen worden gemaakt: online bestandsgroepen blijven online en offline bestandsgroepen blijven offline. Zie 'Databasemomentopnamen met offline bestandsgroepen' verderop in dit artikel voor meer informatie.

  • Als een brondatabase RECOVERY_PENDING wordt, kunnen de momentopnamen ontoegankelijk worden. Nadat het probleem in de brondatabase is opgelost, moeten de momentopnamen echter opnieuw beschikbaar zijn.

  • Herstellen wordt niet ondersteund voor ntfs-alleen-lezen of NTFS gecomprimeerde bestanden in de database. Pogingen om een database met een van deze typen bestandsgroepen te herstellen, mislukken.

  • In een configuratie voor logboekverzending kunnen databasemomentopnamen alleen worden gemaakt op de primaire database, niet op een secundaire database. Stel dat u schakelt tussen de primaire en secundaire serverinstanties. In dat geval moet u alle momentopnamen van de database verwijderen voordat u de primaire database instelt als secundaire database.

  • Een momentopname van een database kan niet worden geconfigureerd als een schaalbare gedeelde database.

Databasemomentopnamen bieden geen ondersteuning voor FILESTREAM-bestandsgroepen. Als FILESTREAM-bestandsgroepen aanwezig zijn in een brondatabase, worden ze gemarkeerd als offline in de databasemomentopnamen en kunnen de momentopnamen niet worden gebruikt om de database te herstellen.

Notitie

Een SELECT-instructie die wordt uitgevoerd op een momentopname van een database, mag geen FILESTREAM-kolom opgeven; anders wordt het volgende foutbericht geretourneerd: Could not continue scan with NOLOCK due to data movement.

  • Wanneer statistieken op een momentopname met alleen-lezen ontbreken of verouderd zijn, maakt en onderhoudt de Database Engine tijdelijke statistieken in tempdb. Zie Statistics voor meer informatie.

Schijfruimte

Databasemomentopnamen verbruiken schijfruimte. Als een momentopname van een database onvoldoende schijfruimte heeft, wordt deze gemarkeerd als verdacht en moet deze worden verwijderd. (De brondatabase wordt echter niet beïnvloed; acties op de database worden normaal voortgezet.)

Momentopnamen zijn echter zeer ruimte-efficiënt vergeleken met een volledige kopie van een database. Voor een momentopname is slechts voldoende opslagruimte vereist voor de pagina's die tijdens de levensduur worden gewijzigd. Over het algemeen worden momentopnamen gedurende een beperkte tijd bewaard, dus hun grootte is geen belangrijk probleem.

Hoe langer u echter een momentopname bewaart, hoe groter de kans dat beschikbare ruimte wordt opgebruikt. De maximale grootte waarop een sparse-bestand kan groeien, is de bijbehorende grootte van het brondatabasebestand op het moment dat de momentopname is gemaakt. Een momentopname van een database moet worden verwijderd (verwijderd) als er onvoldoende schijfruimte beschikbaar is.

Notitie

Met uitzondering van bestandsruimte verbruikt een momentopname van een database ongeveer zoveel resources als een database.

Offlinebestandsgroepen

Offlinebestandsgroepen in de brondatabase zijn van invloed op momentopnamen van databases wanneer u een van de volgende handelingen probeert uit te voeren:

  • Maak een momentopname.

    • Wanneer een brondatabase een of meer offlinebestandsgroepen heeft, slaagt het maken van momentopnamen met de bestandsgroepen offline. Sparse-bestanden worden niet gemaakt voor de offlinebestandsgroepen.
  • Een bestandsgroep offline halen

    • U kunt een bestand offline halen in de brondatabase. De bestandsgroep blijft echter online in databasemomentopnamen als deze online was toen de momentopname werd gemaakt. Als de opgevraagde gegevens zijn gewijzigd sinds het maken van de momentopname, is de oorspronkelijke gegevenspagina toegankelijk in de momentopname. Query's die gebruikmaken van de momentopname voor toegang tot ongewijzigde gegevens in de bestandsgroep, mislukken echter waarschijnlijk met I/O-fouten (input/output).
  • Een bestandsgroep online brengen

    • U kunt een bestandsgroep niet online brengen in een database met momentopnamen van databases. Als een bestandsgroep offline is op het moment van het maken van een momentopname of offline wordt genomen terwijl er een momentopname van de database bestaat, blijft deze offline. Dit komt doordat het online brengen van een bestand het herstellen omvat. Dit is niet mogelijk als er een momentopname van een database op de database bestaat.
  • De brondatabase terugzetten naar de momentopname

    • Als u een brondatabase terugdraait naar een momentopname van een database, moeten alle bestandsgroepen online zijn, met uitzondering van de groepen die offline waren toen de momentopname werd gemaakt.