Как определить, используется ли на сервере файл журнала SQL Server ldf?

У меня есть SQL-файл ldf, размер которого очень большой - 190 гигабайт. Я почти уверен, что это всего лишь остаток от старой базы данных контента SharePoint, которой больше нет на этом сервере баз данных, но я бы хотел быть абсолютно уверенным, прежде чем приступить к этому. На моем сервере есть несколько десятков баз данных. Как мне легче всего проверить, используется ли этот файл ldf на этом сервере? Должен ли я использовать SSMS и вручную проверять каждую базу данных?

3 ответа

Решение

Ну, не рекомендуемый способ - попытаться переименовать файл.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

Вот быстрый и грязный скрипт, который будет перебирать все ваши базы данных и искать ваш файл. Просто замените значение @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

Если вы считаете, что это неактивная база данных, должна ли быть устаревшая отметка времени (которую на ней указывает проводник) в указанном файле журнала? Или это грубо неверная информация? Я случайный дба, к вашему сведению

Другие вопросы по тегам