При внесении изменений в метаданные крупного регистра (например, плана счетов или регистра бухгалтерии «Хозрасчетный») платформа «1С:Предприятие» выполняет реструктуризацию таблиц в СУБД MS SQL Server. Если в этот момент происходит падение процесса rphost, аварийное завершение Конфигуратора или сбой сети, табличная структура базы данных может остаться в промежуточном состоянии.
В этой статье мы подробно разберем механику возникновения ошибки Invalid object name 'dbo._AccRg...', выясним, почему простое переименование таблицы в SQL не решает проблему полностью, и рассмотрим проверенный пошаговый алгоритм восстановления работоспособности базы.
Для того чтобы понять причину сбоя, проанализируем, как платформа 1С производит реструктуризацию таблиц на сервере СУБД:
_AccRg500 в промежуточную с суффиксом _AccRg500OG (Old Group)._AccRg500NG (New Group)._AccRg500OG порциями копируются в новую таблицу _AccRg500NG._AccRg500OG удаляется, а новая _AccRg500NG переименовывается в стандартное рабочее имя _AccRg500.Если в процессе переноса данных происходит аварийное завершение, платформа не успевает завершить цепочку переименований. В результате рабочая таблица _AccRg500 отсутствует, а в базе остается только таблица со старыми данными _AccRg500OG.
Рассмотрим ситуацию: если вручную переименовать таблицу _AccRg500OG обратно в _AccRg500 через SQL Server Management Studio (SSMS), 1С сможет запускаться в режиме «Предприятие», проводить документы и формировать отчеты. Однако при последующих попытках обновления конфигурации или реструктуризации процесс будет наглухо зависать.
Это происходит по нескольким причинам:
1. Рассогласование со служебными таблицами. Регистр бухгалтерии состоит не из одной таблицы. К нему привязаны таблицы итогов, субконто, движения и агрегаты. При сбое эти таблицы могут остаться с постфиксами OG или NG, из-за чего их индексы и структуры перестают соответствовать основной таблице.
2. Конфликт с таблицей DBSchema. Информация о структуре хранения данных фиксируется в системной таблице DBSchema. Ручные изменения в SQL не обновляют запись в DBSchema, создавая рассинхронизацию между конфигурацией метаданных и физической структурой СУБД.
Разберем рабочий алгоритм восстановления базы данных, который позволяет полностью избавиться от зависаний при реструктуризации и сохранить все внесенные данные.
OG (например, dbo._AccRg500OG). Переименуем её в стандартное имя без суффикса (dbo._AccRg500). Это позволит платформе 1С снова видеть записи регистра..dt-файла (меню Администрирование – Загрузить информационную базу...).NG и приведет таблицу DBSchema в полностью корректное состояние.Для минимизации рисков падения платформы при реструктуризации больших регистрационных таблиц рекомендуется придерживаться следующих правил:
Очистка кэша сервера. Перед проведением тяжелых обновлений останавливайте службу 1C:Enterprise Server и очищайте сеансовый кэш кластера (папки сеансов в каталоге сервера 1С), чтобы рабочий процесс rphost не задействовал устаревшую схему базы.
Настройка модели восстановления SQL. На время реструктуризации больших баз переводите модель восстановления информационной базы в SQL Server в режим Simple (Простая). Это предотвратит переполнение журнала транзакций (.ldf) и защитит от сбоев по причине нехватки свободного места на диске.