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-
De enige manier om een momentopname van een SQL Server-database te maken, is door Transact-SQL te gebruiken. SQL Server Management Studio biedt geen ondersteuning voor het maken van databasemomentopnamen.
Voorwaarden
De brondatabase, die elk herstelmodel kan gebruiken, moet voldoen aan de volgende vereisten:
De serverexemplaren moeten een editie van SQL Server draaien die momentopnamen van de database ondersteunt. Zie Editions en ondersteunde functies van SQL Server 2022voor meer informatie over ondersteuning voor databasemomentopnamen in SQL Server.
De brondatabase moet online zijn, tenzij de database een gespiegelde database is binnen een databasespiegelingssessie.
Als u een momentopname van een database wilt maken in een gespiegelde database, moet de database de gesynchroniseerde status van spiegeling hebben.
De brondatabase kan niet worden geconfigureerd als een schaalbare gedeelde database.
Vóór SQL Server 2019 (15.x) kon de brondatabase geen
MEMORY_OPTIMIZED_DATA
bestandsgroep bevatten. Ondersteuning voor momentopnamen van databases in het geheugen is toegevoegd in SQL Server 2019 (15.x).
Belangrijk
Zie Database Snapshots (SQL Server)voor meer informatie over andere belangrijke overwegingen.
Aanbevelingen
In deze sectie worden de volgende aanbevolen procedures besproken:
- Beste werkwijze: databasesnapshots benoemen
- Best practice: het aantal momentopnamen van databases beperken
- Best practice: clientverbindingen met een momentopname van een database
Best practice: momentopnamen van databases een naam geven
Voordat u momentopnamen maakt, is het belangrijk om te overwegen hoe u deze een naam kunt geven. Voor elke momentopname van de database is een unieke databasenaam vereist. Voor beheergemak kan de naam van een momentopname informatie bevatten die de database identificeert, zoals:
De naam van de brondatabase.
Een aanwijzing dat de nieuwe naam bedoeld is voor een momentopname.
De aanmaakdatum en -tijd van de momentopname, een volgnummer of andere informatie, zoals tijdstip van de dag, om sequentiële momentopnamen in een bepaalde database te onderscheiden.
Denk bijvoorbeeld aan een reeks momentopnamen voor de AdventureWorks2022
-database. Er worden drie dagelijkse momentopnamen gemaakt met een interval van 6 uur tussen 6:00 en 18:00 uur, op basis van een 24-uursklok. Elke dagelijkse momentopname wordt 24 uur bewaard voordat deze wordt verwijderd en vervangen door een nieuwe momentopname van dezelfde naam. Elke naam van de momentopname geeft het uur aan, maar niet de dag:
AdventureWorks_snapshot_0600
AdventureWorks_snapshot_1200
AdventureWorks_snapshot_1800
Als de aanmaaktijd van deze dagelijkse momentopnamen varieert van dag tot dag, kan een minder nauwkeurige naamconventie de voorkeur hebben, bijvoorbeeld:
AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening
Best practice: het aantal momentopnamen van databases beperken
Door een reeks momentopnamen in de loop van de tijd te maken, worden opeenvolgende momentopnamen van de brondatabase vastgelegd. Elke momentopname blijft behouden totdat deze expliciet wordt verwijderd. Omdat elke momentopname blijft groeien naarmate de oorspronkelijke pagina's worden bijgewerkt, kunt u schijfruimte besparen door een oudere momentopname te verwijderen nadat u een nieuwe momentopname hebt gemaakt.
Notitie
Als u wilt terugkeren naar een momentopname van een database, moet u eventuele andere momentopnamen uit die database verwijderen.
Best practice: clientverbindingen met een momentopname van een database
Als u een momentopname van een database wilt gebruiken, moeten clients weten waar ze deze kunnen vinden. Gebruikers kunnen lezen uit de ene momentopname van de database terwijl een andere wordt gemaakt of verwijderd. Wanneer u echter een nieuwe momentopname vervangt door een bestaande, moet u clients omleiden naar de nieuwe momentopname. Gebruikers kunnen handmatig verbinding maken met een momentopname van een database met SQL Server Management Studio of Azure Data Studio. Als u echter een productieomgeving wilt ondersteunen, moet u een programma-oplossing maken zodat rapportage-clients automatisch worden omgeleid naar de nieuwe momentopname van de database.
Machtigingen
Elke gebruiker die een database kan maken, kan een momentopname van een database maken; Als u echter een momentopname van een gespiegelde database wilt maken, moet u lid zijn van de sysadmin vaste serverfunctie.
Een momentopname van een database maken met behulp van Transact-SQL
Op basis van de huidige grootte van de brondatabase moet u ervoor zorgen dat u voldoende schijfruimte hebt voor het opslaan van de momentopname van de database. De maximale grootte van een momentopname van een database is de grootte van de brondatabase bij het maken van een momentopname. Zie De grootte van het Sparse-bestand van een momentopname van een database (Transact-SQL) weergevenvoor meer informatie.
Geef een
CREATE DATABASE
verklaring uit voor de bestanden met behulp van deAS SNAPSHOT OF
clausule. Voor het maken van een momentopname moet u de logische naam opgeven van elk databasebestand van de brondatabase. De syntaxis is als volgt:CREATE DATABASE database_snapshot_name ON ( NAME = logical_file_name , FILENAME = 'os_file_name' ) [ , ...n ] AS SNAPSHOT OF source_database_name [;]
De argumenten zijn als volgt:
Argument Beschrijving database_snapshot_name
De naam van de momentopname waarnaar u de database wilt terugzetten. logical_file_name
De logische naam die de brondatabase in SQL Server gebruikt bij het verwijzen naar het bestand. os_file_name
Het pad en de bestandsnaam die door het besturingssysteem worden gebruikt bij het maken van het bestand. source_database_name
De brondatabase. Zie CREATE DATABASE (SQL Server Transact-SQL)voor een volledige beschrijving van deze syntaxis.
Notitie
Wanneer u een momentopname van een database maakt, worden logboekbestanden, offlinebestanden, het herstellen van bestanden en defunctbestanden niet toegestaan in de instructie
CREATE DATABASE
.
Voorbeelden
De .ss
extensie die in deze voorbeelden wordt gebruikt, is voor het gemak en is niet vereist. In databases met meerdere bestanden moeten alle bestanden worden opgegeven, in overeenstemming met de syntaxis. Bestandsgroepen worden niet opgegeven.
Een. Een momentopname maken in de AdventureWorks-database
In dit voorbeeld wordt een momentopname van de database gemaakt op de AdventureWorks
-database. De naam van de momentopname, AdventureWorks_dbss_1800
, en de bestandsnaam van het uitgedunde bestand, AdventureWorks_data_1800.ss
, geven de aanmaaktijd aan van 18.00 uur (6 uur 's avonds).
CREATE DATABASE AdventureWorks_dbss1800 ON (
NAME = AdventureWorks,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss'
) AS SNAPSHOT OF AdventureWorks;
GO
B. Een momentopname maken in de verkoopdatabase
In dit voorbeeld wordt een momentopname van een database gemaakt, sales_snapshot1200
, op de Sales
database. Dit is dezelfde voorbeelddatabase uit Een database maken met bestandsgroepen in CREATE DATABASE-.
--Create sales_snapshot1200 as snapshot of the Sales database:
CREATE DATABASE sales_snapshot1200 ON (
NAME = SPri1_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'
),
(
NAME = SPri2_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'
),
(
NAME = SGrp1Fi1_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'
),
(
NAME = SGrp1Fi2_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'
),
(
NAME = SGrp2Fi1_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'
),
(
NAME = SGrp2Fi2_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss'
) AS SNAPSHOT OF Sales;
GO