MSSQLSERVER_5009

Aplica-se a:SQL Server

Detalhes

Atributo Valor
Nome do Produto SQL Server
ID do evento 5009
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico ALT_BADDISKS
Texto da mensagem Um ou mais arquivos listados na instrução não foram encontrados ou não foram inicializados

Explicação

Esse erro indica que você especificou uma fileID ou um nome de arquivo no comando ALTER DATABASE ou DBCC SHRINK* que não pôde ser resolvido.

Considere o seguinte cenário:

  • Você tem um banco de dados do Microsoft SQL Server que usa um modelo de recuperação completo ou bulk-logged.
  • Você adiciona um novo arquivo de dados chamado db_file1 ao banco de dados.
  • Você define o tipo de arquivo do arquivo db_file1 como dados.
  • Você percebe que especificou o tipo de arquivo incorretamente.
  • Você remove o arquivo db_file1 e faz backup do log de transações desse banco de dados.
  • Você adiciona um novo arquivo de log chamado db_file1 ao mesmo banco de dados.
  • Você tenta remover o arquivo de log chamado db_file1 usando a instrução ALTER DATABASE ou usando SQL Server Management Studio.

Neste cenário, você recebe uma mensagem de erro semelhante à seguinte:

Mensagem 5009, Nível 16, Estado 9, Linha 1: um ou mais arquivos listados na instrução não foram encontrados ou não foram inicializados.

Possíveis causas

Esse problema ocorre se o nome lógico do arquivo que você tentar remover não for exclusivo nas tabelas do catálogo do sistema. Por exemplo, esse problema ocorre se o arquivo existia no banco de dados anteriormente e foi removido.

Quando você tenta remover um arquivo que tem o mesmo nome lógico, SQL Server tenta remover o arquivo lógico descartado. Isso resulta na mensagem de erro.

Ação do usuário

Para encontrar uma solução alternativa para esse problema, siga estas etapas.

Observação

Essas etapas fazem com que os valores da ID de arquivo sejam reutilizados.

  1. Use a instrução ALTER DATABASE para criar um arquivo lógico que tenha um nome diferente e o mesmo tipo de dados. Por exemplo, nomeie o arquivo lógico como different_remove_file_name em vez de db_file1, como no seguinte exemplo:

    ALTER DATABASE [DBNAME] ADD FILE ( NAME = N'different_remove_file_name',
    FILENAME = N'D:\MSSQL.1\MSSQL\DATA\db_file1.ndf', SIZE = 1MB, MAXSIZE = 1MB)
    

    Observação

    Você pode usar qualquer nome ou caminho de arquivo.

  2. Use a instrução ALTER DATABASE para remover o arquivo lógico criado na etapa 1, como no seguinte exemplo:

    ALTER DATABASE [DBNAME] REMOVE FILE [different_remove_file_name]
    
  3. Crie um backup de log de transações do banco de dados.

  4. Tente remover o arquivo lógico chamado db_file1 novamente.