MSSQL Ошибка 3906: Failed to update database because read-only — Решение
- Сообщение:
Msg 3906, Level 16, State 1: Failed to update database 'Base1C' because the database is read-only. - При попытке авторизации или записи документа в 1С: «Ошибка СУБД: База данных открыта только для чтения».
- База находится в статусе
READ_ONLYв свойствах SSMS. - Кластер 1С случайно подключен к вторичной реплике (Secondary Replica) Always On Availability Group.
1. Проверка и изменение режима базы данных через T-SQL
Выполните запрос для возврата базы данных в режим полной записи:
ALTER DATABASE [Base1C] SET READ_WRITE WITH ROLLBACK IMMEDIATE;
GO2. Проверка состояния реплик Always On Availability Groups
Если используется кластер Always On, убедитесь, что операция записи не выполняется на вторичной (Read-Intent) ноде:
SELECT
databases.name,
dm_hadr_availability_replica_states.role_desc,
dm_hadr_availability_group_states.primary_recovery_health_desc
FROM sys.databases
JOIN sys.dm_hadr_availability_replica_states
ON sys.databases.replica_id = sys.dm_hadr_availability_replica_states.replica_id
JOIN sys.dm_hadr_availability_group_states
ON sys.dm_hadr_availability_replica_states.group_id = sys.dm_hadr_availability_group_states.group_id
WHERE databases.name = 'Base1C';
GOВ строке подключения кластера 1С укажите адрес Листенера (Availability Group Listener), а не IP-адрес конкретного сервера.
3. Проверка атрибутов физических файлов на диске
Если база данных была скопирована с оптического диска или архивного хранилища, файлы .mdf и .ldf могут иметь флаг Windows Read-Only:
Get-Item "D:\Data\Base1C.mdf" | Select-Object IsReadOnly
Set-ItemProperty -Path "D:\Data\Base1C.mdf" -Name IsReadOnly -Value $false
Set-ItemProperty -Path "D:\Data\Base1C_log.ldf" -Name IsReadOnly -Value $false Частые вопросы (FAQ)
Почему база самопроизвольно переходит в Read-Only?
Это может произойти при аварийном переключении группы доступности Always On, завершении процедуры создания Snapshot (снимка базы) со сбоем, или если закончилось место на диске при аварийном монтировании.
Может ли кластер 1С работать с базой в режиме READ_ONLY?
Нет. Сервер 1С:Предприятия требует обязательной записи во временные системные таблицы, таблицы сеансов, блокировок и журнал регистрации при подключении любого пользователя.
Что делать, если команда ALTER DATABASE зависает?
Команда блокируется открытыми транзакциями. Обязательно используйте конструкцию WITH ROLLBACK IMMEDIATE, которая принудительно прерывает все активные сессии и сбрасывает блокировки.
Влияет ли Database Snapshot на ошибку 3906?
Да, если подключение приложения по ошибке направлено на имя Database Snapshot (снимка базы), любые команды INSERT/UPDATE/DELETE будут возвращать ошибку 3906.