如何确定服务器上是否正在使用 SQL Server ldf 日志文件?

如何确定服务器上是否正在使用 SQL Server ldf 日志文件?

我有一个 SQL Server ldf 文件,大小非常大,有 190 GB。我很确定它只是旧 SharePoint 内容数据库的残留,该数据库不再存在于此数据库服务器上,但在对其进行处理之前,我希望绝对确定。我的服务器上有几十个数据库。我如何才能最轻松地验证此 ldf 文件是否以某种方式在此服务器上使用?我是否只能使用 SSMS 并手动检查每个数据库?

答案1

那么,不推荐的方法是尝试在文件系统上重命名 .ldf 文件。如果日志文件确实用于为当前运行的 SQL Server 数据库提供服务,那么您将无法重命名该文件。

推荐的方法是检查 sys.database_files 目录视图以识别/找到相关的日志文件。

按照下面的方法就可以了.....

Select 
    file_id,
    name,
    state
From sys.database_files
Where Type = 1 and name=’logFileName’

有关 sys.database_files 目录视图的详细信息,请参阅以下联机参考书籍:

http://msdn.microsoft.com/en-us/library/ms174397.aspx

答案2

这是一个快速而粗略的脚本,它将循环遍历所有数据库并查找您的文件。只需将 @FileToFind 的值替换为相关文件的名称即可。如果最终结果集中没有结果,则该服务器未使用您的文件。如果您从中得到结果,则该数据库正在使用该文件。

DECLARE @CurrentDB sysname
DECLARE @SQL NVARCHAR(1000)
DECLARE @FileToFind NVARCHAR(260)

SET @FileToFind='master.mdf'

CREATE TABLE #TmpDBTable (
    DBName sysname,
    FileName NVARCHAR(260)
)

DECLARE ALLDBS CURSOR FOR
SELECT NAME FROM sys.databases
OPEN ALLDBS
FETCH NEXT FROM ALLDBS INTO @CurrentDB 
WHILE @@FETCH_STATUS=0
BEGIN
    SET @SQL='use ' + @CurrentDB + ';insert #TmpDBTable select '''+@CurrentDB+''',physical_name from sys.database_files where physical_name like ''%'+@FileToFind+'%'''
    EXEC sp_executesql @SQL
    FETCH NEXT FROM ALLDBS INTO @CurrentDB 
END
CLOSE ALLDBS
DEALLOCATE ALLDBS

SELECT * FROM #TmpDBTable

DROP TABLE #TmpDBTable

答案3

如果您认为这是一个非活动数据库,那么该日志文件上的时间戳(浏览器在其上放置的)是否应该过期?或者这是完全错误的信息?我是一名偶然的 dba,仅供参考

相关内容