Erstellen einer Datenbank Momentaufnahme (Transact-SQL)

Gilt für:SQL Server

Die einzige Möglichkeit zum Erstellen einer SQL Server-Datenbank Momentaufnahme ist die Verwendung von Transact-SQL. SQL Server Management Studio unterstützt nicht die Erstellung von Datenbank-Momentaufnahme s.

Voraussetzungen

Die Quelldatenbank, die ein Wiederherstellungsmodell verwenden kann, muss die folgenden Voraussetzungen erfüllen:

  • Die Serverinstanz muss eine Edition von SQL Server ausführen, die Datenbank-Momentaufnahme unterstützt. Informationen zur Unterstützung von Datenbank-Momentaufnahme s in SQL Server finden Sie unter Editionen und unterstützte Features von SQL Server 2022.

  • Die Quelldatenbank muss online sein, es sei denn, bei der Datenbank handelt es sich um eine Spiegeldatenbank innerhalb einer Datenbank-Spiegelungssitzung.

  • Zum Erstellen einer Datenbank-Momentaufnahme für die Spiegeldatenbank muss sich die Datenbank im synchronisierten Spiegelungsstatusbefinden.

  • Die Quelldatenbank kann nicht als skalierbare freigegebene Datenbank konfiguriert werden.

  • Vor SQL Server 2019 (15.x) konnte die Quelldatenbank keine Dateigruppe enthalten MEMORY_OPTIMIZED_DATA . Unterstützung für in-Memory-Datenbank-Momentaufnahme wurde in SQL Server 2019 (15.x) hinzugefügt.

Wichtig

Informationen zu anderen wichtigen Überlegungen finden Sie unter Database Snapshots (SQL Server).

Empfehlungen

In diesem Abschnitt werden die folgenden bewährten Methoden erläutert:

Bewährte Methode: Benennen von Datenbank Momentaufnahme s

Bevor Sie Momentaufnahme erstellen, ist es wichtig zu überlegen, wie Sie diese benennen. Jede Datenbankmomentaufnahme erfordert einen eindeutigen Datenbanknamen. Um den Verwaltungsaufwand zu reduzieren, kann der Name einer Momentaufnahme Informationen enthalten, mit denen die Datenbank identifiziert wird:

  • Der Name der Quelldatenbank.

  • Einen Hinweis, dass der neue Name für eine Momentaufnahme ist

  • 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 unterscheiden

Angenommen, Sie haben eine Reihe von Momentaufnahmen für die AdventureWorks2022 -Datenbank. Drei tägliche Momentaufnahme werden in 6-Stunden-Abständen zwischen 6 Uhr und 6 Uhr erstellt, basierend auf einer 24-Stunden-Uhr. Jede tägliche Momentaufnahme wird nach 24 Stunden gelöscht und durch eine neue gleichnamige Momentaufnahme ersetzt. Jeder Momentaufnahme Name gibt die Stunde an, aber nicht den Tag:

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:

AdventureWorks_snapshot_morning
AdventureWorks_snapshot_noon
AdventureWorks_snapshot_evening

Bewährte Methode: Einschränken der Anzahl von Datenbank-Momentaufnahme s

Durch das Erstellen einer Reihe von Momentaufnahmen werden im Laufe der Zeit sequenzielle Momentaufnahmen der Quelldatenbank aufgezeichnet. Jede Momentaufnahme wird bis zum expliziten Ablegen beibehalten. 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.

Hinweis

Wenn Sie zu einer bestimmten Datenbank-Momentaufnahme zurückkehren möchten, müssen Sie alle anderen Momentaufnahmen dieser Datenbank löschen.

Bewährte Methode: Clientverbindungen mit einer Datenbank Momentaufnahme

Zur Verwendung einer Datenbankmomentaufnahme müssen die Clients wissen, wo sie diese finden. Die Benutzer können aus einer Datenbankmomentaufnahme lesen, während eine andere Datenbankmomentaufnahme erstellt oder gelöscht wird. Wenn Sie jedoch eine vorhandenen Momentaufnahme durch eine neue Momentaufnahme ersetzen, müssen Sie Clients an die neue Momentaufnahme umleiten. Benutzer können manuell eine Verbindung mit einer Datenbank Momentaufnahme mit SQL Server Management Studio oder Azure Data Studio herstellen. 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.

Berechtigungen

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.

Erstellen einer Datenbank Momentaufnahme mithilfe von Transact-SQL

  1. Prüfen Sie die aktuelle Größe der Quelldatenbank, um sicherzustellen, dass der verfügbare Festplattenspeicher zum Speichern der Datenbankmomentaufnahme ausreicht. Die maximale Größe einer Datenbankmomentaufnahme beläuft sich auf die Größe der Quelldatenbank zum Zeitpunkt der Momentaufnahmeerstellung. Weitere Informationen finden Sie unter Anzeigen der Größe der Sparsedatei einer Datenbankmomentaufnahme (Transact-SQL).

  2. Geben Sie eine CREATE DATABASE Anweisung für die Dateien mithilfe der AS SNAPSHOT OF Klausel aus. Bei der Erstellung einer Momentaufnahme müssen die logischen Namen aller in der Quelldatenbank enthaltenen Datenbankdateien angegeben werden. Die Syntax lautet wie folgt:

    CREATE DATABASE database_snapshot_name
    ON
    (
        NAME = logical_file_name
        , FILENAME = 'os_file_name'
    ) [ , ...n ]
    
    AS SNAPSHOT OF source_database_name
    [;]
    

    Die Argumente sind wie folgt:

    Argument Beschreibung
    database_snapshot_name Der Name des Momentaufnahme, dem Sie die Datenbank rückgängig machen möchten.
    logical_file_name Der logische Name, den die Quelldatenbank in SQL Server beim Verweisen auf die Datei verwendet.
    os_file_name Der Pfad und dateiname, der vom Betriebssystem beim Erstellen der Datei verwendet wird.
    source_database_name Die Quelldatenbank.

    Eine vollständige Beschreibung dieser Syntax finden Sie unter CREATE DATABASE (SQL Server Transact-SQL).

    Hinweis

    Wenn Sie eine Datenbank Momentaufnahme erstellen, sind Protokolldateien, Offlinedateien, das Wiederherstellen von Dateien und die zurückstehenden Dateien in der CREATE DATABASE Anweisung nicht zulässig.

Beispiele

Die .ss in diesen Beispielen verwendete Erweiterung ist einfach und nicht erforderlich. In Datenbanken, die mehrere Dateien enthalten, müssen alle Dateien in Übereinstimmung mit der Syntax angegeben werden. Dateigruppen werden nicht angegeben.

A. Erstellen einer Momentaufnahme in der AdventureWorks-Datenbank

In diesem Beispiel wird eine Datenbankmomentaufnahme für die AdventureWorks -Datenbank erstellt. Der Momentaufnahme Name AdventureWorks_dbss_1800und der Dateiname der geringen Datei, AdventureWorks_data_1800.ssgeben die Erstellungszeit von 1800 Stunden an.

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. Erstellen einer Momentaufnahme in der Vertriebsdatenbank

In diesem Beispiel wird eine Datenbank Momentaufnahme, sales_snapshot1200in der Sales Datenbank erstellt. Dabei handelt es sich um die gleiche Beispieldatenbank aus "Datenbank erstellen", die Dateigruppen in CREATE DATABASE enthält.

--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