Erstellen einer Datenbankmomentaufnahme (Transact-SQL)Create a Database Snapshot (Transact-SQL)

GILT FÜR: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

Eine SQL ServerSQL Server -Datenbankmomentaufnahme kann nur mithilfe von Transact-SQLTransact-SQLerstellt werden.The only way to create a SQL ServerSQL Server database snapshot is to use Transact-SQLTransact-SQL. SQL Server Management StudioSQL Server Management Studio nicht unterstützt.does not support the creation of database snapshots.

VorbereitungenBefore You Begin

VoraussetzungenPrerequisites

Die Quelldatenbank, die ein Wiederherstellungsmodell verwenden kann, muss die folgenden Voraussetzungen erfüllen:The source database, which can use any recovery model, must meet the following prerequisites:

  • Die Serverinstanz muss eine Edition von SQL ServerSQL Server ausführen, die Datenbankmomentaufnahmen unterstützt.The server instance must be running an edition of SQL ServerSQL Server that supports database snapshot. Informationen zu unterstützten Datenbank-Momentaufnahmen in SQL Server 2019 (15.x)SQL Server 2019 (15.x)finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen.For information about support for database snapshots in SQL Server 2019 (15.x)SQL Server 2019 (15.x), see Features Supported by the Editions of SQL Server 2016.

  • Die Quelldatenbank muss online sein, es sei denn, bei der Datenbank handelt es sich um eine Spiegeldatenbank innerhalb einer Datenbank-Spiegelungssitzung.The source database must be online, unless the database is a mirror database within a database mirroring session.

  • Zum Erstellen einer Datenbank-Momentaufnahme für die Spiegeldatenbank muss sich die Datenbank im synchronisierten Spiegelungsstatusbefinden.To create a database snapshot on a mirror database, the database must be in the synchronized mirroring state.

  • Die Quelldatenbank kann nicht als skalierbare freigegebene Datenbank konfiguriert werden.The source database cannot be configured as a scalable shared database.

  • Die Quelldatenbank darf keine MEMORY_OPTIMIZED_DATA-Dateigruppe enthalten.The source database must not contain a MEMORY_OPTIMIZED_DATA filegroup. Weitere Informationen finden Sie unter Nicht unterstützte SQL Server-Features für In-Memory OLTP.For more information, see Unsupported SQL Server Features for In-Memory OLTP.

Wichtig

Informationen zu anderen bedeutenden Überlegungen finden Sie unter Datenbank-Momentaufnahmen (SQL Server)erstellt werden.For information about other significant considerations, see Database Snapshots (SQL Server).

EmpfehlungenRecommendations

In diesem Abschnitt werden die folgenden bewährten Methoden erläutert:This section discusses the following best practices:

Bewährte Methode: Benennen von DatenbankmomentaufnahmenBest Practice: Naming Database Snapshots

Vor dem Erstellen von Momentaufnahmen müssen Sie unbedingt überlegen, wie Sie diese benennen.Before creating snapshots, it is important to consider how to name them. Jede Datenbankmomentaufnahme erfordert einen eindeutigen Datenbanknamen.Each database snapshot requires a unique database name. Um den Verwaltungsaufwand zu reduzieren, kann der Name einer Momentaufnahme Informationen enthalten, mit denen die Datenbank identifiziert wird:For administrative ease, the name of a snapshot can incorporate information that identifies the database, such as:

  • Der Name der Quelldatenbank.The name of the source database.

  • Einen Hinweis, dass der neue Name für eine Momentaufnahme istAn indication that the new name is for a snapshot.

  • Das Erstellungsdatum und die Erstellungszeit der Momentaufnahme, eine Sequenznummer oder sonstige Informationen, wie z. B. die Tageszeit, um sequenzielle Momentaufnahmen in einer bestimmten Datenbank zu unterscheidenThe creation date and time of the snapshot, a sequence number, or some other information, such as time of day, to distinguish sequential snapshots on a given database.

Angenommen, Sie haben eine Reihe von Momentaufnahmen für die AdventureWorks2012AdventureWorks2012 -Datenbank.For example, consider a series of snapshots for the AdventureWorks2012AdventureWorks2012 database. Täglich werden drei Momentaufnahmen im Abstand von sechs Stunden zwischen 6:00 UhrThree daily snapshots are created at 6-hour intervals between 6 A.M. und 18:00 Uhr erstellt (24-Stunden-System).and 6 P.M., based on a 24-hour clock. Jede tägliche Momentaufnahme wird nach 24 Stunden gelöscht und durch eine neue gleichnamige Momentaufnahme ersetzt.Each daily snapshot is kept for 24 hours before being dropped and replaced by a new snapshot of the same name. Beachten Sie, dass jeder Momentaufnahmename einen Hinweis auf die Uhrzeit, aber nicht auf den Tag enthält:Note that each snapshot name indicates the hour, but not the day:

AdventureWorks_snapshot_0600  
AdventureWorks_snapshot_1200  
AdventureWorks_snapshot_1800  

Falls alternativ die Erstellungszeit dieser täglichen Momentaufnahmen von Tag zu Tag variiert, ist möglicherweise eine weniger präzise Benennungskonvention vorzuziehen, wie beispielsweise:Alternatively, if the creation time of these daily snapshots varies from day to day, a less precise naming convention might be preferable, for example:

AdventureWorks_snapshot_morning  
AdventureWorks_snapshot_noon  
AdventureWorks_snapshot_evening  

Bewährte Methode: Beschränken der Anzahl von DatenbankmomentaufnahmenBest Practice: Limiting the Number of Database Snapshots

Durch das Erstellen einer Reihe von Momentaufnahmen werden im Laufe der Zeit sequenzielle Momentaufnahmen der Quelldatenbank aufgezeichnet.Creating a series of snapshots over time captures sequential snapshots of the source database. Jede Momentaufnahme wird so lange persistent gespeichert, bis sie explizit gelöscht wird.Each snapshot persists until it is explicitly dropped. Durch jede Momentaufnahme nehmen die ursprünglichen Seiten beim Aktualisieren an Größe zu. Deshalb sollten Sie Speicherplatz freigeben, indem Sie eine ältere Momentaufnahme löschen, nachdem eine neue Momentaufnahme erstellt wurde.Because each snapshot will continue to grow as original pages are updated, you may want to conserve disk space by deleting an older snapshot after creating a new snapshot.

Hinweis!Note! Wenn Sie zu einer bestimmten Datenbank-Momentaufnahme zurückkehren möchten, müssen Sie alle anderen Momentaufnahmen dieser Datenbank löschen.To revert to a database snapshot, you need to delete any other snapshots from that database.

Bewährte Methode: Clientverbindungen mit einer DatenbankmomentaufnahmeBest Practice: Client Connections to a Database Snapshot

Zur Verwendung einer Datenbankmomentaufnahme müssen die Clients wissen, wo sie diese finden.To use a database snapshot, clients need to know where to find it. Die Benutzer können aus einer Datenbankmomentaufnahme lesen, während eine andere Datenbankmomentaufnahme erstellt oder gelöscht wird.Users can read from one database snapshot while another is being created or deleted. Wenn Sie jedoch eine vorhandenen Momentaufnahme durch eine neue Momentaufnahme ersetzen, müssen Sie Clients an die neue Momentaufnahme umleiten.However, when you substitute a new snapshot for an existing one, you need to redirect clients to the new snapshot. Die Benutzer können mithilfe von SQL Server Management StudioSQL Server Management Studiomanuell eine Verbindung mit einer Datenbankmomentaufnahme herstellen.Users can manually connect to a database snapshot by means of SQL Server Management StudioSQL Server Management Studio. Für die Unterstützung einer Produktionsumgebung sollten Sie jedoch eine programmatische Lösung erstellen, die Berichterstellungsclients transparent an die neueste Momentaufnahme der Datenbank weiterleitet.However, to support a production environment, you should create a programmatic solution that transparently directs report-writing clients to the latest database snapshot of the database.

BerechtigungenPermissions

Jeder Benutzer, der eine Datenbank erstellen kann, kann auch eine Datenbankmomentaufnahme erstellen. Eine Momentaufnahme einer Spiegeldatenbank kann jedoch nur von Mitgliedern der festen Serverrolle sysadmin erstellt werden.Any user who can create a database can create a database snapshot; however, to create a snapshot of a mirror database, you must be a member of the sysadmin fixed server role.

So erstellen Sie eine Datenbankmomentaufnahme (mit Transact-SQL)How to Create a Database Snapshot (Using Transact-SQL)

So erstellen Sie eine DatenbankmomentaufnahmeTo create a database snapshot

Ein Beispiel für diese Prozedur finden Sie in Beispiele (Transact-SQL)an späterer Stelle in diesem Abschnitt.For an example of this procedure, see Examples (Transact-SQL), later in this section.

  1. Prüfen Sie die aktuelle Größe der Quelldatenbank, um sicherzustellen, dass der verfügbare Festplattenspeicher zum Speichern der Datenbankmomentaufnahme ausreicht.Based on the current size of the source database, ensure that you have sufficient disk space to hold the database snapshot. Die maximale Größe einer Datenbankmomentaufnahme beläuft sich auf die Größe der Quelldatenbank zum Zeitpunkt der Momentaufnahmeerstellung.The maximum size of a database snapshot is the size of the source database at snapshot creation. Weitere Informationen finden Sie unter Anzeigen der Größe der Datei mit geringer Dichte einer Datenbank-Momentaufnahme (Transact-SQL).For more information, see View the Size of the Sparse File of a Database Snapshot (Transact-SQL).

  2. Geben Sie eine CREATE DATABASE-Anweisung für die Dateien aus, und verwenden Sie dabei die AS SNAPSHOT OF-Klausel.Issue a CREATE DATABASE statement on the files using the AS SNAPSHOT OF clause. Bei der Erstellung einer Momentaufnahme müssen die logischen Namen aller in der Quelldatenbank enthaltenen Datenbankdateien angegeben werden.Creating a snapshot requires specifying the logical name of every database file of the source database. Die Syntax lautet wie folgt:The syntax is as follows:

    CREATE DATABASE Name der Datenbank-MomentaufnahmeCREATE DATABASE database_snapshot_name

    EINON

    ((

    NAME =logischer Dateiname,NAME =logical_file_name,

    FILENAME = 'physischer Dateiname'FILENAME ='os_file_name'

    ) [ ,...n ]) [ ,...n ]

    ALS SNAPSHOT OF Name der QuelldatenbankAS SNAPSHOT OF source_database_name

    [;][;]

    Dabei ist Name der Quelldatenbank die Quelldatenbank, logischer Dateiname der in SQL Server beim Verweis auf die Datei verwendete logische Name, physischer Dateiname der vom Betriebssystem beim Erstellen der Datei verwendete Pfad- und Dateiname und Name der Datenbank-Momentaufnahme der Name der Momentaufnahme, aus der die Datenbank wiederhergestellt werden soll.Where source_**database_name is the source database, logical_file_name is the logical name used in SQL Server when referencing the file, os_file_name is the path and file name used by the operating system when you create the file, and database_snapshot_name is the name of the snapshot to which you want to revert the database. Eine vollständige Beschreibung dieser Syntax finden Sie unter CREATE DATABASE (SQL Server Transact-SQL).For a full description of this syntax, see CREATE DATABASE (SQL Server Transact-SQL).

    Hinweis

    Wenn Sie eine Datenbankmomentaufnahme erstellen, darf die CREATE DATABASE-Anweisung weder Protokolldateien noch Offlinedateien, Wiederherstellungsdateien oder außer Kraft gesetzte Dateien enthalten.When you create a database snapshot, log files, offline files, restoring files, and defunct files are not allowed in the CREATE DATABASE statement.

Beispiele (Transact-SQL)Examples (Transact-SQL)

Hinweis

Die in den Beispielen verwendete Erweiterung .ss ist willkürlich.The .ss extension used in the examples is arbitrary.

Dieser Abschnitt enthält folgende Beispiele:This section contains the following examples:

A.A. Erstellen einer Momentaufnahme für die AdventureWorks-DatenbankCreating a snapshot on the AdventureWorks database

In diesem Beispiel wird eine Datenbankmomentaufnahme für die AdventureWorks -Datenbank erstellt.This example creates a database snapshot on the AdventureWorks database. Der Momentaufnahmename, AdventureWorks_dbss_1800, und der Dateiname der entsprechenden Sparsedatei, AdventureWorks_data_1800.ss, geben als Erstellungszeit 18:00 Uhr an.The snapshot name, AdventureWorks_dbss_1800, and the file name of its sparse file, AdventureWorks_data_1800.ss, indicate the creation time, 6 P.M (1800 hours).

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks_data_1800.ss' )  
AS SNAPSHOT OF AdventureWorks;  
GO  

B.B. Erstellen einer Momentaufnahme für die Sales-DatenbankCreating a snapshot on the Sales database

In diesem Beispiel wird eine Datenbankmomentaufnahme, sales_snapshot1200, für die Sales -Datenbank erstellt.This example creates a database snapshot, sales_snapshot1200, on the Sales database. Diese Datenbank wurde in dem Beispiel „Erstellen einer Datenbank mit Dateigruppen“ unter CREATE DATABASE (SQL Server Transact-SQL)erstellt.This database was created in the example, "Creating a database that has filegroups," in CREATE DATABASE (SQL Server Transact-SQL).

--Creating sales_snapshot1200 as snapshot of the  
--Sales database:  
CREATE DATABASE sales_snapshot1200 ON  
( NAME = SPri1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SPri1dat_1200.ss'),  
( NAME = SPri2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SPri2dt_1200.ss'),  
( NAME = SGrp1Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\mssql\data\SG1Fi1dt_1200.ss'),  
( NAME = SGrp1Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG1Fi2dt_1200.ss'),  
( NAME = SGrp2Fi1_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG2Fi1dt_1200.ss'),  
( NAME = SGrp2Fi2_dat, FILENAME =   
'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\data\SG2Fi2dt_1200.ss')  
AS SNAPSHOT OF Sales;  
GO  

Weitere InformationenSee Also

CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
Datenbank-Momentaufnahmen (SQL Server)Database Snapshots (SQL Server)