Jak mogę zapytać o istniejące migawki bazy danych na serwerze SQL?

12

Próbuję utworzyć kwerendę t-sql, która może określić, czy dana baza danych ma utworzone migawki bazy danych.

Na przykład, jeśli miałbym utworzyć migawkę taką:

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

Czy istnieje sposób, aby później zapytać o istnienie tej migawki? Widzę, że pojawia się w sys.databases, ale nie mogłem znaleźć żadnych informacji, które pomogłyby mi ustalić, że jest to migawka bazy danych utworzona z DatabaseA.

Eksplorator obiektów SQL Server Management Studio umieszcza go w folderze „Migawki bazy danych”, więc jest oczywiście sposób na odróżnienie ich od zwykłych baz danych.

Jesse Taber
źródło

Odpowiedzi:

17

Baza danych migawek będzie miała wpis sys.databases.source_database_id, więc możesz użyć czegoś takiego jak poniżej, aby sprawdzić bieżącą migawkę. Podobnie, możesz użyć tego samego sprawdzenia do DROPistniejącej migawki przed utworzeniem nowej.

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
źródło