如何在 SQL Server 中查询现有数据库快照?

Jes*_*ber 13 sql-server snapshot

我正在尝试创建一个 t-sql 查询,它可以确定给定的数据库是否具有从它创建的任何数据库快照。

例如,如果我要创建这样的快照:

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

有没有办法稍后再次查询该快照的存在?我可以看到它出现在 sys.databases 中,但是我找不到任何信息可以帮助我确定它是从 DatabaseA 创建的数据库快照。

SQL Server Management Studio 的对象资源管理器将它放在“数据库快照”文件夹下,因此显然可以通过某种方式将它们与常规数据库区分开来。

Mar*_*ith 18

快照数据库将在 中有一个条目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   
Run Code Online (Sandbox Code Playgroud)