При обновлении релизов конфигураций «1С:Предприятие», особенно в крупных информационных базах на платформе MS SQL Server, специалисты часто сталкиваются с неожиданной ошибкой СУБД, связанной с недостаточностью прав доступа. Системные администраторы баз данных при анализе логов SQL Server обнаруживают, что платформа 1С пытается выполнить команду ALTER DATABASE для перевода базы в режим SIMPLE (простая модель восстановления). В этой статье мы подробно разберем, почему это происходит, начиная с каких версий платформы появилось такое поведение и как правильно настроить среду для успешного обновления.
Рассмотрим техническую подоплеку этого процесса. Начиная с версии платформы 8.3.18, и особенно в более поздних релизах (8.3.20, 8.3.22 и выше), разработчики фирмы «1С» внедрили механизм так называемой оптимизированной реструктуризации. Этот механизм призван существенно сократить время, затрачиваемое на изменение структуры таблиц в базе данных.
Проанализируем, как работает классическая реструктуризация: при изменении типа реквизита или добавлении новых полей в большую таблицу, система создает временную таблицу, переносит туда данные, удаляет старую и переименовывает новую. В режиме восстановления FULL (полная модель) каждое такое действие фиксируется в логе транзакций (файл .ldf). Если таблица содержит миллионы строк, лог транзакций может раздуться до терабайтных размеров, что приведет к остановке сервера из-за нехватки дискового пространства.
Чтобы избежать этой проблемы, платформа 1С «на лету» пытается выполнить следующие действия:
ALTER DATABASE [ИмяБД] SET RECOVERY SIMPLE.ALTER DATABASE [ИмяБД] SET RECOVERY FULL.Важный момент: это происходит автоматически и без уведомления пользователя, если у учетной записи, под которой сервер 1С подключается к SQL, достаточно прав.
Выясним причину возникновения ошибки «Недостаточно прав», описанной в теме форума. В корпоративных средах со строгими политиками безопасности системные администраторы часто ограничивают права учетной записи, используемой службой rphost. Многие считают, что прав db_datareader и db_datawriter достаточно для работы 1С.
Однако для выполнения команды ALTER DATABASE требуются расширенные полномочия. Рассмотрим, какие роли позволяют это делать:
Если учетная запись 1С не включена в роль db_owner, попытка платформы оптимизировать обновление приведет к фатальной ошибке, и процесс обновления конфигурации информационной базы будет прерван. Именно это и произошло в ситуации, описанной автором сообщения 0.
Проанализируем ситуацию, когда даже наличие прав db_owner не спасет от ошибки. В современных отказоустойчивых кластерах базы данных часто включены в группы высокой доступности (AlwaysOn Availability Groups) или используют Mirroring (зеркалирование).
Особенность этих технологий в том, что они жестко требуют использования модели восстановления FULL. Если база находится в группе доступности, MS SQL Server физически запрещает переключение в режим SIMPLE. В этом случае, когда платформа 1С пытается изменить модель восстановления, она получает отказ от СУБД, что интерпретируется как ошибка обновления. В таких сценариях «автоматизм» платформы может стать серьезной помехой.
Разберем еще один критический аспект, о котором редко задумываются программисты 1С, но который крайне важен для администраторов БД. Даже если права даны и 1С успешно переключила базу в SIMPLE, а затем вернула в FULL, происходит следующее:
Разрывается цепочка бэкапов лога транзакций (Log Chain).
После возвращения в режим FULL невозможно сделать бэкап лога транзакций до тех пор, пока не будет сделан новый полный бэкап (Full Backup) или дифференциальный бэкап. Если администратор не знает об этом «скрытом» переключении, база может остаться без актуальных бэкапов на длительный период, что ставит под угрозу возможность восстановления данных на конкретный момент времени (Point-in-time recovery).
Рассмотрим по шагам, что можно сделать, чтобы избежать ошибок при обновлении:
db_owner на период обновления. Это позволит платформе штатно отрабатывать заложенные в нее механизмы оптимизации.SIMPLE. В этом случае 1С увидит, что база уже находится в нужном режиме, и не будет пытаться менять настройки, что исключит ошибку прав. После обновления не забудьте вернуть режим FULL и сделать полный бэкап.
StandardRestructuring=Свойство
Однако стоит помнить, что отключение оптимизированной реструктуризации может значительно увеличить время обновления базы.Платформа 1С не всегда пытается переключить режим восстановления. Это происходит только тогда, когда алгоритм платформы считает, что объем изменений в метаданных приведет к значительной нагрузке на подсистему хранения. Если вы обновляете конфигурацию, в которой изменилось лишь несколько строк кода в модулях, переключения в SIMPLE, скорее всего, не произойдет.
Тем не менее, при обновлении таких тяжелых конфигураций, как ЗУП или ERP, изменения в структуре таблиц происходят практически всегда. Поэтому рекомендация о переводе базы в SIMPLE перед обновлением является оправданной и профессиональной практикой, даже если 1С пытается сделать это сама.
Подведем итог: Администратор из сообщения 0 абсолютно прав. Платформа 1С:Предприятие в последних версиях действительно проявляет самостоятельность в управлении режимами MS SQL Server. Это не ошибка кода конфигурации, а встроенная логика самой платформы для защиты от переполнения логов транзакций при масштабных операциях. Для корректной работы необходимо либо обеспечить учетной записи 1С права уровня db_owner, либо выполнять подготовительные действия с базой данных вручную на стороне SQL Management Studio.