Восстановление sql базы после динамического обновления
Недавно, при динамическом обновлении конфигурации sql -базы на платформе 8.2 возник сбой, после которого, перестал запускаться конфигуратор, выдавая сообщение «Внимание!!! При обновлении данных, после последней реструктуризации, произошла ошибка. Повторить обновление?», если ответить Да, то появлялось второе сообщение «Обнаружена незавершенная операция сохранения конфигурации. Для продолжения работы необходимо завершить операцию.»
Данная проблема я не встречал ни разу на платформе 8.3
До обновления конфигурации я не делал архивную копию и потому восстановить базу из резервной копии предыдущего дня невозможно без потери информации.
Поиск решения вопроса в интернете дал мне надежду. Очень помогла статья на сайте 42clouds Незавершенная операция обновления конфигурации БД
Как известно, вся информационная база представляется в базе данных в виде набора таблиц. Среди них есть несколько таблиц, которые обязательно присутствуют в представлении любой информационной базы ( подробнее можно посмотреть на диске ИТС Размещение данных 1С:Предприятия 8) . Из всех этих таблиц для нас имеет значения только 2 таблицы из них:
- dbo.Config – основная конфигурация информационной базы. Эта конфигурация соответствует реальной структуре данных и используется 1С:Предприятием 8.0 в режиме Предприятия данные переносятся в эту таблицу после обновления
- dbo.ConfigSave – конфигурация, редактируемая Конфигуратором. Конфигурация из ConfigSave переписывается в Config при выполнении “Обновления конфигурации базы данных” в Конфигураторе, а наоборот – при выполнении в Конфигураторе операции “Конфигурация – Конфигурация базы данных – Вернуться к конфигурации БД”
Согласно информации в интернете проблема связана с испорченной таблицей dbo.Config и предлагается 2 варианта решения:
Вариант 1: Воспользоваться возможностью скопировать таблицу dbo.Config из идентичной базы в неработающую
Вариант 2 Удалить все найденные изменения. Для этого вам необходимо выполнить 3 запроса:
- delete from config where FileName = ‘commit’
- delete from config where FileName = ‘dbStruFinal’
- delete from config where FileName = ‘dynamicCommit’
Я выполнил все 3 запроса, но говоря, что иногда достаточно выполнить только первый запрос.
В других статьях в интернете предлагают другой вариант по шагам:
- Делать бэкап рухнувшей базы средствами SQL.
- Очистить таблицу dbo.config рухнувшей базы SQL- Profiler запустить команду:
Use BaseName go Delete From [DBO].[Config] go
где BaseName – это имя рухнувшей базы.