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


12

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

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

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

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

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

Answers:


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   
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.