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

Публикация № 1018320

Администрирование - Администрирование данных 1С - Тестирование и исправление

обработка DBSchema DBNames Tool_1CD восстановление

Обработка для анализа ошибок в структуре 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. 2019.07.13 - Добавлена интеграция с обработкой //infostart.ru/public/275315/. Подключаемся к "убитой" базе, читаем список таблиц и загружаем напрямую нужные таблицы в SQL

upd. 2020.08.03 - Добавлена возможность прямой выгрузки из списка DBNames в базу. Добавлена возможность генерации перечня DBNames для случаев когда в схеме базы объекты есть, а в DBNames нехватает. Автоматически генерируется для констант, перечислений и документов, остальные объекты можно доработать по желанию.

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

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

Достоинства

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

Скачать файлы

Наименование Файл Версия Размер
Восстановление структуры DBSchema

.epf 105,53Kb
62
.epf 105,53Kb 62 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Timur.V 71 11.03.19 14:59 Сейчас в теме
Долго себя ругаем за лень при создании архива перед обновлением;

))
Должен быть чек-лист по обновлению!
2. Константин С. 681 11.03.19 15:32 Сейчас в теме
(1)
Должен быть чек-лист по обновлению!


Да ее на SQL, где это займет не более 10-20 минут.
3. acanta 11.03.19 15:36 Сейчас в теме
В 7ке DBF при обновлении и реструктуризации бакап формировался платформой на каждый файл отдельно.
Неужели сложно было встроить в платформе бакап базы при реструктуризации куда нибудь во временную папку?

"Если звезды зажигают значит это кому нибудь нужно" (с)
4. fishca 1191 11.03.19 16:05 Сейчас в теме
Загрузка/выгрузка данных из DBSchema и DBNames(используя алгоритм Deflate);

с помощью GameWithFire ( http://main.1c-ei.ru/Articles/gamewithfire#TOC--7 ) ?
SVSVSV999; +1 Ответить
5. spawn_a 43 11.03.19 21:59 Сейчас в теме
(4) Спасибо за ссылку! К сожалению, сам найти не смог подобного решения.
16. SVSVSV999 13.01.20 18:06 Сейчас в теме
(4)Огромное спасибо, шикарное решение, куда практичнее всех описанных
18. ZloyGenii 11.03.20 12:57 Сейчас в теме
(4)
Deflate


Не подскажите примерный код. Запросом получаю данные из таблицы DBSchema но вот привести их к виду в файл не получается чего то... каким методом преобразовываете данные из поля "serializeddata" ? то ли я проглядел что-то, то ли не так делаю гно любой из методов дает ошибку :(
19. spawn_a 43 11.03.20 13:00 Сейчас в теме
(18) Вроде бы вот этот метод использовал: https://infostart.ru/public/618906/
20. ZloyGenii 11.03.20 15:23 Сейчас в теме
(19)
метод


Блин все на поверхности... Спасибо будем мудрить дальше, а вообще получить бы часть обработки вашей только для получения схемы корректировки и закачки обратно :( так сказать для нищенствующих...

За ссылку большое спасибо будем проверять.
6. SerVer1C 369 29.03.19 00:15 Сейчас в теме
Ничего не понял. Вы базу восстановили? Если есть CF такой же точно конфы, то почему бы просто не подменить одно значение из DBSchema ?
7. spawn_a 43 29.03.19 08:39 Сейчас в теме
(6) Базу конечно же восстановил. В каждой базе DBSchema генерируется свой, т.е. даже если выгрузить CF из таблицы Config и залить в новую чистую базу - имена таблиц и полей будут каждый раз разными. Поэтому приходится брать из чистой базы из DBSchema схему объекта, и выполнять в ней замену имён полей на имена "убитой" базы. Особую сложность в этом процессе представляют индексы.
8. SerVer1C 369 29.03.19 11:44 Сейчас в теме
На что тогда вы опирались, при лечении DBSchema, если CF и в битой базе, и в любой другой, созданной на основе оригинального CF, будет таким же (т.е. таблица Config) ?
9. spawn_a 43 29.03.19 12:19 Сейчас в теме
Из CF нам нужны идентификаторы объектов и реквизитов метаданных. По ид получаем из DBNames имена полей. Т.е. получив схему объекта из чистой базы, мы можем через DBNames чистой базы получить имена реквизитов. Далее обратная процедура, берем DBNames "убитой" базы и определяем её имена полей.
10. Дмитрий74Чел 199 19.09.19 14:26 Сейчас в теме
Напишите пожалуйста документацию к обработке. Кнопок много. Какова правильная последовательность действий? И назначение кнопок не всегда ясно.
11. spawn_a 43 22.09.19 12:57 Сейчас в теме
Собственно я уже отметил, что обработка является "инструментом" программиста, по аналогии например с 1cadmin. Весь функционал заточен на понимание проблемы, и методики её решения самим разработчиком. В каждом конкретном случае приходится что-то в ней допиливать или менять. Сейчас у меня есть несколько восстановленных баз с её помощью, и каждый раз что-то я допиливаю или переделываю. Если есть конкретные вопросы - велком в личку, с удовольствием подскажу/объясню.
12. Дмитрий74Чел 199 24.09.19 18:24 Сейчас в теме
Использовал Вашу обработку в своей статье. Полагаю, что для Вас основная ценность обработки именно в автоматическом поиске и исправлении ошибок. Полагаю, коллегам пригодилась бы урезанная версия, с функционалом только в части выгрузки DBSchema и DBNames из sql в файл и обратно, за меньшую цену sm.
13. spawn_a 43 24.09.19 22:50 Сейчас в теме
Выгрузку/загрузку можно сделать отдельной обработкой, я в своей использовал наработки также других товарищей с инфостарта. Постараюсь сделать упрощенный вариант и выложу за "мзду маленькую".
Насчет вашей методики восстановления, мне кажется, что можно было сделать проще. В обработке есть функционал генерирования объектов DBShema по данным копии конфигурации базы. Просто нужно реальную ситуацию смотреть, а не готовый вариант решения проблемы.
14. k9260130000 25 17.10.19 00:33 Сейчас в теме
Благодарю. Обработка помогла. Статья https://infostart.ru/public/1126277/ пояснила как ей пользоваться, дав решение проблемы в "ручном" режиме . Из обработки видно что её функционал могуч и позволил бы сделать всё быстрей, но без мануала овладеть им явно сложнее чем ручками записи поправить. Если бы Вы автоматизировали то что проделал автор статьи могли бы поднять стоимость и повысить привлекательность для широких масс Вашей обработки.
15. rokhin 108 24.12.19 15:57 Сейчас в теме
Прочитал с первого до 16-го пункта. Ничего не понятно. Плюнул на статью.
Стал сам разбираться. Процесс шел, результат вот-вот будет получен. Дальше тупик.
Вернулся к этой статье.
Прочитал с первого до 16-го пункта. Ну все понятно, так я и делал.
Скачал обработку.
17. rokhin 108 23.01.20 09:40 Сейчас в теме
Лечить схему вручную в редакторе не удалось, появились непонятные несоответствие типа поля. Трудно сделать все аккуратно, повторять было лень, пришлось писать обработку.
https://infostart.ru/public/1183875/
Никаких замечаний по несоответствию поля уже не было. Видимо когда ручками, то что-то сделал криво.
А с обработкой прошло все гладко. Даже не сбрасывал кэш, не производил "тестирование и исправление" базы.
21. veselon 08.10.20 11:17 Сейчас в теме
Добрый день, прописалось поле в таблицу криво. Можно ли данной обработкой удалить этой поле из dbshema? ругается что оно NULL , поле точно лишнее. Смотрел сравнивал структура с чистой базой с ИТС с этого же релиза.
Прикрепленные файлы:
22. spawn_a 43 08.10.20 11:27 Сейчас в теме
Да, без проблем читаете схему, находите объект, прям в тексте редактируете и записываете схему обратно. Велком в личку, если что-то не получается ;)
23. veselon 08.10.20 11:42 Сейчас в теме
Можете написать мне первым? мне пишет "отложенная группа"
24. ivdic 30 20.01.21 17:03 Сейчас в теме
25. spawn_a 43 20.01.21 17:10 Сейчас в теме
(24) Здравствуйте, теоретически при небольших доработках запросов в части типизации должно заработать... но вопрос, как понимаете, требует проработки
Оставьте свое сообщение

См. также

[x1c.ru] 1CDBin: Работа с файлами *.1CD на низком уровне средствами языка 1С с возможностью чтения таблиц (поддерживается формат 8.3.8.0) Промо

Тестирование и исправление Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Обработка позволяет просматривать файловые базы 1CD на низком уровне средствами встроенного языка. Реализована часть функциональности Tool_1CD, но на языке 1С Предприятия. Показываются таблицы, параметры таблиц, поля таблиц, записи таблиц, значения полей BLOB, есть 16-ричный просмотр страниц базы и консоль кода. Можно использовать для изучения структуры файлов 1CD, просмотра баз 1CD для выявления повреждений, создания своих обработок для выгрузки данных без открытия исследуемой базы в 1С:Предприятии.

1 стартмани

07.10.2014    56087    356    GusevNA    77    

Исправление ошибки "Для одного ссылочного кода существует более одной таблицы в базе данных" в БД SQL

Тестирование и исправление v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка позволяет исправить схему имен базы данных, схема которой была испорчена и из-за этого возникают ошибки при обновлении конфигурации или при сервисной процедуре тестирования и исправления. Ошибка SDBL: Ошибка обновления конфигурации базы данных. Для одного ссылочного кода существует более одной таблицы в базе данных. Имена таблиц с кодом .... Далее перечисляются пары таблиц, которые имеют одинаковый номер. Обработка таблице находит новый номер, заменяет на него все ссылки в схеме, переименовывает таблицу SQL

3 стартмани

23.01.2020    11785    151    rokhin    56    

Исправление ошибки "Для одного ссылочного кода существует более одной таблицы в базе данных"

Тестирование и исправление v8 Бесплатно (free)

Описана методика исправления ошибки путем внесения изменений в sql-таблицы.

23.09.2019    24027    Дмитрий74Чел    84    

Восстановление битой ссылки на раз-два Промо

Тестирование и исправление v8 1cv8.cf Абонемент ($m)

Простой способ восстановить битую ссылку типа " (20:94b81c6f65428d5911e2a8bebc48d793)".

1 стартмани

26.04.2013    34096    692    Vin_Tik    36