Como posso consultar instantâneos de banco de dados existentes no SQL server?

12

Estou tentando criar uma consulta t-sql que pode determinar se um determinado banco de dados possui ou não instantâneos de banco de dados que foram criados a partir dele.

Por exemplo, se eu fosse criar um instantâneo como este:

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

Existe uma maneira de consultar a existência desse instantâneo novamente mais tarde? Percebo que ele aparece no sys.databases, mas não consegui encontrar nenhuma informação que me ajudasse a determinar que é um instantâneo de banco de dados criado a partir do DatabaseA.

O Pesquisador de Objetos do SQL Server Management Studio o coloca na pasta 'Instantâneos do banco de dados', portanto, obviamente, há uma maneira de diferenciá-los dos bancos de dados regulares.

Jesse Taber
fonte

Respostas:

17

Um banco de dados de instantâneos terá uma entrada sys.databases.source_database_id, portanto, você pode usar algo como o seguinte para verificar se há um instantâneo atual. Da mesma forma, você pode usar a mesma verificação em DROPum instantâneo existente antes de criar um novo.

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
fonte