Восстановление SQL базы данных после неудачного обновления

После добавления нескольких реквизитов справочника в момент обновления конфигуратор завис и благополучно вывалился с ошибкой.

К сожалению, на момент починки не смог найти статью с похожей проблемой:
//infostart.ru/public/390768/
//infostart.ru/public/391766/ 

Поэтому решил описать свой опыт, для более простых случаев, когда под рукой есть более-менее свежий бекап.


Итак, что имеем:

  1. MS SQL Server 2008 + 1C 8.2.19
  2. Свежий ночной бекап (если такового нет, прочтения вышеуказанных ссылок вам не избежать)
  3. В Предприятие зайти невозможно — дает ошибку на какой-то тип
  4. Конфигуратор открывается нормально, можно сохранить в файл конфигурацию и конфигурацию БД, любые другие операции с конфигурацией БД (обновление, сравнение, открытие) приводят к вылету Конфигуратора.
  5. Тестирование и исправление (Реструктуризация таблиц) также ведут к моментальному вылету Конфигуратора.


Поиск способа решения:

  1. Проверка БД средствами SQL показала что ошибок нет
  2. Выгрузка в dt и загрузка обратно без ошибок, но ничего не дает: успешно получаем такую же базу с битой конфигурацией.
  3. Загрузка конфигурации целиком из файла также безуспешно.
  4. Создание новой базы из сохраненной конфигурации и копирование из нее нужных данных — имена таблиц SQL будут не совпадать.

Решение:

  1. Делаем бекап поврежденной базы (бекапы лишними не бывают) (у меня она называется ForGamesWithRestore)!
  2. Сохраняем конфигурацию из поврежденной базы (если она отличается от конфигурации в бекапе).
  3. Разворачиваем бекап в параллельную базу (напр. назовем ее FromBackUp).
  4. В поврежденной базе чистим таблицу ConfigSave (это изменения конфигурации, которые не удалось применить к Конфигурации БД):
    DELETE FROM ForGamesWithRestore.dbo.ConfigSave
    GO
  5. Очищаем таблицы 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
  6. Если структуры конфигураций базы и бекапа не отличались, то на этом все.

  7. Если отличия в метаданных были, то важно понимать что на текущем этапе таблицы SQL не соответствуют структуре конфигурации, напр. в моем случае  в таблице с измененным справочником присутствовали две колонки, про которые Конфигуратор не знал.

  8. Пробуем обновить Конфигурацию из файла (сохраняли на шаге 2). При возникновении ошибок читаем ссылки указанные в начале

11 Comments

  1. jan27

    Если очищать таблицу целиком — truncate быстрее

    Reply ↓
  2. break

    можно один раз настроить триггер на сохранение Config и всегда иметь его свежую версию http://infostart.ru/public/327674/

    Reply ↓
  3. PVG_73

    Надо взять на заметку….

    Reply ↓
  4. I_G_O_R

    А что мешает делать бэкап перед обновлением? Я всегда делаю, точнее я настроил регламентную операцию, которая делает бэкап в определенное время. Если мне нужно обновить в другое время, то приходится конечно запускать ручками.

    Reply ↓
  5. BlaSo

    (2) break, отличный вариант! только в бекап нужно добавить и некоторые другие таблицы: DBSchema, ConfigSave, Params

    (4) I_G_O_R, Мешают только полчаса на его создание и довольно частые изменения конфигурации

    Reply ↓
  6. I_G_O_R

    (5) бэкап журнала транзакций или дифференциального копирования вполне достаточно, они делаются довольно быстро.

    Reply ↓
  7. Ekovichev

    (4) I_G_O_R, Мешает база на 200Гб:)

    Reply ↓
  8. flyDrag

    Спасибо, помогло.

    Reply ↓
  9. d4rkmesa

    Всего 11 строк скрипта, но сколько адреналина в процессе. =)

    Reply ↓
  10. RomanenkoandriyUr

    Из огромной кучи инфы, это самородок! Хвала автору!

    Reply ↓
  11. SashinPapa

    Браво! И низкий поклон.

    Рекомендация и п.5 оживила базу.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *