Teilen über


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:

  1. Initialisieren verschiedener Datenstrukturen, die die Datenbank und die Datenbankdateien darstellen
  2. Öffnen aller Dateien, die zur Datenbank gehören
  3. 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:

  1. 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
  2. Die Statusinformationen unterscheiden mehrere Orte innerhalb einer Funktion, die diese Fehlermeldung generieren kann

  3. Der vollständige physische Pfad der Datei

  4. Die Datei-ID der Datei

  5. 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

  1. 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.

  2. 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.

  3. 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
      
  4. 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.
  5. 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.