Как определить, используется ли на сервере файл журнала 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 см. Следующие справочные книги:
Вот быстрый и грязный скрипт, который будет перебирать все ваши базы данных и искать ваш файл. Просто замените значение @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
Если вы считаете, что это неактивная база данных, должна ли быть устаревшая отметка времени (которую на ней указывает проводник) в указанном файле журнала? Или это грубо неверная информация? Я случайный дба, к вашему сведению