如何识别db孤立mdf和ldf文件

Sky*_*Sky 2 sql-server-2008-r2

我想识别磁盘上的孤立 mdf 和 ldf 文件并删除它们。在互联网上搜索后,在 MSDN 论坛上找到了下面的脚本。但是当我运行脚本时,它会返回许多类似系统的 db 文件,这些文件似乎不是孤立的,或者至少不能安全删除!

您知道识别孤儿文件的更好方法吗?或者你能解释一下这些 db 文件指的是什么(删除它们是否安全)?

例如,以下文件出现在此查询的结果中:

在此处输入图片说明

/*
exec sp_configure 'show advanced' ,1
reconfigure
exec sp_configure 'xp_cmdshell' ,1
reconfigure
*/
if object_id('tempdb.dbo.#os_files') is not null
    drop table #os_files
create table #os_files([filename] varchar(2000))

--list all .mdf and .ldf files on the c drive
-- you will need to call this again to 
-- populate the #os_files table, if you have
-- db files on other databases eg. d:, e:

insert into #os_files exec xp_cmdshell 'DIR C:\*.mdf /b /s'
insert into #os_files exec xp_cmdshell 'DIR C:\*.ldf /b /s'

delete from #os_files where filename is null

update #os_files set filename=rtrim(filename)

select 
    os.filename as orphaned_files 
from 
    #os_files os
    left outer join master.dbo.sysaltfiles db on rtrim(db.filename) = os.filename 
where 
    db.dbid is null
order by 1
Run Code Online (Sandbox Code Playgroud)

谢谢你。

Stu*_*ore 5

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQL\MSSQL\Binn\Templates 中的文件是在出现问题时修复和重建系统数据库所需的系统数据库的基本副本 - http://msdn。 microsoft.com/en-us/library/dd207003(v=sql.105).aspx

虽然您可以删除它们,但如果您需要重建系统数据库,您将需要更长的恢复期,因为您需要从其他地方找到模板。

但除此之外,该脚本似乎在做它宣称要做的事情。不过,它应该更新为:


select 
    os.filename as orphaned_files 
from 
    #os_files os
    left outer join master.sys.master_files db on rtrim(db.physical_name) = os.filename
where 
    db.database_id is null
Run Code Online (Sandbox Code Playgroud)

assysaltfiles已弃用,并将在未来版本中从 SQL Server 中删除。