Wie kann ich vorhandene Datenbank-Snapshots in SQL Server abfragen?

12

Ich versuche, eine T-SQL-Abfrage zu erstellen, mit der ermittelt werden kann, ob für eine bestimmte Datenbank Datenbank-Snapshots erstellt wurden oder nicht.

Wenn ich zum Beispiel einen Schnappschuss wie diesen erstellen würde:

CREATE DATABASE [DatabaseA_Snapshot] ON 
(NAME=DatabaseA, FileName='<whatever>') 
AS SNAPSHOT OF [DatabaseA]

Gibt es eine Möglichkeit, die Existenz dieses Schnappschusses später erneut abzufragen? Ich kann sehen, dass es in sys.databases angezeigt wird, aber ich konnte keine Informationen finden, mit denen ich feststellen kann, dass es sich um einen Datenbank-Snapshot handelt, der aus DatabaseA erstellt wurde.

Der Objekt-Explorer von SQL Server Management Studio legt es im Ordner "Datenbank-Snapshots" ab, sodass es offensichtlich eine Möglichkeit gibt, diese von regulären Datenbanken zu unterscheiden.

Jesse Taber
quelle
4
Bitte beginnen Sie mit der Verwendung sys.databasesanstelle von, sys.sysdatabasesda letztere veraltet ist .
Jon Seigel
@ JonSeigel gut zu wissen. Fest.
Jesse Taber

Antworten:

16

Eine Snapshot-Datenbank enthält einen Eintrag in sys.databases.source_database_id, sodass Sie mithilfe der folgenden Informationen nach einem aktuellen Snapshot suchen können. Ebenso können Sie dieselbe Prüfung für DROPeinen vorhandenen Snapshot verwenden, bevor Sie einen neuen erstellen.

IF NOT EXISTS(
    SELECT 
        * 
    FROM 
        sys.databases 
    WHERE 
        name = 'DatabaseA_Snapshot' 
    AND source_database_id IS NOT NULL
    )
BEGIN
    CREATE DATABASE [DatabaseA_Snapshot] 
    ON (NAME=DatabaseA, FileName='<whatever>') 
    AS SNAPSHOT OF [DatabaseA]
END   
Mark Storey-Smith
quelle