MSSQLSERVER_5180
Gilt für: SQL Server
Details
attribute | Wert |
---|---|
Produktname | SQL Server |
Ereignis-ID | 5180 |
Ereignisquelle | MSSQLSERVER |
Komponente | SQLEngine |
Symbolischer Name | DSK_BAD_FCB_FILEID |
Meldungstext | FCB (File Control Bank) konnte für die ungültige Datei-ID %d in der '%.*ls'-Datenbank nicht geöffnet werden. Überprüfen Sie den Dateispeicherort. Führen Sie DBCC CHECKDB aus. |
Erklärung
Eine Abfrage oder ein Vorgang schlägt möglicherweise mit einem Fehler 5180 fehl, wenn von der SQL Server-Datenbank-Engine auf eine ungültige Datei-ID verwiesen wird. Hier ein Beispiel:
Meldung 5180, Ebene 22, Status 1, Zeile 1
FCB (File Control Bank) konnte für die ungültige Datei-ID %d in der '%.*ls'-Datenbank nicht geöffnet werden. Überprüfen Sie den Dateispeicherort. Führen Sie DBCC CHECKDB aus.
Da für den Fehler der Schweregrad 22 angegeben ist, wird die Sitzung des Benutzers getrennt. Diese Fehlermeldung wird in das SQL Server-Fehlerprotokoll und das Windows-Anwendungsereignisprotokoll mit EventID = 5180 geschrieben.
Mögliche Ursachen
Die SQL Server-Datenbank-Engine verweist in vielen verschiedenen Situationen hauptsächlich auf eine Datei-ID, wenn auf eine Seiten-ID verwiesen wird (da die Datei-ID der erste Teil der Seiten-ID ist). Wenn aus irgendeinem Grund die datei-ID, auf die verwiesen wird, 0 ist oder keine gültige Datei-ID in einer Datenbank ist < (gemäß den gültigen Datei-IDs, die in Systemkatalogansichten wie sys.database_files aufgeführt sind), kann ein Fehler von 5180 auftreten.
Eine mögliche Ursache ist, dass eine gespeicherte Datei-ID nicht gültig ist. Da der weitergeleitete Datensatz in einer Zeile auf eine andere Seite verweist, kann beim Zugriff auf diese Seite ein 5180-Fehler auftreten, wenn die Datei-ID ungültig ist. Die Bedingung ist ein Datenbankbeschädigungsfehler auf der Seite mit dem weitergeleiteten Datensatz. (In diesem Beispiel würde DBCC CHECKDB
die Meldung 8993 ausgeben).
Ein weiteres Beispiel ist eine ungültige Datei-ID als Teil einer Seiten-ID, wie sie im Seitenheader für die Seiten-ID einer nächsten oder vorherigen Seite gespeichert ist. Dieses Feld wird verwendet, um eine Reihe von Seiten zu verknüpfen, wie z. B. in einem gruppierten Index. Wenn die Datei-ID für die vorherige oder nächste Seite ungültig ist, kann ein 5180-Fehler auftreten, wenn die Engine darauf verweisen muss, um zur nächsten oder vorherigen Seite zu gelangen. (In diesem Beispiel gibt DBCC CHECKDB
die Meldung 8981 aus.)
Wenn das Problem aufgrund einer beschädigten gespeicherten Seiten-ID keine ungültige Datei-ID ist, liegt das Problem möglicherweise innerhalb der SQL Server-Datenbank-Engine.
Aktion des Benutzers
Wenn dieser Fehler auftritt, sollten Sie DBCC CHECKDB
wie in der Fehlermeldung aufgeführt für die Datenbank ausführen. Wenn Fehler auftreten, sollten Sie die Daten aus einer als fehlerfrei bekannten Sicherung wiederherstellen. Wenn Sie die Daten aus einer Sicherung nicht wiederherstellen können, bleibt Ihnen als andere Möglichkeit die wie in der Ausgabe empfohlene Verwendung der Reparaturoption von DBCC CHECKDB
. In den meisten Fällen führt die Reparatur eines solchen Fehlertyps zu einem Datenverlust. Weitere Informationen zur Verwendung und Ursachen von Datenbankbeschädigungsproblemen finden Sie im Artikel: Beheben von Datenbankkonsistenzfehlern, die von DBCC CHECKDB gemeldet wurden.
Wenn DBCC CHECKDB
keinen Fehler meldet und das Problem weiterhin auftritt, wenden Sie sich an den technischen Support von Microsoft, um Unterstützung zu erhalten. Halten Sie die Abfrage bereit, die den 5180-Fehler verursacht. Im Abschnitt Weitere Informationen erfahren Sie, wie Sie herausfinden, welche Abfrage den Fehler verursacht hat.
Weitere Informationen
Der File Control Block (FCB) ist eine interne Speicherstruktur, die wichtige Informationen zu der Datei nachverfolgt, die der Datenbank zugeordnet ist. Eine Datei-ID wird verwendet, um einen FCB für eine Datenbank eindeutig zu identifizieren. Wenn die Server-Engine versucht, auf eine ungültige Datei-ID zu verweisen, kann die FCB-Struktur nicht gefunden werden, wodurch die 5180-Fehlerbedingung ausgelöst wird.
Wenn Sie herausfinden möchten, welche Abfrage diesen Fehler verursacht hat, gehen Sie wie folgt vor:
- Überprüfen Sie für SQL Server 2008 und höhere Versionen, ob die system_health Sitzung einen Datensatz des Fehlers enthält, der den Abfragetext enthalten sollte. Weitere Informationen zur system_health Sitzung finden Sie in der Ressource: Unterstützen von SQL Server 2008: Die system_health-Sitzung.
- Verwenden Sie SQL Server Profiler, und erfassen Sie die
SQL:BatchStarting
Ereignisse ,RPC:Starting
und Ausnahmeereignisse. Suchen Sie nach der Abfrage, die dem Ausnahmeereignis für 5180 für die Sitzung vorangestellt ist, die dem Ausnahmeereignis zugeordnet ist.