我正在尝试创建一个 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 的对象资源管理器将它放在“数据库快照”文件夹下,因此显然可以通过某种方式将它们与常规数据库区分开来。
我们最近使用这个查询在我们的数据库中查找没有聚集索引的表,发现它返回的结果之一是“sys.sysfiles1”表。我们正在运行 SQL Server 2008,我的印象是该表不再使用(正如一些答案指出的那样,似乎存在一种误解,即该表仅存在于从 SQL Server 2000 升级的数据库)。此外,我无法直接从 sys.sysfiles1 表中选择任何内容(尽管我可以直接从 sys.sysfiles 视图中选择)。
运行以下命令以针对本地安装的 SQL Server 2008 (@@version = Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64),尽管我们已经在 SQL Server 的生产实例中看到它) 创建一个新数据库2008 年)也说明了我的意思:
CREATE DATABASE SysFilesTesting
--returns a row:
SELECT * FROM SysFilesTesting.sys.objects where name = 'sysfiles1'
--throws 'invalid object name' error:
SELECT * FROM SysFilesTesting.sys.sysfiles1
Run Code Online (Sandbox Code Playgroud)
为什么 sys.objects 报告 sysfiles1 表的存在?