MSSQLSERVER_3056

Aplica-se a:SQL Server

Detalhes

Atributo Valor
Nome do Produto SQL Server
ID do evento 3056
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico DMPDB_INVALID_FSDATA
Texto da mensagem A operação de backup detectou um arquivo inesperado em um contêiner FILESTREAM. A operação de backup irá continuar e incluir o arquivo '%ls'.

Explicação

O erro 3056 será gerado se houver arquivos no contêiner FILESTREAM (pasta) que não são criados por SQL Server. A operação de backup incluirá esse arquivo, mas isso causará um estado inconsistente dos componentes de fluxo de arquivos no banco de dados.

Aviso

O contêiner FILESTREAM é uma pasta gerenciada por SQL Server. Não adicione nem remova arquivos na pasta FILESTREAM

Ação do usuário

A mensagem de erro inclui o nome do arquivo inesperado. Investigue como esse arquivo foi parar nessa pasta.

  1. Encerre seus backups e verifique se os backups anteriores desse banco de dados não são substituídos ou perdidos

  2. Execute um DBCC CHECKB completo no banco de dados para o qual o backup falhou com o erro 3056. Não use com physical_only

  3. Examine a saída DBCC CHECKB detalhadamente; erros podem ser detectados durante fases diferentes e ter centenas de linhas separadas para os mesmos objetos

    • As últimas linhas de saída CHECKDB fornecerão uma contagem resumida de erros. Verifique se você localizou a mensagem individual para cada um dos erros contados
    • Você encontra um erro semelhante a este na parte inferior: CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
  4. Se os únicos erros relatados forem 7908 ou 7906, você poderá localizar os arquivos reais relatados no erro. Os erros podem ter esta aparência, por exemplo:

    Msg 7906, Level 16, State 1, Line 8
    Database error: The file "\782fc3bb-dc63-4ab8-9de6-e9dfa36454d2\NO_USER_FILE_SHOULD_BE_HERE.txt" is not a valid FILESTREAM file in container ID 65537.
    Msg 7908, Level 16, State 1, Line 8
    Table error: The file "\782fc3bb-dc63-4ab8-9de6-e9dfa36454d2\NO_USER_FILE_SHOULD_BE_HERE.txt" in the rowset directory ID 3068163f-7398-4ae7-843c-67672e29c37e is not a valid FILESTREAM file in container ID    65537.
    

    Observação

    É recomendável que você teste essas etapas em uma cópia de backup/teste do banco de dados antes de tentar usá-las no sistema de produção.

  5. Para localizar os arquivos, execute este comando para localizar a pasta física do grupo FILESTREAM

    SELECT name, physical_name, state_desc, type_desc 
    FROM sys.database_files
    WHERE type_desc = 'FILESTREAM'
    
  6. No Windows Explorer, abra a subpasta identificada no erro 7906 ou 7908 (por exemplo, \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)

  7. Em seguida, localize o arquivo identificado na mensagem de erro (por exemplo, NO_USER_FILE_SHOULD_BE_HERE.txt) e faça uma cópia desse arquivo para um diretório temporário como um backup.

  8. Depois de garantir que você tenha uma cópia, você poderá remover o arquivo da pasta

  9. Execute as etapas para entender por que e como esses arquivos foram adicionados nesta pasta do sistema e tomar medidas para evitar novas ocorrências

    • Verifique se as permissões adequadas estão em vigor para o acesso do usuário a esta(s) pasta(s) FILESTREAM
    • Entender e garantir que nenhum aplicativo esteja criando arquivos nas pastas FILESTREAM
  10. Execute um novo DBCC CHECKDB e verifique se ele não gera erros

  11. Se houver outros erros checkdb, incluindo 7903.7904.7905.7907, houve corrupção ou adulteração de SQL Server pasta FILESTREAM além da mera adição inválida de arquivos estrangeiros. Essa situação não pode ser reparada manualmente

    • Verifique se há problemas no hardware e resolva-os
    • Verifique se o sistema está protegido contra malware. Observe que os arquivos de dados FILESTREAM devem ser excluídos da verificação de software antivírus. Confira Recomendações e diretrizes para melhorar o desempenho de FILESTREAM
    • Em seguida, restaure do backup de banco de dados íntegro

Executar DBCC CHECKDB

Se você executar o DBCC CHECKDB, ele poderá relatar o erro 7908 ou 7906, mas não poderá repará-lo.

Restaurar a partir de backup

Se o problema não estiver relacionado ao hardware e um backup limpo conhecido estiver disponível, restaure o banco de dados do backup