MSSQL Ошибка 5173: One or more files do not match the primary file — Решение
- Сообщение:
Msg 5173, Level 16, State 1: One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the correct files. - Сбой выполнения
CREATE DATABASE ... FOR ATTACH. - Попытка примонтировать файл журнала транзакций LDF или файл данных NDF от другой копии базы данных.
- Несовпадение внутреннего GUID базы данных и контрольных отметок LSN в заголовках файлов.
1. Проверка состава и соответствия файлов
Ошибка 5173 возникает, если файлы данных и журнала принадлежат разным временным точкам (например, файл .mdf взят из утренней копии, а .ldf — из вечерней).
2. Принудительное пересоздание журнала транзакций (ATTACH_REBUILD_LOG)
Если у вас есть валидный первичный файл .mdf (и все вторичные .ndf), а поврежден или не подходит только лог-файл .ldf, выполните монтирование с перестроением журнала:
CREATE DATABASE [Base1C] ON
( FILENAME = N'D:\Data\Base1C.mdf' )
FOR ATTACH_REBUILD_LOG;
GOИли через расширенный синтаксис ATTACH_FORCE_REBUILD_LOG:
CREATE DATABASE [Base1C] ON
( FILENAME = N'D:\Data\Base1C.mdf' )
FOR ATTACH_FORCE_REBUILD_LOG;
GO3. Проверка целостности базы после перестроения журнала
ALTER DATABASE [Base1C] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB (N'Base1C', NOREPAIR) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
ALTER DATABASE [Base1C] SET MULTI_USER;
GO Частые вопросы (FAQ)
Когда нельзя использовать ATTACH_REBUILD_LOG?
Если база данных была остановлена некорректно (Dirty Shutdown) и в журнале LDF остались незафиксированные активные транзакции, перестроение лога может привести к логической несогласованности данных 1С.
Почему нельзя использовать LDF от другой базы с тем же именем?
Каждый файл базы данных содержит в заголовке уникальный Binding GUID и LSN создания. Если GUID журнала не совпадает с GUID файла MDF, SQL Server блокирует запуск для предотвращения разрушения структуры.
Что делать, если база состоит из нескольких файлов данных (MDF + NDF)?
При перестроении лога необходимо перечислить в секции ON абсолютно все файлы данных (.mdf и все .ndf), иначе команда завершится ошибкой.
Как узнать, был ли файл остановлен чисто (Clean Shutdown)?
Проверьте заголовок файла с помощью утилиты командной строки: DBCC CHECKPRIMARYFILE ('D:\Data\Base1C.mdf', 2). Статус 1 в выводе означает Clean Shutdown.