MSSQL Ошибка 5120: Unable to open physical file Operating system error — Решение
- Сообщение:
Msg 5120, Level 16, State 101: Unable to open the physical file 'D:\Data\Base1C.mdf'. Operating system error 5: '5(Access is denied.)'. - База данных переходит в состояние
Recovery Pendingили не монтируется при выполненииsp_attach_db/CREATE DATABASE ... FOR ATTACH. - Сбой инициализации дополнительных файлов данных
.ndfили файлов журнала транзакций.ldf.
1. Определение сервисной учетной записи SQL Server
Откройте SQL Server Configuration Manager и найдите имя учетной записи в столбце Log On As для службы SQL Server (MSSQLSERVER) (например, NT Service\MSSQLSERVER или доменная учетная запись DOMAIN\svc_sql).
2. Назначение прав NTFS на папки и файлы базы
Через командную строку PowerShell от имени администратора назначьте полные права на каталог с базами данных 1С:
$Acl = Get-Acl "D:\SQLData"
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("NT SERVICE\MSSQLSERVER", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl "D:\SQLData" $AclИли через стандартную утилиту icacls:
icacls "D:\SQLData" /grant "NT SERVICE\MSSQLSERVER":(OI)(CI)F /T3. Проверка блокировок файловыми дескрипторами и антивирусом
- Добавьте расширения
*.mdf,*.ldf,*.ndf,*.bak,*.trnв исключения антивирусного сканера в реальном времени. - Проверьте утилитой
Handle.exe(Sysinternals), не удерживает ли файл другой процесс (резервное копирование, сторонний агент):
handle64.exe Base1C.mdf4. Примонтирование базы данных после исправления прав
CREATE DATABASE [Base1C] ON
( FILENAME = N'D:\SQLData\Base1C.mdf' ),
( FILENAME = N'D:\SQLLog\Base1C_log.ldf' )
FOR ATTACH;
GO Частые вопросы (FAQ)
Что означает код 'Operating system error 5' в тексте ошибки 5120?
Код ошибки Windows 5 означает ERROR_ACCESS_DENIED (Отказ в доступе). У сервисной учетной записи службы SQL Server отсутствуют права NTFS на чтение/запись в указанный каталог или файл.
Что делать, если возвращается 'Operating system error 32'?
Код ошибки 32 (ERROR_SHARING_VIOLATION) означает, что файл занят другим процессом (например, службой стороннего бэкапа уровня ОС или запущенным другим экземпляром SQL Server).
Почему права сбиваются при копировании файлов на другой диск?
При копировании файлов через проводник они наследуют права нового родительского каталога. Если в новой папке нет разрешений для сервисного SID SQL Server, возникнет ошибка 5120.
Можно ли давать группе 'Все' (Everyone) права на папки SQL Server?
Это крайне небезопасно. Назначайте права исключительно учетной записи службы SQL Server (NT SERVICE\MSSQLSERVER или виртуальному сервисному аккаунту).