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 im Windows-Anwendungsereignis- oder im SQL Server-Fehlerprotokoll Fehler 17204 verzeichnet, wenn SQL Server eine Datenbank und/oder Dateien des Transaktionsprotokolls nicht ö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 begegnen Ihnen diese Fehler während des Startvorgangs der SQL Server-Instanz oder während anderer Datenbankvorgänge, die versuchen, 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 diese Fehler bei einer Systemdatenbank auftreten, wird die SQL Server-Instanz nicht gestartet, und Sie können keine Verbindung mit dieser Instanz von SQL Server herstellen. Ein Fehler in einer Systemdatenbank könnte auch dazu führen, dass eine SQL Server-Failoverclusterressource in den Offlinemodus versetzt wird.

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 Windows-API-Funktion CreateFile, um die Dateien zu öffnen, die zu einer Datenbank gehören.

Die Nachrichten 17204 (und 17207) weisen darauf hin, dass ein Fehler auftrat, während SQL Server versuchte, die Datenbankdateien während des Startvorgangs zu öffnen.

Diese Fehlermeldungen enthalten die folgenden Informationen:

  1. Den Namen 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: Bei der Datei ist ein Fehler aufgetreten, als SQL Server sie zu öffnen versuchte
    • 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. Nach dem Beheben der Betriebssystem-Fehlerbedingung können Sie versuchen, die Datenbank neu zu starten (beispielsweise mithilfe von ALTER DATABASE SET ONLINE) oder die betroffene Datenbank durch die SQL Server-Instanz online schalten zu lassen. 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 von einer Betriebssystemshell aufzulösen: 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 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. Achten Sie darauf, dass die Windows-Gruppe das SQL Server-Dienststartkonto oder die Dienst-SID tatsächlich enthält.

    • Überprüfen Sie das Benutzerkonto, unter dem der SQL Server-Dienst aktuell 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. Wenn Sie vor Kurzem das SQL Server-Dienstkonto geändert haben, berücksichtigen Sie außerdem, dass bei der unterstützten Durchführung dieses Vorgangs das SQL Server-Konfigurations-Manager-Hilfsprogramm verwendet wird. 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 Sicherheitskontext des Dienststartkontos der SQL Server-Instanz [oder Dienst-SID] oder einem Konto mit Identitätswechsel erfolgt.

      Wenn SQL Server die Anmeldeinformationen des Benutzers, mit dem der ALTER DATABASE- oder CREATE DATABASE-Vorgang ausgeführt wird, durch Identitätswechsel darstellt, können Sie im Prozessmonitor-Tool die folgenden Informationen finden (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 eine beliebige Netzwerkadresse (z. B. ein 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.
    • Verhindern Sie, dass dieser Prozess auf SQL Server-Datenbankdateien zugreift. 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.