Comment puis-je rechercher des instantanés de base de données existants dans SQL Server?

12

J'essaie de créer une requête t-sql qui peut déterminer si une base de données donnée a des instantanés de base de données qui ont été créés à partir d'elle.

Par exemple, si je devais créer un instantané comme celui-ci:

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

Existe-t-il un moyen de rechercher ultérieurement l'existence de cet instantané? Je peux voir qu'il apparaît dans sys.databases, mais je n'ai trouvé aucune information qui pourrait m'aider à déterminer qu'il s'agit d'un instantané de base de données créé à partir de DatabaseA.

L'explorateur d'objets de SQL Server Management Studio le place sous le dossier «Instantanés de base de données», il existe donc évidemment un moyen de les différencier des bases de données classiques.

Jesse Taber
la source

Réponses:

17

Une base de données d'instantanés aura une entrée sys.databases.source_database_id, vous pouvez donc utiliser quelque chose comme le suivant pour vérifier un instantané actuel. De même, vous pouvez utiliser la même vérification pour DROPun instantané existant avant d'en créer un nouveau.

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