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.
Terminare i backup e assicurarsi che i backup precedenti per questo database non vengano sovrascritti o persi
Eseguire un DBCC CHECKB completo sul database per il quale il backup non è riuscito con errore 3056. Non usare con physical_only
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'.
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.
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'
In Esplora risorse aprire la sottocartella identificata nell'errore 7906 o 7908 (ad esempio \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)
Trovare quindi il file identificato nel messaggio di errore (ad esempio NO_USER_FILE_SHOULD_BE_HERE.txt) e creare una copia di questo file in una directory temporanea come backup.
Dopo aver verificato di avere una copia, è possibile rimuovere il file dalla cartella
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
Eseguire un nuovo DBCC CHECKDB e assicurarsi che non generi errori
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
- Controllare l'hardware per eventuali problemi e risolverli
- Assicurarsi che il sistema sia protetto da malware. Si noti che i file di dati FILESTREAM devono essere esclusi dall'analisi del software antivirus. Vedere Raccomandazioni e linee guida per migliorare le prestazioni DI FILESTREAM
- Eseguire quindi il ripristino da un backup integro del database
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