MSSQLSERVER_5009

Aplica-se a: SQL Server

Details

Attribute Value
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 ficheiros listados na declaração não puderam ser encontrados ou não puderam ser inicializados

Explanation

Este erro indica que especificou um nome de ficheiro ou um ficheiroID no ALTER DATABASE comando DBCC SHRINK* que não pôde ser resolvido.

Considere o seguinte cenário:

  • Tem uma base de dados do Microsoft SQL Server que utiliza um modelo de recuperação completo ou em bloco.
  • Adiciona-se um novo ficheiro de dados que se chama db_file1 à base de dados.
  • Defines o tipo de ficheiro do db_file1 ficheiro como dados.
  • Percebes que especificaste o tipo de ficheiro incorretamente.
  • Remove o db_file1 ficheiro e depois faz backup do registo de transações dessa base de dados.
  • Adiciona-se um novo ficheiro de registo que se chama db_file1 à mesma base de dados.
  • Tenta remover o ficheiro de registo que tem o nome db_file1 usando a ALTER DATABASE instrução ou usando SQL Server Management Studio.

Neste cenário, receberá uma mensagem de erro semelhante à seguinte:

Msg 5009, Nível 16, Estado 9, Linha 1 Um ou mais ficheiros listados na declaração não puderam ser encontrados ou não puderam ser inicializados.

Causas possíveis

Este problema ocorre se o nome lógico do ficheiro que tenta remover não for único nas tabelas do catálogo do sistema. Por exemplo, este problema ocorre se o ficheiro já existia anteriormente na base de dados e depois o ficheiro foi removido.

Quando tentas remover um ficheiro com o mesmo nome lógico, o SQL Server tenta remover o ficheiro lógico que caiu. Isto resulta na mensagem de erro.

Ação do usuário

Para contornar este problema, siga estes passos.

Note

Estes passos fazem com que os valores do ID do ficheiro sejam reutilizados.

  1. Use a ALTER DATABASE instrução para criar um novo ficheiro lógico com um nome diferente e o mesmo tipo de dado. Por exemplo, nomeie o ficheiro 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)
    

    Note

    Pode usar qualquer nome de ficheiro ou qualquer caminho de ficheiro.

  2. Use a ALTER DATABASE instrução para remover o ficheiro lógico que criou no passo 1, como no seguinte exemplo:

    ALTER DATABASE [DBNAME] REMOVE FILE [different_remove_file_name]
    
  3. Crie uma cópia de segurança do registo de transações da base de dados.

  4. Tenta remover novamente o ficheiro lógico que tem o nome db_file1 .