Come posso eseguire una query per snapshot di database esistenti in SQL Server?


12

Sto cercando di creare una query t-sql in grado di determinare se un determinato database ha o meno snapshot del database che sono stati creati da esso.

Ad esempio, se dovessi creare un'istantanea in questo modo:

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

C'è un modo in cui posso chiedere di nuovo l'esistenza di quella istantanea più tardi? Vedo che viene visualizzato in database sys.d, ma non sono riuscito a trovare alcuna informazione che possa aiutarmi a determinare che si tratta di un'istantanea del database creata da DatabaseA.

L'Explorer oggetti di SQL Server Management Studio lo posiziona nella cartella "Database Snapshot", quindi c'è ovviamente un modo per differenziarli dai normali database.

Risposte:


17

Un database di istantanee avrà una voce in entrata sys.databases.source_database_id, quindi puoi usare qualcosa come il seguente per verificare un'istantanea corrente. Allo stesso modo, è possibile utilizzare lo stesso controllo per DROPuno snapshot esistente prima di crearne uno nuovo.

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   
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.