Как я могу запросить существующие снимки базы данных на сервере SQL?

12

Я пытаюсь создать запрос t-sql, который может определить, есть ли у данной базы данных снимки базы данных, которые были созданы из нее.

Например, если бы я создал снимок, подобный этому:

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

Есть ли способ я могу запросить существование этого снимка снова позже? Я вижу, что он отображается в sys.databases, но я не смог найти никакой информации, которая помогла бы мне определить, что это снимок базы данных, созданный из DatabaseA.

Обозреватель объектов в SQL Server Management Studio помещает его в папку «Снимки базы данных», поэтому существует очевидный способ отличить их от обычных баз данных.

Джесси Табер
источник

Ответы:

17

В базе данных снимков будет запись sys.databases.source_database_id, так что вы можете использовать что-то вроде следующего для проверки текущего снимка. Точно так же вы можете использовать ту же проверку для DROPсуществующего снимка, прежде чем создавать новый.

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   
Марк Стори-Смит
источник