Восстановление структуры DBSchema









Обработка для анализа ошибок в структуре DBShema, восстановление структуры объектов, перенос данных из выгруженных в XML таблиц базы, при помощи «Tool 1CD».

Ситуация

Маленькая файловая база Бух3, учёт ведется 4 года, во время очередного обновления вылетает конфигуратор, при повторной попытке обновления имеем сообщение о невозможности применить изменения конфигурации.

 

 

Стандартный алгоритм действий:

  1. Долго себя ругаем за лень при создании архива перед обновлением;
  2. Откатываем конфигурацию на версию БД. При попытке запустить базу – ошибка, что таблица такая-то не найдена и вылет;
  3. Конфигуратор – тестирование и исправление, опять ошибка, что таблица такая-то отсутствует и невозможность ремонта;
  4. Попытка залить предыдущую типовую конфигурацию – опять критическая ошибка SDBL;
  5. Последняя попытка – выгрузка базы в DT, проходит частично и вылетает. При загрузке DT – получаем базу с 90% пустых таблиц и сохранившейся ошибкой при тестировании и исправлении.
  6. С удивлением узнаем, что у админа нет архивных копий от слова совсем;
  7. Осознание того, что проблема серьезная и требуется помощь. Отправка запроса в 1С и замечательный ответ о том, что ваша база разрушена, поэтому восстановите базу из архивной копии и будет вам хорошо.
  8. Гуглим, находим “Tool 1CD”, с горечью осознаём, что с версией 8.3.8 он работает только на чтение. Вывод – что-то чинить можно в режиме SQL.
  9. Загружаем базу из ранее выгруженного DT. Получаем те же проблемы, но на этот раз можно использовать Profiler и, например, создать недостающие таблицы, поля.
  10. Некоторое время закрываем проблемы по отсутствующим полям на SQL, пока не получаем вот такое сообщение

    При условии работающей базы, мы вполне можем узнать что это за регистр, но работающей базы у нас нет, от слова совсем.
  11. Опять гуглим на предмет: «А что такое схема базы данных», и вот тут информация крайне скудная. Официальная трактовка от 1С:
  12. Открываем эту табличку в SQL, это бинарные данные. Выгружаем их в файлик, открываем его Notepad++ и видим набор массивов с описанием полей базы:

    Попытка найти информацию о том, что же это всё такое – результат нулевой. Ок, значит разбираться придётся самому. Перечитывание нескольких статей на инфостарте даёт понимание необходимости просмотра также данных сопоставление объектов конфигурации в файлике DBNames и самой конфигурации 1С.
  13. Проблема, как найти идентификаторы объектов конфигурации 1С, решилась выгрузкой конфигурации в XML. Предварительно файл cf был выгружен с помощью Tool 1CD и загружен в чистую базу на SQL.
  14. Далее путем поиска таблицы в DBNames получаем её идентификатор, и ищем по нему в каталоге с выгруженной конфигурацией XML. Находим, удаляем объект в конфигураторе, снова попытка сохранения – другая ошибка, на другую таблицу… в общем повторяем итерацию в надежде вылечить базу до тех пор, пока не получаем вот такую ошибку:
  15. И это серьезная засада, потому как непонятно что ещё можно удалить из конфигуратора. Можно конечно запустить Profiler и найти на какую таблицу он ругается. Но в конце концов это всё закончилось такой ошибкой на поле Fld793 (ОбластьДанныхОсновныеДанные), и по профайлеру всё останавливается после проверки таблицы журналов и всё, вылетает.
  16. В итоге приходим к выводу, что «скотчем и соплями» проблему не решить, и придётся подходить к вопросу системно.

Инструментарий

  1. Загрузка/выгрузка данных из DBSchema и DBNames(используя алгоритм Deflate);
  2. Загрузка схемы объекта из чистой эталонной базы, автозамена реквизитов объекта на наши. Добавление/замена схем объектов в DBSchema;
  3. Проверка и автоматическое(не все) создание недостающих схем объектов, проверка реквизитов в таблице DBNames;
  4. Реструктуризация таблиц SQL, добавление/замена полей(не все);
  5. Загрузка в таблицы SQL, выгруженные из файловой базы с помощью Tool 1CD

 

upd. 2024.07.13 — Добавлена интеграция с обработкой //infostart.ru/public/275315/. Подключаемся к "убитой" базе, читаем список таблиц и загружаем напрямую нужные таблицы в SQL

Причины купить

Экономия собственного времени на решение подобной задачи

Достоинства

Обработка предназначена ТОЛЬКО для программистов 1С. Написана под конкретные проблемы конкретной базы. Автоматически восстанавливаются схемы Справочников, Документов, Журналов документов, Регистров сведений, Регистров накопления, Констант, Перечислений, Регламентных заданий… остальные объекты править ручками, либо писать код по аналогии с моим.

14 Comments

  1. Timur.V
    Долго себя ругаем за лень при создании архива перед обновлением;

    ))

    Должен быть чек-лист по обновлению!

    Reply
  2. Константин С.

    (1)

    Должен быть чек-лист по обновлению!

    Да ее на SQL, где это займет не более 10-20 минут.

    Reply
  3. acanta

    В 7ке DBF при обновлении и реструктуризации бакап формировался платформой на каждый файл отдельно.

    Неужели сложно было встроить в платформе бакап базы при реструктуризации куда нибудь во временную папку?

    «Если звезды зажигают значит это кому нибудь нужно» (с)

    Reply
  4. fishca
    Загрузка/выгрузка данных из DBSchema и DBNames(используя алгоритм Deflate);

    с помощью GameWithFire ( http://main.1c-ei.ru/Articles/gamewithfire#TOC—7 ) ?

    Reply
  5. spawn_a

    (4) Спасибо за ссылку! К сожалению, сам найти не смог подобного решения.

    Reply
  6. SerVer1C

    Ничего не понял. Вы базу восстановили? Если есть CF такой же точно конфы, то почему бы просто не подменить одно значение из DBSchema ?

    Reply
  7. spawn_a

    (6) Базу конечно же восстановил. В каждой базе DBSchema генерируется свой, т.е. даже если выгрузить CF из таблицы Config и залить в новую чистую базу — имена таблиц и полей будут каждый раз разными. Поэтому приходится брать из чистой базы из DBSchema схему объекта, и выполнять в ней замену имён полей на имена «убитой» базы. Особую сложность в этом процессе представляют индексы.

    Reply
  8. SerVer1C

    На что тогда вы опирались, при лечении DBSchema, если CF и в битой базе, и в любой другой, созданной на основе оригинального CF, будет таким же (т.е. таблица Config) ?

    Reply
  9. spawn_a

    Из CF нам нужны идентификаторы объектов и реквизитов метаданных. По ид получаем из DBNames имена полей. Т.е. получив схему объекта из чистой базы, мы можем через DBNames чистой базы получить имена реквизитов. Далее обратная процедура, берем DBNames «убитой» базы и определяем её имена полей.

    Reply
  10. Дмитрий74Чел

    Напишите пожалуйста документацию к обработке. Кнопок много. Какова правильная последовательность действий? И назначение кнопок не всегда ясно.

    Reply
  11. spawn_a

    Собственно я уже отметил, что обработка является «инструментом» программиста, по аналогии например с 1cadmin. Весь функционал заточен на понимание проблемы, и методики её решения самим разработчиком. В каждом конкретном случае приходится что-то в ней допиливать или менять. Сейчас у меня есть несколько восстановленных баз с её помощью, и каждый раз что-то я допиливаю или переделываю. Если есть конкретные вопросы — велком в личку, с удовольствием подскажу/объясню.

    Reply
  12. Дмитрий74Чел

    Использовал Вашу обработку в своей статье. Полагаю, что для Вас основная ценность обработки именно в автоматическом поиске и исправлении ошибок. Полагаю, коллегам пригодилась бы урезанная версия, с функционалом только в части выгрузки DBSchema и DBNames из sql в файл и обратно, за меньшую цену sm.

    Reply
  13. spawn_a

    Выгрузку/загрузку можно сделать отдельной обработкой, я в своей использовал наработки также других товарищей с инфостарта. Постараюсь сделать упрощенный вариант и выложу за «мзду маленькую».

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

    Reply
  14. k9260130000

    Благодарю. Обработка помогла. Статья https://infostart.ru/public/1126277/ пояснила как ей пользоваться, дав решение проблемы в «ручном» режиме . Из обработки видно что её функционал могуч и позволил бы сделать всё быстрей, но без мануала овладеть им явно сложнее чем ручками записи поправить. Если бы Вы автоматизировали то что проделал автор статьи могли бы поднять стоимость и повысить привлекательность для широких масс Вашей обработки.

    Reply

Leave a Comment

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