MSSQLSERVER_17204
Gilt für: SQL Server
Details
attribute | Wert |
---|---|
Produktname | SQL Server |
Ereignis-ID | 17204 |
Ereignisquelle | MSSQLSERVER |
Komponente | SQLEngine |
Symbolischer Name | DBLKIO_DEVOPENFAILED |
Meldungstext | % ls: Die Datei %ls für die Dateinummer %d konnte nicht geöffnet werden. Betriebssystemfehler: %ls. |
Erklärung
SQL Server konnte die angegebene Datei aufgrund des angegebenen Betriebssystemfehlers nicht öffnen.
Möglicherweise wird fehler 17204 im Windows-Anwendungsereignis oder im SQL Server-Fehlerprotokoll angezeigt, wenn SQL Server keine Datenbank- und/oder Transaktionsprotokolldateien öffnen kann. Hier sehen Sie ein weiteres Beispiel dafür, wie dieser Fehler aussehen kann:
Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file c:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\data\MyDB_Prm.mdf for file number 1. OS error: 5(Access is denied.).
Möglicherweise werden diese Fehler während des Startvorgangs der SQL Server-Instanz oder eines Datenbankvorgangs angezeigt, der versucht, die Datenbank zu starten (z. B. ALTER DATABASE). In manchen Szenarien können sowohl 17204- als auch 17207-Fehler auftreten, und bei anderen Gelegenheiten sehen Sie nur einen von beiden.
Wenn diese Fehler bei einer Benutzerdatenbank auftreten, verbleibt die Datenbank im Status RECOVERY_PENDING, und Anwendungen können nicht auf die Datenbank zugreifen. Wenn bei einer Systemdatenbank diese Fehler auftreten, wird die SQL Server-Instanz nicht gestartet, und Sie können keine Verbindung mit dieser Instanz von SQL Server herstellen. Ein Fehler mit einer Systemdatenbank könnte auch dazu führen, dass eine SQL Server-Failoverclusterressource offline gehen kann.
Ursache
Bevor eine SQL Server-Datenbank verwendet werden kann, muss die Datenbank gestartet werden. Der Datenbank-Startvorgang umfasst die folgenden Schritte:
- Initialisieren verschiedener Datenstrukturen, die die Datenbank und die Datenbankdateien darstellen
- Öffnen aller Dateien, die zur Datenbank gehören
- Ausführen der Wiederherstellung für die Datenbank
SQL Server verwendet die CreateFile-Windows-API-Funktion , um die Dateien zu öffnen, die zu einer Datenbank gehören.
Nachrichten 17204 (und 17207) deuten darauf hin, dass ein Fehler aufgetreten ist, während SQL Server versucht hat, die Datenbankdateien während des Startvorgangs zu öffnen.
Diese Fehlermeldungen enthalten die folgenden Informationen:
Name der SQL Server-Funktion, die versucht, die Datei zu öffnen. Der Funktionsname, den Sie normalerweise in diesen Fehlermeldungen finden, ist einer der folgenden:
- FCB::Open - Datei hat einen Fehler festgestellt, wenn SQL Server versucht, sie zu öffnen.
- FileMgr::StartPrimaryDataFiles: Eine primäre Datendatei oder eine Datei, die der primären Dateigruppe angehört
- FileMgr::StartSecondaryDataFiles: Eine Datei, die zu einer sekundären Dateigruppe gehört
- FileMgr::StartLogFiles: Eine Transaktionsprotokolldatei
- STREAMFCB::Startup: SQL FileStream-Container
- FCB::RemoveAlternateStreams
Die Statusinformationen unterscheiden mehrere Orte innerhalb einer Funktion, die diese Fehlermeldung generieren kann
Der vollständige physische Pfad der Datei
Die Datei-ID der Datei
Der Betriebssystem-Fehlercode und die Fehlerbeschreibung. In manchen Fällen sehen Sie nur den Fehlercode.
Die Betriebssystem-Fehlerinformationen die in diesen Fehlermeldungen angegeben werden, bilden die Grundursache, die zu Fehler 17204 geführt hat. Häufige Gründe für diese Fehlermeldungen sind ein Berechtigungsproblem oder ein nicht ordnungsgemäßer Dateipfad.
Benutzeraktion
Voraussetzung zum Beheben von Fehler 17204 sind das Verständnis des zugehörigen Betriebssystem-Fehlercodes und die Diagnose des Fehlers. Nachdem die Betriebssystemfehlerbedingung behoben wurde, können Sie versuchen, die Datenbank neu zu starten (z. B. mit ALTER DATABASE SET ONLINE) oder die SQL Server-Instanz, um die betroffene Datenbank online zu bringen. In einigen Fällen gelingt es Ihnen möglicherweise nicht, den Betriebssystemfehler zu beheben. Dann müssen Sie bestimmte Korrekturmaßnahmen ergreifen. Wir behandeln diese Aktionen in diesem Abschnitt.
Wenn die Fehlermeldung 17204 nur einen Fehlercode und keine Fehlerbeschreibung enthält, können Sie versuchen, den Fehlercode mithilfe des Befehls aus einer Betriebssystemshell zu beheben: net helpmsg <fehlercode> . Wenn Sie einen 8stelligen Statuscode als Fehlercode erhalten, können Sie auf Informationsquellen wie How do I convert an HRESULT to a Win32 error code? (Gewusst wie: Konvertieren eines HRESULT-Werts in einen Win32-Fehlercode) zurückgreifen, um diese Statuscodes in Betriebssystemfehler zu decodieren.
Wenn Sie den
Access is Denied
-Betriebssystemfehler „5“ empfangen, ziehen Sie diese Methoden in Erwägung:Überprüfen Sie die für die Datei festgelegten Berechtigungen, indem Sie die Eigenschaften der Datei im Windows-Explorer untersuchen. SQL Server verwendet Windows-Gruppen, um die Zugriffssteuerung für die verschiedenen Dateiressourcen bereitzustellen. Vergewissern Sie sich, dass die entsprechende Gruppe [mit Namen wie SQLServerMSSQLUser$ComputerName$MSSQLSERVER oder SQLServerMSSQLUser$ComputerName$InstanceName] über die erforderlichen Berechtigungen für die Datenbankdatei verfügt, die in der Fehlermeldung genannt wird. Weitere Informationen finden Sie unter Konfigurieren von Dateisystemberechtigungen für den Datenbank-Engine-Zugriff. Stellen Sie sicher, dass die Windows-Gruppe tatsächlich das Startkonto des SQL Server-Diensts oder die Dienst-SID enthält.
Überprüfen Sie das Benutzerkonto, unter dem der SQL Server-Dienst derzeit ausgeführt wird. Sie können diese Informationen mithilfe des Windows Task-Managers abrufen. Suchen Sie nach dem Wert für „Benutzername“ der „sqlservr.exe“-Programmdatei. Auch wenn Sie das SQL Server-Dienstkonto kürzlich geändert haben, wissen Sie, dass die unterstützte Methode zu diesem Vorgang über das hilfsprogramm SQL Server-Konfigurations-Manager ist. Weitere Informationen dazu finden Sie unter SQL Server-Konfigurations-Manager.
Abhängig vom Typ des Vorgangs – Öffnen von Datenbanken während des Serverstarts, Anfügen einer Datenbank, Datenbankwiederherstellung usw. – kann das Konto, das für Identitätswechsel und den Zugriff auf die Datenbankdatei verwendet wird, abweichen. Arbeiten Sie das Thema Sichern von Daten- und Protokolldateien durch, um zu verstehen, welcher Vorgang welche Berechtigungen für welche Konten festlegt. Verwenden Sie ein Tool wie den Prozessmonitor von Windows SysInternals, um zu verstehen, ob der Dateizugriff unter dem Sicherheitkontext des Dienststartkontos der SQL Server-Instanz [oder Dienst-SID] oder einem Konto mit Identitätswechsel erfolgt.
Wenn SQL Server die Identität der Anmeldeinformationen des Benutzers angibt, der den ALTER DATABASE- oder CREATE DATABASE-Vorgang ausführt, sehen Sie die folgenden Informationen im Prozessüberwachungstool (ein Beispiel):
Date & Time: 3/27/2010 8:26:08 PM Event Class: File System Operation: CreateFile Result: ACCESS DENIED Path: C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\attach_test.mdf TID: 4288 Duration: 0.0000366 Desired Access:Generic Read/Write Disposition: Open Options: Synchronous IO Non-Alert, Non-Directory File, Open No Recall Attributes: N ShareMode: Read AllocationSize: n/a Impersonating: DomainName\UserName
Wenn Sie den Betriebssystemfehler 3
The system cannot find the file specified
erhalten:- Überprüfen Sie den gesamten Pfad aus der Fehlermeldung.
- Stellen Sie sicher, dass das Laufwerk und der Ordnerpfad im Windows-Explorer sichtbar und zugänglich sind.
- Überprüfen Sie im Windows-Ereignisprotokoll, ob Probleme mit diesem Laufwerk vorliegen.
- Wenn der Pfad falsch und diese Datenbank bereits im System vorhanden ist, können Sie den Pfad der Datenbankdatei mithilfe der Anleitungen im Thema Verschieben von Datenbankdateien ändern. Möglicherweise müssen Sie dieses Verfahren anwenden, wenn bei Systemdatenbankdateien ein Fehler des Typs 17204 oder 17207 auftritt und Sie ein Notfallwiederherstellungsszenario durcharbeiten, in dem die angegebenen Laufwerke nicht verfügbar sind. In diesem Thema wird auch erläutert, wie Sie den aktuellen Speicherort der verschiedenen Systemdatenbanken (master, model, tempdb, msdb und mssqlsystemresource) herausfinden können.
- Wenn dieser Fehler angezeigt wird, weil die Datenbankdateien fehlen, müssen Sie die Datenbank aus einer gültigen Sicherung wiederherstellen.
- Wenn die Datenbankdatei, auf die sich die Fehlermeldung bezieht, zu einer sekundären Dateigruppe gehört, können Sie diese Dateigruppe optional als offline markieren, die Datenbank online schalten und dann nur diese Dateigruppe wiederherstellen. Weitere Informationen finden Sie im OFFLINE-Abschnitt des Themas ALTER DATABASE-Optionen für Dateien und Dateigruppen (Transact-SQL).
- Wenn die Datei, die den Fehler erzeugt hat, eine Transaktionsprotokolldatei ist, sollten Sie die Abschnitte zu „FOR ATTACH“ und „FOR ATTACH_REBUILD_LOG“ im Thema Create Database lesen, um zu verstehen, wie Sie die fehlenden Transaktionsprotokolldateien neu erstellen können.
- Stellen Sie sicher, dass ein Beliebiger Datenträger oder Netzwerkspeicherort [wie iSCSI-Laufwerk] verfügbar ist, bevor SQL Server versucht, auf die Datenbankdateien an diesen Speicherorten zuzugreifen. Bei Bedarf können Sie die erforderlichen Abhängigkeiten in der Clusterverwaltung oder im Dienststeuerungs-Manager erstellen.
Wenn Sie den Betriebssystemfehler 32
The process cannot access the file because it is being used by another process
erhalten:- Mit Windows Sysinternals-Tools wie Process Explorer oder Handle können Sie herausfinden, ob ein anderer Prozess oder Dienst eine exklusive Sperre für diese Datenbankdatei erhalten hat.
- Beenden Sie den Zugriff auf SQL Server-Datenbankdateien. Häufige Beispiele hierfür sind Virenschutzprogramme (Informationen zu Dateiausnahmen finden Sie in diesem KB-Artikel).
- Stellen Sie in einer Clusterumgebung sicher, dass der Prozess „sqlservr.exe“ aus dem vorherigen besitzenden Knoten tatsächlich die Handles für die Datenbankdateien freigegeben hat. Solche Probleme treten in der Regel nicht auf, aber Fehlkonfigurationen des Clusters oder der E/A-Pfade können zu solchen Problemen führen.