¿Cómo puedo consultar las instantáneas de bases de datos existentes en el servidor SQL?

12

Estoy tratando de crear una consulta t-sql que pueda determinar si una base de datos dada tiene o no instantáneas de base de datos que se crearon a partir de ella.

Por ejemplo, si tuviera que crear una instantánea como esta:

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

¿Hay alguna forma de consultar la existencia de esa instantánea más tarde? Puedo ver que aparece en sys.databases, pero no pude encontrar ninguna información que me ayudara a determinar que se trata de una instantánea de la base de datos que se creó a partir de DatabaseA.

El Explorador de objetos de SQL Server Management Studio lo ubica en la carpeta 'Instantáneas de base de datos', por lo que obviamente hay alguna forma de diferenciarlas de las bases de datos normales.

Jesse Taber
fuente

Respuestas:

17

Una base de datos de instantáneas tendrá una entrada sys.databases.source_database_id, por lo que puede usar algo como lo siguiente para verificar una instantánea actual. Del mismo modo, puede usar la misma verificación para DROPuna instantánea existente antes de crear una nueva.

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
fuente