MSSQLSERVER_3056

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 3056
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico DMPDB_INVALID_FSDATA
Testo del messaggio Durante l'operazione di backup è stato rilevato un file imprevisto in un contenitore FILESTREAM. L'operazione di backup proseguirà includendo il file '%ls'.

Spiegazione

L'errore 3056 viene generato se i file esistono nel contenitore FILESTREAM (cartella) che non vengono creati da SQL Server. L'operazione di backup includerà tale file, ma ciò causerà uno stato incoerente dei componenti filestream nel database.

Avviso

Il contenitore FILESTREAM è una cartella gestita da SQL Server. Non aggiungere o rimuovere file nella cartella FILESTREAM

Azione utente

Il messaggio di errore include il nome del file imprevisto. Esaminare il modo in cui il file è finito in questa cartella.

  1. Terminare i backup e assicurarsi che i backup precedenti per questo database non vengano sovrascritti o persi

  2. Eseguire un DBCC CHECKB completo sul database per il quale il backup non è riuscito con errore 3056. Non usare con physical_only

  3. Esaminare attentamente l'output DBCC CHECKB; possono essere rilevati errori durante fasi diverse e centinaia di linee separate per gli stessi oggetti

    • Le ultime righe dell'output CHECKDB forniranno un conteggio riepilogativo degli errori. Assicurarsi di aver individuato il singolo messaggio per ognuno degli errori con conteggiati
    • Viene visualizzato un errore simile al seguente nella parte inferiore: CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
  4. Se gli unici errori segnalati sono 7908 o 7906, è possibile individuare i file effettivi segnalati nell'errore. Gli errori possono essere simili al seguente, ad esempio:

    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.
    

    Nota

    È consigliabile testare questi passaggi in una copia di backup/test del database prima di provarli nel sistema di produzione.

  5. Per individuare i file, eseguire questo comando per trovare la cartella fisica del gruppo FILESTREAM

    SELECT name, physical_name, state_desc, type_desc 
    FROM sys.database_files
    WHERE type_desc = 'FILESTREAM'
    
  6. In Esplora risorse aprire la sottocartella identificata nell'errore 7906 o 7908 (ad esempio \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)

  7. Trovare quindi il file identificato nel messaggio di errore (ad esempio NO_USER_FILE_SHOULD_BE_HERE.txt) e creare una copia del file in una directory temporanea come backup.

  8. Dopo aver verificato di avere una copia, è possibile rimuovere il file dalla cartella

  9. Eseguire i passaggi per comprendere perché e come questi file sono stati aggiunti in questa cartella di sistema ed eseguire i passaggi per evitare ulteriori occorrenze

    • Assicurarsi che siano state applicate autorizzazioni appropriate per l'accesso degli utenti a queste cartelle FILESTREAM
    • Comprendere e assicurarsi che nessuna applicazione stia creando file nelle cartelle FILESTREAM
  10. Eseguire un nuovo DBCC CHECKDB e assicurarsi che non generi errori

  11. Se sono presenti altri errori CHECKDB inclusi 7903.7904.7905.7907, si è verificato un danneggiamento o una manomissione della cartella FILESTREAM di SQL Server oltre la semplice aggiunta non valida di file esterni. Questa situazione non è ripristinabile manualmente

Eseguire DBCC CHECKDB

Se si esegue DBCC CHECKDB, potrebbe segnalare l'errore 7908 o 7906, ma non è possibile ripristinarlo.

Eseguire un ripristino da backup

Se il problema non è correlato all'hardware e è disponibile un backup pulito noto, ripristinare il database dal backup