У меня есть ldf-файл SQL Server, который имеет очень большой размер 190 гигабайт. Я почти уверен, что это всего лишь остаток старой базы данных контента SharePoint, которой больше нет на этом сервере базы данных, но я хотел бы быть абсолютно уверенным, прежде чем приступить к работе с ней. На моем сервере несколько десятков баз данных. Как мне проще всего проверить, используется ли этот файл ldf каким-либо образом на этом сервере? Могу ли я использовать SSMS и вручную проверять каждую базу данных?
Что ж, не рекомендуемый способ - это попытаться переименовать файл .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
Если вы считаете, что это неактивная база данных, должна ли метка времени (этот проводник ставит ее) в указанном файле журнала быть устаревшей? Или это совершенно неверная информация? Я случайный dba, уф