MSSQLSERVER_5180
Si applica a: SQL Server
Dettagli
Attributo | Valore |
---|---|
Nome prodotto | SQL Server |
ID evento | 5180 |
Origine evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbolico | DSK_BAD_FCB_FILEID |
Testo del messaggio | Impossibile aprire il blocco di controllo file (FCB) per l'ID di file non valido %d nel database '%.*ls'. Verificare il percorso del file. Eseguire DBCC CHECKDB. |
Spiegazione
Una query o un'operazione potrebbe non riuscire con un errore 5180 quando viene fatto riferimento a un ID file non valido dal motore di database di SQL Server. Questo è un esempio:
messaggio 5180, livello 22, stato 1, riga 1
Impossibile aprire il blocco di controllo file (FCB) per l'ID di file non valido %d nel database '%.*ls'. Verificare il percorso del file. Eseguire DBCC CHECKDB.
Poiché l'errore viene generato con gravità 22, la sessione dell'utente verrà disconnessa. Questo messaggio di errore viene scritto nel log degli errori di SQL Server e nel registro eventi dell'applicazione di Windows con EventID = 5180.
Possibili cause
Sql Server motore di database fa riferimento a un ID file in molte situazioni diverse per lo più quando si fa riferimento a un ID pagina (poiché l'ID file è la prima parte dell'ID pagina). Se per qualsiasi motivo, l'ID file a cui si fa riferimento è 0 o non è < un ID file valido in un database (in base agli ID file validi elencati nelle viste del catalogo di sistema, ad esempio sys.database_files), è possibile riscontrare un errore 5180.
Una delle possibili cause è che un ID di file archiviato non è valido. Poiché il record inoltrato in una riga fa riferimento a un'altra pagina, quando si accede a tale pagina e l'ID del file non è valido, è possibile che venga generato un errore 5180. Questa condizione potrebbe essere un errore di danneggiamento del database nella pagina con il record inoltrato. (In questo esempio DBCC CHECKDB
segnalerebbe il messaggio 8993).
Un altro esempio è un ID di file non valido come parte di un ID di pagina archiviato nell'intestazione di pagina per un ID di pagina successiva o precedente. Questo campo viene usato per collegare una serie di pagine, ad esempio in un indice cluster. Se l'ID di file non è valido per la pagina precedente o successiva, quando il motore deve fare riferimento a questo ID per passare alla pagina successiva o precedente, è possibile che venga generato un errore 5180. (In questo esempio DBCC CHECKDB
segnala il messaggio 8981).
Se il problema non è un ID file non valido a causa di un ID di pagina archiviato danneggiato, il problema potrebbe trovarsi all'interno del motore di database di SQL Server.
Azione utente
Se si verifica questo errore, è consigliabile eseguire DBCC CHECKDB
sul database come indicato nel messaggio di errore. Se si riscontrano errori, è necessario eseguire il ripristino da un backup valido noto. Se non è possibile eseguire il ripristino da un backup, l'altra opzione consiste nell'usare l'opzione di correzione di DBCC CHECKDB
come consigliato dall'output. Nella maggior parte dei casi, la correzione di questo tipo di errore causerà una perdita di dati. Per altre informazioni sull'uso e sulle cause dei problemi di danneggiamento del database, vedere l'articolo Come risolvere gli errori di coerenza del database segnalati da DBCC CHECKDB.
Se DBCC CHECKDB
non segnala alcun errore e il problema persiste, contattare il supporto tecnico Microsoft per assistenza. Essere pronti a fornire la query con cui si riscontra l'errore 5180. Vedere la sezione Ulteriori informazioni su come stabilire quale query ha riscontrato l'errore.
Ulteriori informazioni
Il blocco di controllo file (FCB) è una struttura di memoria interna che tiene traccia di informazioni importanti sul file associato al database. Un ID di file viene usato per identificare in modo univoco un FCB per un database. Se il motore del server tenta di fare riferimento a un ID di file non valido, non è possibile trovare la struttura FCB che attiva la condizione di errore 5180.
Per individuare la query che ha riscontrato questo errore, è possibile usare le tecniche seguenti:
- Per SQL Server 2008 e versioni successive, vedere se la sessione system_health contiene un record dell'errore, che deve includere il testo della query. Vedere la risorsa per altre informazioni sulla sessione di system_health: Supporto di SQL Server 2008: sessione di system_health.
- Usare SQL Server Profiler e acquisire gli
SQL:BatchStarting
eventi di eccezione ,RPC:Starting
e . Trovare la query che precede l'evento di eccezione per 5180 per la sessione associata all'evento di eccezione.