MSSQL Ошибка 5180: Could not open file for file number in database — Решение
- Сообщение:
Msg 5180, Level 16, State 1: Could not open file 'D:\Data\Base1C_2.ndf' for file number 3 in database 'Base1C'. - База данных переходит в состояние
Recovery Pendingили падает при обращении к определенной таблице 1С. - Один из дисковых томов, на котором располагалась дополнительная файловая группа, отключился или вышел из строя.
1. Определение отсутствующего файла и файловой группы
Выполните запрос к системному каталогу master_files, чтобы сопоставить номер файла из ошибки с его физическим путем:
SELECT
database_id, file_id, name, physical_name, state_desc
FROM sys.master_files
WHERE database_id = DB_ID('Base1C');
GO2. Восстановление доступности дискового тома
- Проверьте подключение iSCSI/FC таргетов, состояние сетевых дисков или букв томов Windows в оснастке
diskmgmt.msc. - Убедитесь, что служба SQL Server имеет права доступа к восстановившемуся диску:
icacls "D:\Data" /grant "NT SERVICE\MSSQLSERVER":(OI)(CI)F3. Перевод базы данных в Online
ALTER DATABASE [Base1C] SET ONLINE;
GO4. Восстановление отдельного файла из бэкапа (File Restore)
Если диск с файлом .ndf полностью уничтожен, восстановите только поврежденный файл из резервной копии:
RESTORE DATABASE [Base1C]
FILE = N'Base1C_Secondary'
FROM DISK = N'D:\Backup\Base1C_Full.bak'
WITH NORECOVERY;
RESTORE LOG [Base1C]
FROM DISK = N'D:\Backup\Base1C_Log.trn'
WITH RECOVERY;
GO Частые вопросы (FAQ)
Что означает file number в тексте ошибки 5180?
Это внутренний системный идентификатор файла (file_id) в таблице sys.database_files. File_id 1 — это всегда первичный MDF, file_id 2 — основной журнал LDF, file_id >= 3 — вторичные NDF файлы или дополнительные логи.
Можно ли удалить потерянный NDF файл, если таблица в нем не нужна?
Удалить файл из базы (DBCC SHRINKFILE EMPTYFILE / ALTER DATABASE REMOVE FILE) можно только в том случае, если база находится в статусе Online и файл полностью доступен для переноса страниц.
Почему 1С размещает данные в нескольких файлах NDF?
Разнесение таблиц по нескольким файлам NDF на разные физические диски применяется в High-Load конфигурациях 1С для параллелизации операций ввода-вывода и изоляции тяжелых таблиц (например, регистров накопления).
Как перевести базу в аварийный режим при отсутствии вторичного файла?
Выполните команду: ALTER DATABASE [Base1C] SET EMERGENCY; Это позволит получить доступ к сохранившимся данным в первичной файловой группе PRIMARY.