Teilen über


MSSQLSERVER_17207

Gilt für: SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 17207
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name DBLKIO_OS2DISKERROR
Meldungstext %ls: Betriebssystemfehler %ls beim Erstellen oder Öffnen der Datei '%ls'. Diagnostizieren und korrigieren Sie den Betriebssystemfehler, und wiederholen Sie den Vorgang.

Erklärung

SQL Server konnte die angegebene Datei aufgrund des angegebenen Betriebssystemfehlers nicht öffnen.

Möglicherweise wird fehler 17207 im Windows-Anwendungsereignis oder im SQL Server-Fehlerprotokoll angezeigt, wenn SQL Server keine Datenbank- und/oder Transaktionsprotokolldateien öffnen kann. Hier sehen Sie ein Beispiel dafür, wie dieser Fehler aussehen kann.

Error: 17207, Severity: 16, State: 1.
FileMgr::StartSecondaryDataFiles: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'F:\MSSQL\DATA\MyDB_FG1_1.ndf'. Diagnose and correct the operating system error, and retry the operation.

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 17207- als auch 17204-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. Dies kann auch dazu führen, dass eine SQL Server-Failoverclusterressource offline gehen kann.

Wenn das Problem mit Ihrer SQL Server FileStream-Dateigruppe zusammenhängt, werden Sie feststellen, dass nur der vollständige Verzeichnispfad anstelle eines Dateinamens aufgeführt ist. Beispiel:

Error: 17207, Severity: 16, State: 1.
STREAMFCB::Startup: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\bpa_files_test_fs_1\bpa_files_test_fs_1'. Diagnose and correct the operating system error, and retry the operation.

Ursache

Bevor eine SQL Server-Datenbank verwendet werden kann, muss die Datenbank gestartet werden. Der Datenbank-Startvorgang umfasst die Initialisierung verschiedener Datenstrukturen, die die Datenbank und ihre Dateien darstellen, das Öffnen aller Dateien, die zur Datenbank gehören und schließlich das 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 17207 (und 17204) 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. In den Statusinformationen wird zwischen mehreren Stellen innerhalb einer Funktion unterschieden, die diese Fehlermeldung generieren können.

  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.

Aktion des Benutzers

  1. Voraussetzung zum Beheben von Fehler 17207 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 (z. B. mit ALTER DATABASE SET ONLINE) oder die SQL Server-Instanz neu zu starten, um die betroffene Datenbank online zu bringen. In einigen Fällen lässt sich der Betriebssystemfehler unter Umständen nicht beheben, sodass Sie bestimmte Korrekturmaßnahmen ergreifen müssen. Wir behandeln diese Aktionen in diesem Abschnitt.

  2. Wenn die Fehlermeldung 17207 nur einen Fehlercode und keine Fehlerbeschreibung enthält, können Sie versuchen, den Fehlercode mithilfe des Befehls aus einer Betriebssystemshell zu beheben: net helpmsg <error code> . 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 Dateieigenschaften im Windows-Explorer aufrufen. SQL Server verwendet Windows-Gruppen, um die Zugriffssteuerung für die verschiedenen Dateiressourcen bereitzustellen. Vergewissern Sie sich, dass die richtige Gruppe (mit einem 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 Möglichkeit, diesen Vorgang auszuführen, darin besteht, das hilfsprogramm SQL Server-Konfigurations-Manager zu verwenden. Weitere Informationen dazu finden Sie unter SQL Server-Konfigurations-Manager.

    • Das Konto, das für den Identitätswechsel und den Zugriff auf die Datenbankdatei verwendet wird, kann je nach Typ des Vorgangs (Öffnen von Datenbanken während des Serverstarts, Anfügen einer Datenbank, Datenbankwiederherstellung usw.) variieren. Arbeiten Sie das Thema Sichern von Daten- und Protokolldateien durch, um zu verstehen, welcher Vorgang welche Berechtigungen für welche Konten festlegt. Mit Tools wie dem Prozessmonitor von Windows SysInternals können Sie nachvollziehen, ob der Dateizugriff im Sicherheitskontext des Dienststartkontos der SQL Server-Instanz (oder Dienst-SID) oder eines Identitätswechselkontos erfolgt.

      Wenn SQL Server die Identität des Benutzerkontos annimmt, mit dem der ALTER DATABASE- oder CREATE DATABASE-Vorgang ausgeführt wird, finden Sie im Tool „Prozessmonitor“ die folgenden Informationen (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\MSSQL13.SQL2016\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 aus dem Artikel Verschieben von Datenbankdateien bearbeiten. Möglicherweise müssen Sie dieses Verfahren verwenden, insbesondere bei Systemdatenbankdateien, in denen ein Fehler des Typs 17204 oder 17207 auftritt, und wenn Sie an einem Notfallwiederherstellungsszenario arbeiten, 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, da 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. Ein gängiges Beispiel hierfür ist z. B. Antivirussoftware (weitere Informationen im folgenden 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. Obwohl dies normalerweise nicht der Fall ist, können Fehlkonfigurationen des Clusters oder der E/A-Pfade zu solchen Problemen führen.