Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_ERR_3906 1С:Предприятие и СУБД

MSSQL Ошибка 3906: Failed to update database because read-only — Решение

Обновлено: 25.08.2026 · Официальная документация ↗
  • Сообщение: 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;
GO

2. Проверка состояния реплик 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
💡 Практика специалистов: При настройке Always On для 1С:Предприятие обязательно проверяйте строку соединения в кластере серверов 1С (порт и имя листенера). Подключение напрямую к узлу вместо листенера гарантированно вызовет ошибку 3906 при первой же автоматической смене ролей (Failover).

Частые вопросы (FAQ)

Почему база самопроизвольно переходит в Read-Only?

Это может произойти при аварийном переключении группы доступности Always On, завершении процедуры создания Snapshot (снимка базы) со сбоем, или если закончилось место на диске при аварийном монтировании.

Может ли кластер 1С работать с базой в режиме READ_ONLY?

Нет. Сервер 1С:Предприятия требует обязательной записи во временные системные таблицы, таблицы сеансов, блокировок и журнал регистрации при подключении любого пользователя.

Что делать, если команда ALTER DATABASE зависает?

Команда блокируется открытыми транзакциями. Обязательно используйте конструкцию WITH ROLLBACK IMMEDIATE, которая принудительно прерывает все активные сессии и сбрасывает блокировки.

Влияет ли Database Snapshot на ошибку 3906?

Да, если подключение приложения по ошибке направлено на имя Database Snapshot (снимка базы), любые команды INSERT/UPDATE/DELETE будут возвращать ошибку 3906.

Полезные материалы
Рекомендуем