MSSQLSERVER_17207

platí pro:SQL Server

Podrobnosti

Attribute Value
Název produktu SQL Server
ID události 17207
Zdroj události MSSQLSERVER
Součást SQLEngine
Symbolický název DBLKIO_OS2DISKERROR
Text zprávy %ls: Při vytváření nebo otevírání souboru%lsdošlo k chybě operačního systému %ls. Diagnostikujte a opravte chybu operačního systému a zkuste operaci zopakovat.

Vysvětlení

SQL Server nebyl schopen otevřít specifikovaný soubor kvůli chybě zadaného operačního systému.

Můžete zaznamenat chybu 17207 v události aplikace Windows nebo v logu chyb SQL Server, pokud SQL Server nemůže otevřít databázi a/nebo soubory transakčních logů. Zde je příklad, jak by chyba mohla vypadat.

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.

Tyto chyby můžete zaznamenat během startování instance SQL Server nebo při jakékoli databázové operaci, která se snaží databázi spustit (například ALTER DATABASE). V některých případech můžete vidět chyby 17207 a 17204, jindy jen jednu z nich.

Pokud uživatelská databáze narazí na tyto chyby, zůstane v RECOVERY_PENDING stavu a aplikace k databázi nebudou mít přístup. Pokud systémová databáze narazí na tyto chyby, instance SQL Server se nespustí a nelze se k ní připojit k této instanci SQL Server. To by také mohlo vést k tomu, že failover cluster resource SQL Server přestane fungovat.

Pokud se problém týká vaší souborové skupiny SQL Server FileStream, všimnete si, že je uvedena pouze celá cesta k adresáři místo názvu souboru. Následuje příklad.

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.

Příčina

Než lze použít jakoukoli databázi SQL Server, je třeba databázi spustit. Proces spuštění databáze zahrnuje inicializaci různých datových struktur reprezentujících databázi a databázové soubory, otevření všech souborů patřících do databáze a nakonec spuštění obnovy databáze. SQL Server používá funkci CreateFile Windows API k otevření souborů, které patří do databáze.

Zprávy 17207 (a 17204) uvádějí, že při pokusu SQL Server o otevření databázových souborů během startovacího procesu došlo k chybě.

Tyto chybové zprávy obsahují následující informace:

  1. Název funkce SQL Server, která se snaží soubor otevřít. Název funkce, který se obvykle objevuje v těchto chybových hlášeních, je jeden z následujících:

    • FCB::Otevřít – soubor narazil na chybu, když se SQL Server pokusí jej otevřít
    • FileMgr::StartPrimaryDataFiles – primární datový soubor nebo soubor patřící do primární skupiny souborů
    • FileMgr::StartSecondaryDataFiles – soubor patřící do sekundární skupiny souborů
    • FileMgr::StartLogFiles – soubor transakčního logu
    • STREAMFCB::Startup - SQL FileStream kontejner
    • FCB::OdstranitAlternativní proudy
  2. Informace o stavu rozlišují více míst v rámci funkce, která může tuto chybovou zprávu vygenerovat.

  3. Celá fyzická cesta k souboru.

  4. ID souboru odpovídající souboru.

  5. Kód chyby operačního systému a popis chyby. V některých případech uvidíte pouze chybový kód.

Informace o chybě operačního systému vytištěné v těchto chybových zprávách jsou hlavní příčinou vedoucí k chybě 17204. Běžnými příčinami těchto chybových hlášek jsou problém s oprávněními nebo nesprávná cesta k souboru.

Akce uživatele

  1. Vyřešení chyby 17207 zahrnuje pochopení příslušného kódu chyby operačního systému a jeho diagnostiku. Jakmile je chyba operačního systému vyřešena, můžete se pokusit restartovat databázi (například pomocí ALTER DATABASE SET ONLINE) nebo instance SQL Server, abyste postiženou databázi spustili. V některých případech nemusíte být schopni chybu operačního systému vyřešit, takže budete muset přijmout konkrétní nápravná opatření. Tyto kroky si budeme probírat v této části.

  2. Pokud chybová zpráva 17207 obsahuje pouze chybový kód a ne popis chyby, můžete zkusit chybový kód vyřešit příkazem z operačního shellu: net helpmsg <error code> . Pokud dostáváte 8místný stavový kód jako chybový kód, můžete se podívat na zdroje informací jako Jak převést HRESULT na chybový kód Win32? a dekódovat tyto stavové kódy na chyby operačního systému.

  3. Pokud dochází k chybě operačního Access is Denied systému = 5, zvažte tyto metody:

    • Zkontrolujte oprávnění, která jsou na souboru nastavena, tím, že se podívete na vlastnosti souboru ve Windows Exploreru. SQL Server používá Windows skupiny k zajištění kontroly přístupu k různým souborovým zdrojům. Ujistěte se, že příslušná skupina (s názvy jako SQLServerMSSQLUser$ComputerName$MSSQLSERVER nebo SQLServerMSSQLUser$ComputerName$InstanceName) má požadovaná oprávnění k databázovému souboru zmíněnému v chybové zprávě. Další podrobnosti najdete v tématu Konfigurace oprávnění systému souborů pro přístup k databázovému stroji . Ujistěte se, že skupina Windows skutečně obsahuje spouštěcí účet služby SQL Server nebo identifikátor SID služby.

    • Zkontrolujte uživatelský účet, pod kterým je aktuálně spuštěná služba SQL Serveru. Tyto informace můžete získat pomocí Správce úloh systému Windows. Vyhledejte hodnotu User Name (Uživatelské jméno) pro spustitelný souborsqlservr.exe. Pokud jste nedávno změnili účet služby SQL Server, vězte, že podporovaný způsob této operace je použití nástroje SQL Server Configuration Manager. Více informací o tom najdete v SQL Server Configuration Manager.

    • V závislosti na typu operace (otevírání databází při spuštění serveru, připojení databáze, obnovení databáze atd.) se může lišit účet, který se používá pro zosobnění a přístup k souboru databáze. Projděte si téma Zabezpečení dat a souborů protokolů a zjistěte, která operace nastavuje oprávnění a jaké účty. Použijte nástroj jako Windows SysInternals Process Monitor, abyste zjistili, zda přístup k souboru probíhá v bezpečnostním kontextu spouštěcího účtu SQL Server instance service (nebo Service SID) nebo v rámci falešného účtu.

      Pokud SQL Server napodobuje uživatelské přihlašovací údaje k přihlašování, které operaci nebo vykonává ALTER DATABASECREATE DATABASE, všimnete si následujících informací v nástroji Process Monitor (příklad).

      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. Pokud dostáváte The system cannot find the file specified chybu OS = 3:

    • Projděte si kompletní cestu z chybové zprávy.
    • Ujistěte se, že disková mechanika a cesta k složkám jsou viditelné a přístupné z Windows Exploreru.
    • Prohlédněte si Windows Event log, abyste zjistili, zda s tímto diskem nejsou nějaké problémy.
    • Pokud je cesta nesprávná a tato databáze již v systému existuje, můžete změnit cesty k databázovým souborům pomocí metod vysvětlených v článku Move Database Files . Možná budete muset tento postup použít, zejména u systémových databázových souborů, které se setkávají s 17204 nebo 17207 a procházíte scénářem obnovy po havárii, kde nejsou k dispozici konkrétní diskové jednotky. Toto téma také vysvětluje, jak můžete identifikovat aktuální umístění různých systémových databází [master, model, tempdb, msdb a mssqlsystemresource].
    • Pokud tuto chybu vidíte, protože chybí databázové soubory, musíte databázi obnovit z platné zálohy:
      • Pokud databázový soubor spojený s chybou patří do sekundární souborové skupiny, můžete tuto skupinu volitelně označit jako offline, převést databázi online a poté provést obnovení pouze této souborové skupiny. Pro více informací viz sekce OFFLINE v tématu ALTER DATABASE Možnosti souboru a skupiny souborů (Transact-SQL).
      • Pokud je soubor, který způsobil chybu, transakční log, projděte si informace v sekcích "FOR ATTACH" a "FOR ATTACH_REBUILD_LOG" v tématu CREATE DATABASE (Transact-SQL), abyste pochopili, jak můžete znovu vytvořit chybějící transakční logy.
    • Ujistěte se, že jakékoli místo na disku nebo v síti [například iSCSI disk] je dostupné, než se SQL Server pokusí získat přístup k databázovým souborům na těchto místech. Pokud je potřeba, vytvořte požadované závislosti v Cluster Administrator nebo Service Control Manager.
  5. Pokud dostáváte chybu The process cannot access the file because it is being used by another process operačního systému = 32:

    • Použijte nástroj jako Process Explorer nebo Handle z Windows Sysinternals k ověření, zda jiný proces nebo služba získala výhradní zámek na tento databázový soubor.
    • Zastavte tento proces v přístupu k souborům databáze SQL Server. Běžné příklady zahrnují antivirové programy (viz pokyny pro vyloučení souborů v následujícím článku KB).
    • V clusterovém prostředí se ujistěte, že sqlservr.exe proces z předchozího vlastníka skutečně uvolnil handle databázových souborů. Obvykle se to nestává, ale špatné konfigurace clusteru nebo I/O cest mohou k takovým problémům vést.