Como posso determinar se um arquivo de log ldf do SQL Server está em uso em um servidor?

3

Eu tenho um arquivo ldf do SQL Server com um tamanho muito grande de 190 gigabytes. Tenho certeza de que é apenas um remanescente de um antigo banco de dados de conteúdo do SharePoint que não está mais nesse servidor de banco de dados, mas gostaria de ter absoluta certeza antes de começar a fazer isso. Meu servidor tem várias dezenas de bancos de dados nele. Como posso verificar com mais facilidade se esse arquivo ldf está de alguma forma em uso neste servidor? Eu estou relegado a usar o SSMS e verificar manualmente cada banco de dados?

    
por Chris Farmer 17.08.2009 / 21:43

3 respostas

3

Bem, a maneira não recomendada seria tentar renomear o arquivo .ldf no sistema de arquivos. Se o arquivo de log estiver sendo usado para servir um banco de dados do SQL Server atualmente em operação, você não poderá renomear o arquivo.

O método recomendado seria inspecionar a exibição de catálogo sys.database_files para identificar / localizar o arquivo de log em questão.

Algo nas seguintes linhas deve fazer isso ...

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

Consulte a referência online de livros a seguir para obter detalhes sobre a exibição do catálogo sys.database_files:

link

    
por 17.08.2009 / 21:58
0

Aqui está um script rápido e sujo que irá percorrer todos os seus bancos de dados e procurar por seu arquivo. Apenas substitua o valor de @FileToFind pelo nome do arquivo em questão. Se você não obtiver nenhum resultado no conjunto de resultados final, esse servidor não estará usando o arquivo. Se você obtiver um resultado de volta, então esse é o banco de dados que está usando o arquivo.

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
    
por 17.08.2009 / 22:07
0

Se você acredita que é um banco de dados inativo, o carimbo de data / hora (que o explorador coloca nele) no arquivo de log deve estar desatualizado? Ou essa informação é grosseiramente errada? Eu sou um dba acidental, fyi

    
por 17.08.2009 / 22:23

Tags