Решение задач 1С:Предприятие 8 на примерах

Ошибка «Нарушена целостность структуры конфигурации»: восстановление через MS SQL

Базы данных и СУБДОпубликовано Обновлено

Ошибка «Нарушена целостность структуры конфигурации» чаще всего появляется после прерванного динамического обновления в клиент-серверной базе. В статье — последовательность действий от очистки кэша до замены служебных таблиц в Microsoft SQL Server с готовыми запросами.

Пошаговое восстановление базы

При динамическом обновлении конфигурации что-то пошло не так. В итоге, при попытке входа в конфигуратор, либо в базу открывалось окно с описанием ошибки "Нарушена целостность структуры конфигурации" с двумя возможными действиями - "Завершить работу", либо "Перезапустить".

Опишу, как я справился с этой проблемой. Конфигурация самописная, на платформе 1С:Предприятие 8.2.15.289. Работает в клиент-серверном режиме: Windows Server 2008 R2 Enterprise 64-bit, Microsoft SQL Server 2008 R2. Первое, что я сделал - это почистил кэш, то есть удалил все папки с названиями, подобными "1154d395-1ab2-49ae-9ba5-cda925616fc1" в директориях:

C:\Users\ЮЗЕР\AppData\Local\1C\1Cv82
C:\Users\ЮЗЕР\AppData\Roaming\1C\1Cv82

и перезагрузил 1С сервер.

К сожалению, это не помогло. Далее всю информацию по восстановлению конфигурации черпал из интернета. И здесь уже без прямого использования SQL не обойтись. Для решения задачи использовал Microsoft SQL Server Management Studio. Наименование базы в SQL "MyDB". В первую очередь сохранил копию базы данных.

Я узнал, что записи о файлах конфигурации хранятся в таблице Config, а записи о файлах обновленной конфигурации хранятся в таблице ConfigSave. И первое, что советовали - это удалить все записи из таблицы ConfigSave, если они там есть, чтобы откатиться к последней конфигурации, которая была до неудачного обновления. Но в моем случае эта таблица была пустая.

Следующим этапом необходимо было проанализировать таблицу Config и таблицу Params, и удалить записи со значением "DynamicallyUpdated" в поле "FileName" - это след от динамического обновления. Такие строки я обнаружил и удалил их, использовав запросы:

Delete From [MyDB].[dbo].[Config]
WHERE [FileName] LIKE 'DynamicallyUpdated'

и

Delete From [MyDB].[dbo].[Params]
WHERE [FileName] LIKE 'DynamicallyUpdated'

Не помогло.

Перешел к последнему варианту. Суть его состояла в том, чтобы создать пустую базу с идентичной конфигурацией (назвал ее "test"), и заменить все записи таблицы Config в поврежденной базе на записи из такой же таблицы из пустой базы. Для этого я полностью очистил таблицу Config в поврежденной базе:

Delete From [MyDB].[dbo].[Config]

и заполнил ее всеми записями из пустой базы:

INSERT INTO [MyDB].[dbo].[Config] SELECT * FROM [test].[dbo].[Config]

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

Актуальность для новых версий

На платформе 8.3 конфигурация в клиент-серверной базе по-прежнему хранится в служебных таблицах Config, ConfigSave и Params, поэтому описанный порядок действий применим. Перед любыми правками таблиц обязательно сделайте резервную копию базы средствами СУБД, а при наличии свежего бэкапа сначала попробуйте восстановиться из него. Динамическое обновление рабочей базы в 8.3 по-прежнему рискованно: изменения лучше применять в монопольном режиме.

Частые вопросы

Почему после динамического обновления база перестала открываться?

Если обновление прервалось, в таблицах Config и Params остаются записи DynamicallyUpdated, а сохранённая конфигурация оказывается несогласованной. Платформа не может собрать структуру метаданных и выдаёт ошибку целостности.

Помогает ли очистка кэша 1С?

Иногда помогает, поэтому начинать стоит с удаления папок кэша в каталогах AppData\Local\1C и AppData\Roaming\1C и перезапуска сервера 1С. Если ошибка осталась, проблема в самой базе, а не в кэше.

Можно ли заменить таблицу Config данными из другой базы?

Да, если вторая база создана с точно такой же конфигурацией. Таблицу Config повреждённой базы очищают и заполняют записями из пустой базы, после чего снова чистят кэш.

Что сделать сразу после успешного входа в конфигуратор?

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

Сервер 1С:Предприятия и кластер: состав, порты, консоль, rac и веб-сервер

Базы данных и СУБД

Устройство сервера 1С и кластера, порты по умолчанию, консоль администрирования и управление сеансами через rac, кэш сервера, установка на Windows и Linux и публикация базы на веб-сервере.

Файл базы данных поврежден в 1С 8.3: как исправить ошибку СУБД

Базы данных и СУБД

Пошаговое восстановление файловой базы 1С при ошибке «Файл базы данных поврежден»: резервная копия, chdbfl.exe, тестирование и исправление и запасные варианты.

Ошибка формата потока в 1С 8.3: причины и как исправить

Базы данных и СУБД

Разбираем, откуда берётся «Ошибка формата потока» в 1С 8.3 и в каком порядке её устранять: от очистки кэша до chdbfl и восстановления конфигурации из файла.

СКД в 1С: система компоновки данных и программное формирование отчёта

Отчёты и СКД

Объяснение системы компоновки данных 1С: из чего состоит схема компоновки, как работают наборы данных, ресурсы, параметры и настройки, и как сформировать отчёт из кода — в табличный документ или в таблицу значений.