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 existirem arquivos no contêiner FILESTREAM (pasta) que não são criados pelo SQL Server. A operação de backup incluirá esse arquivo, mas isso causará um estado inconsistente dos componentes do fluxo de arquivos no banco de dados.

Aviso

O contêiner FILESTREAM é uma pasta gerenciada pelo SQL Server. Não adicione ou 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 foram 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 completamente; erros podem ser detectados durante diferentes fases e estar separados por centenas de linhas para os mesmos objetos

    • As últimas linhas da 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 ser assim, 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 fazê-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 em um diretório temporário como backup.

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

  9. Tome medidas para entender por que e como esse(s) arquivo(s) foi(foram) adicionado(s) nesta pasta do sistema e tome medidas para evitar mais ocorrências

    • Certifique-se de que as permissões adequadas estejam em vigor para o acesso do usuário a essa(s) pasta(s) FILESTREAM
    • Entenda e certifique-se de que nenhum aplicativo esteja criando arquivos na(s) pasta(s) 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 violação da pasta SQL Server FILESTREAM além da mera adição inválida de arquivos externos. Esta situação não pode ser reparada manualmente

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

Executar DBCC CHECKDB

Se você executar 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