MSSQLSERVER_17204

Применимо к:SQL Server

Сведения

Атрибут значение
Название продукта SQL Server
Идентификатор события 17204
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя DBLKIO_DEVOPENFAILED
Текст сообщения %ls: Не удалось открыть файл %ls для номера файла %d. Ошибка операционной системы: %ls.

Пояснение

SQL Server не удалось открыть указанный файл из-за указанной ошибки ОС.

В событии приложения Windows или журнале ошибок SQL Server может появиться ошибка 17204, если SQL Server не может открыть файлы базы данных и /или журналов транзакций. Ниже приведен пример такой ошибки:

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

Эти ошибки могут возникать во время запуска экземпляра SQL Server или любой операции базы данных, которая пытается запустить базу данных (например, ALTER DATABASE). В некоторых сценариях могут возникать ошибки 17204 и 17207, а в некоторых — лишь одна из них.

Если такие ошибки происходят в пользовательской базе данных, она остается в состоянии RECOVERY_PENDING, а приложения не могут получить доступ к базе данных. Если системная база данных сталкивается с этими ошибками, экземпляр SQL Server не запустится, и вы не сможете подключиться к этому экземпляру SQL Server. Сбой с системной базой данных также может привести к отключению ресурса отказоустойчивого кластера SQL Server.

Причина

Прежде чем использовать любую базу данных SQL Server, необходимо запустить базу данных. Процесс запуска базы данных включает в себя следующее:

  1. инициализацию различных структур данных, представляющих базу данных и ее файлы;
  2. открытие всех файлов, принадлежащих к базе данных;
  3. выполнение восстановления базы данных.

SQL Server использует функцию API CreateFile Windows для открытия файлов, принадлежащих базе данных.

Сообщения 17204 (и 17207) указывают на то, что произошла ошибка при попытке SQL Server открыть файлы базы данных во время запуска.

Эти сообщения об ошибках содержат следующие сведения:

  1. Имя функции SQL Server, которая пытается открыть файл. В этих сообщениях об ошибках обычно содержится одно из следующих имен:

    • FCB::Open — файл столкнулся с ошибкой при попытке открыть его SQL Server
    • FileMgr::StartPrimaryDataFiles — первичный файл данных или файл, принадлежащий первичной файловой группе.
    • FileMgr::StartSecondaryDataFiles — файл, принадлежащий вторичной файловой группе.
    • FileMgr::StartLogFiles — файл журнала транзакций.
    • STREAMFCB::Startup — контейнер SQL FileStream.
    • FCB::RemoveAlternateStreams
  2. В сведениях о состоянии указаны различные данные о нескольких расположениях внутри функции, которая может создать это сообщение об ошибке.

  3. Полный физический путь к файлу.

  4. Идентификатор файла, соответствующий файлу.

  5. Код ошибки операционной системы и описание ошибки. В некоторых экземплярах вы увидите только код ошибки.

Сведения об ошибках операционной системы, выводимые в этих сообщениях о них, являются основной причиной ошибки 17204. Распространенными причинами этих сообщений об ошибках являются проблемы с разрешениями или неверный путь к файлу.

Действие пользователя

  1. Для устранения ошибки 17204 необходимо узнать соответствующий код ошибки операционной системы. А затем выполнить диагностику этой ошибки. После устранения состояния ошибки операционной системы можно попытаться перезапустить базу данных (например, с помощью ALTER DATABASE SET ONLINE) или экземпляр SQL Server, чтобы подключить затронутую базу данных в режим "в сети". Иногда устранить ошибку операционной системы не удается. В таком случае необходимо выполнить определенные корректирующие действия. Мы обсудим их в этом разделе.

  2. Если сообщение об ошибке 17204 содержит только код ошибки, а не описание ошибки, можно попытаться устранить код ошибки с помощью команды из оболочки операционной системы: код ошибки> net helpmsg<. Если кодом ошибки является 8-значный код состояния, ознакомьтесь с инструкциями на этой странице, чтобы декодировать код состояния в ошибку ОС.

  3. В случае возникновения ошибки операционной системы 5 (Access is Denied), рассмотрите следующие методы устранения:

    • Проверьте разрешения, заданные в файле, просмотрев свойства файла в проводнике Windows. SQL Server использует группы Windows для подготовки управления доступом к различным файлам. Убедитесь, что соответствующая группа (с именем SQLServerMSSQLUser$ComputerName$MSSQLSERVER или SQLServerMSSQLUser$ComputerName$InstanceName) имеет необходимые разрешения для файла базы данных, указанного в сообщении об ошибке. Дополнительные сведения см. в статье Настройка разрешений файловой системы для доступа к компоненту ядра СУБД. Убедитесь, что группа Windows фактически включает учетную запись запуска службы SQL Server или идентификатор безопасности службы.

    • Просмотрите учетную запись пользователя, в которой запущена служба SQL Server. Для получения этих сведений можно использовать диспетчер задач Windows. Найдите значение "Имя пользователя" для исполняемого файла "sqlservr.exe". Кроме того, если вы недавно изменили учетную запись службы SQL Server, знают, что поддерживаемый способ выполнения этой операции осуществляется с помощью служебной программы SQL Server Configuration Manager. Дополнительные сведения см. в статье Диспетчер конфигурации SQL Server.

    • В зависимости от типа операции — открытие баз данных во время запуска сервера, присоединение базы данных, восстановление базы данных и т. д. — учетная запись, используемая для олицетворения и получения доступа к файлу базы данных, может варьироваться. Сведения о том, какая операция позволяет задавать разрешения к каким учетным записям, см. в статье Защита данных и файлов журналов. Используйте такие средства, как Process Monitor из пакета Windows SysInternals, чтобы узнать, каким образом предоставляется доступ к файлу: в контексте безопасности учетной записи запуска службы экземпляра SQL Server или через олицетворенной учетной записи.

      Если SQL Server олицетворяет учетные данные пользователя, выполняющего операцию ALTER DATABASE или CREATE DATABASE, вы заметите следующие сведения в средстве мониторинга процессов (пример):

      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. Если вы получаете ошибку ОС The system cannot find the file specified = 3

    • Проверьте полный путь из сообщения об ошибке.
    • Убедитесь, что диск и путь к папке видимы и доступны в проводнике.
    • Проверьте журнал событий Windows на предмет проблем с этим диском.
    • Если путь указан неправильно и база данных уже существует в системе, можно изменить пути к файлам базы данных, используя методы, описанные в статье Перемещение файлов базы данных. Используйте эту процедуру, особенно для файлов системных баз данных, где возникают ошибки 17204 или 17207, если вы работаете со сценарием аварийного восстановления, в котором указанные диски недоступны. В этом разделе также объясняется, как можно найти текущее расположение различных системных баз данных [master, model, tempdb, msdb и mssqlsystemresource].
    • Если эта ошибка возникает из-за отсутствия файлов базы данных, необходимо восстановить ее из допустимой резервной копии.
      • Если файл базы данных, связанный с ошибкой, принадлежит вторичной файловой группе, можно дополнительно пометить ее как автономную, перевести базу данных в режим "в сети", а затем выполнить восстановление только этой файловой группы. Дополнительные сведения см. в разделе об автономной работе в статье Параметры файлов и файловых групп ALTER DATABASE (Transact-SQL).
      • Если файл, вызвавший ошибку, является файлом журнала транзакций, ознакомьтесь со сведениями в разделах FOR ATTACH и FOR ATTACH_REBUILD_LOG в статье CREATE DATABASE (Transact-SQL), чтобы понять, как можно повторно создать отсутствующие файлы журнала транзакций.
    • Убедитесь, что любой диск или сетевое расположение [например, диск iSCSI] доступен перед попыткой SQL Server получить доступ к файлам базы данных в этих расположениях. При необходимости создайте нужные зависимости в администраторе кластера или диспетчере служб.
  5. Если возникает ошибка операционной системы The process cannot access the file because it is being used by another process = 32

    • Определите, нет ли у другого процесса или службы монопольной блокировки для этого файла базы данных, используя такие средств, как Обозреватель процессов или Дескриптор из Windows Sysinternals.
    • Остановите этот процесс от доступа к файлам базы данных SQL Server. Распространенные примеры — антивирусные программы (см. руководство по исключению файлов в следующей статье базы знаний).
    • В кластерной среде убедитесь, что процесс sqlservr.exe предыдущего узла-владельца освободил дескрипторы для файлов базы данных. Обычно этого не происходит, но неправильная настройка кластера или путей ввода-вывода может привести к таким проблемам.