В процессе поддержки и обновления нетиповых конфигураций разработчики иногда сталкиваются с критической ситуацией: конфигурация поставщика оказывается поврежденной. При попытке обновления, сравнения/объединения или даже при открытии окна Настройка поддержки платформа аварийно завершает работу либо выдает сообщение «Ошибка при выполнении файловой операции». При этом система не дает сохранить конфигурацию поставщика в отдельный файл или штатно снять базу с поддержки.
Разберем причины возникновения этой неполадки и подробно рассмотрим последовательность действий для безопасного восстановления работоспособности информационной базы.
Проанализируем основные факторы, которые приводят к повреждению бинарных данных конфигурации поставщика в СУБД:
ragent в момент сохранения конфигурации. В результате в системных таблицах остаются неполные или несогласованные бинарные потоки (BLOB).snccntx и reg_XXXX) могут быть повреждены. При обращении к метаданным сервер считывает поврежденный кэш и блокирует операцию.%TEMP% (Windows) или /tmp (Linux) для учетной записи службы 1C:Enterprise Server, либо отсутствие необходимых прав на запись при распаковке объемных файлов поставки.Прежде чем вмешиваться в таблицы базы данных на уровне СУБД, обязательно выполним базовые регламентные действия. Все манипуляции проводим исключительно на предварительно созданной резервной копии базы данных.
1C:Enterprise Server.%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8).Если в процессе предыдущего неудачного обновления в базе зависли временные метаданные, конфигуратор будет постоянно обращаться к некорректным потокам. В клиент-серверном варианте базы данных состояние несохраненных изменений конфигурации хранится в системной таблице dbo.ConfigSave.
Рассмотрим порядок очистки через консоль СУБД SQL:
DELETE FROM dbo.ConfigSave;
Если конфигуратор по-прежнему падает при любой операции с поддержкой, разберем методику восстановления с использованием архивной копии базы данных. Этот способ применим, когда у нас есть копия базы до момента сбоя.
Важное условие: прямое копирование таблицы Config из резервной копии в рабочую базу допустимо только тогда, когда структура основной конфигурации в обеих базах абсолютно идентична (не создавались новые реквизиты, справочники или документы, меняющие схему данных). В противном случае нарушится соответствие внутренних идентификаторов метаданных реальным таблицам данных _ReferenceXXX и _DocumentXXX.
Рассмотрим алгоритм действий по шагам:
Config (записи, содержащие идентификаторы поставки и GUID файлов поставщика) либо полностью заменяем таблицу Config из проверенной копии.Если прямое восстановление через SQL нежелательно из-за расхождения структуры основной конфигурации, применим штатный метод переподключения конфигурации поставщика:
Config в SQL..cf) в точности того релиза, который был установлен в качестве конфигурации поставщика..cf.F7).Если в процессе работы повреждены внутренние системные таблицы, но Конфигуратор запускается, пересобрать конфигурацию без битых бинарных блоков поставщика можно через выгрузку метаданных в файлы:
1cv8.exe DESIGNER /S "Сервер/База" /DumpConfigToFiles "C:\ConfigDump"
1cv8.exe DESIGNER /S "Сервер/НоваяБаза" /LoadConfigFromFiles "C:\ConfigDump"
Используя предложенные способы, можно безопасно восстановить целостность конфигурации поставщика без риска потери доработок и накопленных пользовательских данных.