К сожалению, на момент починки не смог найти статью с похожей проблемой:
//infostart.ru/public/390768/
//infostart.ru/public/391766/
Поэтому решил описать свой опыт, для более простых случаев, когда под рукой есть более-менее свежий бекап.
Итак, что имеем:
- MS SQL Server 2008 + 1C 8.2.19
- Свежий ночной бекап (если такового нет, прочтения вышеуказанных ссылок вам не избежать)
- В Предприятие зайти невозможно — дает ошибку на какой-то тип
- Конфигуратор открывается нормально, можно сохранить в файл конфигурацию и конфигурацию БД, любые другие операции с конфигурацией БД (обновление, сравнение, открытие) приводят к вылету Конфигуратора.
- Тестирование и исправление (Реструктуризация таблиц) также ведут к моментальному вылету Конфигуратора.
Поиск способа решения:
- Проверка БД средствами SQL показала что ошибок нет
- Выгрузка в dt и загрузка обратно без ошибок, но ничего не дает: успешно получаем такую же базу с битой конфигурацией.
- Загрузка конфигурации целиком из файла также безуспешно.
- Создание новой базы из сохраненной конфигурации и копирование из нее нужных данных — имена таблиц SQL будут не совпадать.
Решение:
- Делаем бекап поврежденной базы (бекапы лишними не бывают) (у меня она называется ForGamesWithRestore)!
- Сохраняем конфигурацию из поврежденной базы (если она отличается от конфигурации в бекапе).
- Разворачиваем бекап в параллельную базу (напр. назовем ее FromBackUp).
- В поврежденной базе чистим таблицу ConfigSave (это изменения конфигурации, которые не удалось применить к Конфигурации БД):
DELETE FROM ForGamesWithRestore.dbo.ConfigSave GO
- Очищаем таблицы Config, DBSchema, Params в поврежденной базе, и копируем их базы FromBackUp:
DELETE FROM ForGamesWithRestore.dbo.Config GO DELETE FROM ForGamesWithRestore.dbo.DBSchema GO DELETE FROM ForGamesWithRestore.dbo.Params GO INSERT INTO ForGamesWithRestore.dbo.Config SELECT * FROM From_BackUp.dbo.Config INSERT INTO ForGamesWithRestore.dbo.DBSchema SELECT * FROM From_BackUp.dbo.DBSchema INSERT INTO ForGamesWithRestore.dbo.Params SELECT * FROM From_BackUp.dbo.Params
-
Если структуры конфигураций базы и бекапа не отличались, то на этом все.
-
Если отличия в метаданных были, то важно понимать что на текущем этапе таблицы SQL не соответствуют структуре конфигурации, напр. в моем случае в таблице с измененным справочником присутствовали две колонки, про которые Конфигуратор не знал.
-
Пробуем обновить Конфигурацию из файла (сохраняли на шаге 2). При возникновении ошибок читаем ссылки указанные в начале
.png)





Если очищать таблицу целиком — truncate быстрее
можно один раз настроить триггер на сохранение Config и всегда иметь его свежую версию
Надо взять на заметку….
А что мешает делать бэкап перед обновлением? Я всегда делаю, точнее я настроил регламентную операцию, которая делает бэкап в определенное время. Если мне нужно обновить в другое время, то приходится конечно запускать ручками.
(2) break, отличный вариант! только в бекап нужно добавить и некоторые другие таблицы: DBSchema, ConfigSave, Params
(4) I_G_O_R, Мешают только полчаса на его создание и довольно частые изменения конфигурации
(5) бэкап журнала транзакций или дифференциального копирования вполне достаточно, они делаются довольно быстро.
(4) I_G_O_R, Мешает база на 200Гб:)
Спасибо, помогло.
Всего 11 строк скрипта, но сколько адреналина в процессе. =)
Из огромной кучи инфы, это самородок! Хвала автору!
Браво! И низкий поклон.
Рекомендация и п.5 оживила базу.