gifts2017

Игра с кешем или как реанимировать файловую базу при ошибке "Нарушена целостность структуры конфигурации"

Опубликовал Максим Арендаренко (Larkin) в раздел Администрирование - Тестирование и исправление

Вариант решения ошибки "Нарушена целостность структуры конфигурации"

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

Итак приступим к описанию.

Все случилось после того, как конфигурация (Бухгалтерия для Украины 1.2.5.3) пожелала автоматически обновиться из тырнета до версии 1.2.6.5. Обновление закочилось ошибкой, в результате при попытке открыть конфигуратор имеем сообщение "Нарушена целостность структуры конфигурации". Из разбора логов стало понятно, что злаполучное автообновление не смогло обновить конфигурацию поставщика, точнее оно ее просто убило. Запуск в пользовательском режиме приводил к крашу программы. Да, кстати, платформа версии 8.2.15.289.

Первым делом решил очистить кеш тут  C:\Users\Администратор\AppData\Roaming\1C\1Cv82 и тут C:\Users\Администратор\AppData\Local\1C\1Cv82 (Win7x64). После очистки кеша удалось запуститься в режиме конфигуратора. Попытки открыть конфигурацию приводили к падению. Выгрузить в ДТ удалось. Тестирование и исправление не помогает. Утилита проверки файловой базы говорит, что ошибок нет. Пункты меню загрузки, выгрузки конфигурации, поддержки и т.п. без открытой конфигурации не активны.

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

Попытка загрузить DT файл в SQL приводила к падению.

Светлую мысль подсказал гугл - создать узел подчиненной базы и выгрузить все туда... не помогло - при выгрузке узла имеем такую же ошибку...

Все, в принципе, на этом можно было бы поставить крест на базе... подняться из древнего бекапа... и напрягаться с восстановление данных вручную (3 месяца работы бухгалтерии). НО!

Как оказалось эту ошибку можно обойти и уничтожить. Итак вот оно - решение:

1. Необходима чистая конфа той же версии, что и работающая база (в моем случае Бухгалтерия для Украины 1.2.5.3 ).

2. Очиста кеша полная.

3. Запускаем чистую базу в режиме конфигуратора и открываем конфигурацию. При этом 1Ска создает ее кеш в C:\Users\Администратор\AppData\Local\1C\1Cv82 (набор файлов и папок в папке с ID конфигурации.) так же нам нужен кеш  C:\Users\Администратор\AppData\Roaming\1C\1Cv82.

4. Запускаем наш "трупп" в режиме конфигуратора и смотрим кеш. Имеем две папки с ID конфигурации (Живой и Мертвой).

5. Закрываем все и подменяем кеш мертвой конфы на живую полностью.

6. Запускаем мертвую конфу в режиме конфигуратора и.... ап, дерево конфигурации открыто, разделы меню управления конфигурацией активны.

7. Идем в управление поддержкой, и снимаем с поддержки полностью. сохраняем, обновляем.

8. Удалем кеш полностью.

9. Запускаем Битую базу в режиме конфигуратора, пытаемся открыть конфигурацию - все открывается, ошибки нет.

10. Берем CFку текущей версии конфигурации и делаем полную загрузку, сохраняем, обновляем, в результате получаем конфу снова на поддержке.

11. Для верности очистим кеш и попробуем запустить все сначала и открыть конфигурацию... все должно работать, по карйней мере у меня все получилось.

 

Вывод из всего этого - нет ничего не выполнимого, и непоправимого, главное не паниковать и включать мозги и фанатазию :)

Удачи вам, дорогие читатели, и делайте по-чаще бекапы :) 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. larissa builova (larisab) 21.03.12 10:36
Из разбора логов стало понятно, что злаполучное автообновление не смогло обновить конфигурацию поставщика, точнее оно ее просто убило.

Конфигурация на частичной поддержке и при этом обновляется автоматически?
2. Максим Арендаренко (Larkin) 21.03.12 11:32
(1)
Нет, конфигураци полностью на поддержке...
В случае частичной поддержки нужен CFничег максимально последнего релиза либо попробовать выгрузить CFку через "Конфигурация - конфигурация баз данных - сохранить конфигурацию БД в файл"... но перед тем как его загружать - я бы залил его в отделную чистую базу и просмотрел на предмет работоспособности.
3. Евгений Сосна (pumbaE) 21.03.12 12:19
Может, я чего то и не понимаю, но по началу описанной ситуации
Все случилось после того, как конфигурация (Бухгалтерия для Украины 1.2.5.3) пожелала автоматически обновиться из тырнета до версии 1.2.6.5. Обновление закочилось ошибкой, в результате при попытке открыть конфигуратор имеем сообщение "Нарушена целостность структуры конфигурации"
решение проблемы мне видится в
Обработка - ОбновлениеКонфигурации - макет ЗаставкаОбновленияКонфигурации (или НеинтерактивноеОбновлениеКонфигурации)
case 
  ret = backupDB(); 
  break;

ищем backupDB , находим в макете МакетФайлаОбновленияКонфигурации
function backupDB()
{
	if (!createBackup)
		return 0;
	var ret = runApp(v8exe, format('CONFIG {0} {1} /DumpIB "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', 
	    infoBasePath, infoBaseAuthorization, backupFileName, tempLogFileName), SW_SHOW, true);
	appendLog();
	if (ret == 0)
	    backupCreated = true;
	return ret;
}
...Показать Скрыть


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

P.S.: всего этого могло бы и не быть.
citana; Rustig; +2 Ответить 1
4. Доржи Балбаров (Angeros) 21.03.12 12:27
Убили слова автора!!!
"напрягаться с восстановление данных вручную (3 месяца работы бухгалтерии)"

Как можно делать копии раз в 3 мес... нафиг вообще парится что-то восстанавливать можно просто сказнать ну вбейте сами как нибудь...

У меня в конторе за подобное просто уволили бы... :)
citana; Redokov; +2 Ответить 2
5. Максим Арендаренко (Larkin) 21.03.12 12:37
(4)
Ну.... администрирование 1С в мои прямые обязанности не входит... и бекапы за ту ЗП, что мне платят, делать я не намерен... есть обученные бухи, которые должны были это делать...
И вообще - я от 1Ски отошел уже года два как, стало интересней WEB-ом заниматься...
6. Евгений Сосна (pumbaE) 21.03.12 12:40
(5) Larkin, но там же по умолчанию делается резервная копия.

Конечно решение проблемы найдено и молодец, но в теории и проблемы не было, достаточно было найти копию созданную.
7. Максим Арендаренко (Larkin) 21.03.12 12:42
(3) Возможно бекап и был создан, я так предпологаю он был положен в злаполучный кеш, который был удален :).
Честно говоря с механизмом автоматического обновления я не знаком, ибо не следил за его развитем со времен моего ухода с франча... в этом мой прокол - согласен. Но небыло бы прокола, не было этой статьи :) и еще одного варианта решения проблемы.
8. larissa builova (larisab) 21.03.12 15:02
(2)
Нет, конфигураци полностью на поддержке...

Ну если она на полной поддержке, то там одна конфигурация, и она ессно, поставщика. Не поняла в тексте почему подчеркнуто именно "поставщика".
В случае частичной поддержки нужен CFничег максимально последнего релиза либо попробовать выгрузить CFку через "Конфигурация - конфигурация баз данных - сохранить конфигурацию БД в файл"... но перед тем как его загружать - я бы залил его в отделную чистую базу и просмотрел на предмет работоспособности

Частично снятая с поддержки конфа обновляется через CFU. Можно конечно извратиться и получить сфешниик, чтобы с него обновиться через поддержку - выбрать файл, но там теряются некоторые возможности по более гибкому обновлению. А тот способ, что вы мне присоветовали (хых) - в топку ;)
Единственно допустимый вариант обновлять с CF сравнением и объединением - это полностью снятая с поддержки конфа, там другого не предусмотренно.
9. Максим Арендаренко (Larkin) 21.03.12 15:24
(8) Ктож типовые решения, даже пусть они доработанные ч-з сравнение-объединение обновляет?. Лично я всегда обновлял с CFника через Поддержку-обновление-выбрать файл а вот там уже и объединяется...
Пока конфигурация не снята с поддержки - конфигурация поставщика хранится и не меняется.. если выполнять обновление ч-з сравнение объединение, то конфигурация поставщика не обновляется...

В данном примере загрузка конфигурации в финальных действиях выполнялась для того, чтобы вернуть конфигурацию на поддержку, т.к. была повреждена конфигурация поставщика.
10. larissa builova (larisab) 21.03.12 15:36
(9)
Ктож типовые решения, даже пусть они доработанные ч-з сравнение-объединение обновляет?.

Не знаю, но не мы с вами точно :)
Я вот про метод, который вы мне присоветовали в (2):
В случае частичной поддержки нужен CFничег максимально последнего релиза либо попробовать выгрузить CFку через "Конфигурация - конфигурация баз данных - сохранить конфигурацию БД в файл"... но перед тем как его загружать - я бы залил его в отделную чистую базу и просмотрел на предмет работоспособности.

отвечаю, что обновлять нужно через CFU.
Лично я всегда обновлял с CFника через Поддержку-обновление-выбрать файл а вот там уже и объединяется...

и теряются некоторые возможности...
Но тема не об этом.
11. Максим Арендаренко (Larkin) 21.03.12 15:54
(10)
и теряются некоторые возможности...

о_О это какие, если не секрет?..
12. Леонид Мельников (Kaperang) 21.03.12 16:27
Мдя....умный человек сможет справиться с любой бедой....а мудрый - в нее просто не попадет....
1. Резервные копии - раз в 3 месяца, за такое с работы обычно увольняют. Тем более, что существует достаточно много решений (в т.ч. и на Инфостарте), позволяющих легко и быстро автоматизировать создание резервных копий 1С.
2. В обработке автоматического обновления предусмотрена возможность предварительного резервного копирования, надо всего лишь при настройке выставить нужную галочку.
3. Формулировка "пожелала автоматически обновиться из тырнета" вызывает большое сомнение. Прям восстание машин какое-то. Вероятнее всего, кто-то(не будем показывать пальцем на автора статьи) или запустил эту обработку вручную или настроил график ее запуска. При этом не обратив внимания на настройку "Предварительно сделать резервную копию".
4. Вероятнее всего, кэш пользователя,под сессией которого производилось обновление, уже был "битым" к моменту самого обновления. Т.е. это была своеобразная "мина замедленного действия". Неважно, или 1С-ка бы "пожелала автоматически обновиться из тырнета", или пользователь выполнил обновление через конфигуратор вручную. Результат был бы тот же. Не буду утверждать, но наиболее распространненной причиной, вызывающей нарушение структуры содержимого кэша, является регулярное т.н. "динамическое обновление".
5. Прием, подмены кэша пользователя информационной базы, использованный автором статьи, весьма нетривиален. И автор в чем-то прав, утверждая что, не погуби он своими, мягко выражаясь, "беспечными" экспериментами над рабочей базой ее, не родился бы этот прием. В общем, автору плюсую за креативность, но рекомендую ему в дальнейшем не работать с "боевой" базой по принципу "а давай посмотрим, что делает эта обработка".
susorov; therva; Valerich; Rustig; Redokov; larisab; +6 1 Ответить 1
13. Максим Арендаренко (Larkin) 21.03.12 16:47
(12)Спасибо за рекомендации :)
14. larissa builova (larisab) 21.03.12 17:08
15. Сергей (Sybr) 21.03.12 22:13
Плюсую, а вообще надеюсь никогда не пригодится))
16. aim (aim) 22.03.12 09:07
Убить базу можно миллионом способов. В том числе поудаляв то, что не нужно удалять. В том числе (групповым) перепроведением того, чего не нужно перепроводить. А восстановление из вчерашнего бэкапа может быть не менее хлопотным, чем восстановление из 3-месячного бэкапа, особенно в дни закрытия месяца, когда много всяких ручных корректировок....
А автор молодец, если действительно работает. (И вообще за описание ситуации.) Про кэши я что-то слышал, но тогда была проблема восстановить внезапно почившую внешнюю обработку....
17. Ruslan Edokov (Redokov) 22.03.12 11:01
Да, способ подменой кэша очень неплохой. Можно будет иметь в виду, при восстановлении падающих баз.
18. Alex Misanets (Misanets) 23.03.12 10:30
А поговаривают что можно с бубном поплясать и база оживет :) Сори за флуд
19. Дмитрий Воронин (HiKS) 23.03.12 13:13
Спасибо, с таким тоже сталкивался.
20. Dragon Ago (DragonAgo) 26.03.12 14:38
Очень познавательная статья! Может когда и пригодится, так как с 1с все может случится
22. Максим Лучко (alcoholic) 27.03.12 18:22
спасибо за коментарии, интересно!
23. Владимир Вовк (vovk_v) 28.03.12 10:27
24. Ruslan (rus128) 29.03.12 11:27
Плюс - за креативность и настойчивость, проявленные при решении внезапно возникшей проблемы (я так понимаю - за базой никто не смотрит, бухгалтера сами решили обновить конфигурацию, а "компьютерщику" платят мало за поддержку 1С, что бывает распространенным явлением в маленьких организациях).
Минус - за небрежное оформление статьи, так как довольно много грамматических ошибок - "злаполучное", "к крашу" (краху или крушению), "удалоь", "запуститья", хотя даже браузеры в 21-м веке уже умеют проверять орфографию.
25. Александр Хоменко (scape) 29.03.12 11:31
26. Александр Удалов (higs) 29.03.12 16:11
(25) На самом деле, даже за день может добавиться очень много изменений в базе, потому их жалко потерять. Восстановление из бекапа - это совсем крайний случай, когда других вариантов нет. Либо если бекапы делаются несколько раз в день. Хотя есть еще вариант - просто восстановить из архива и заявить, что ничего больше сделать нельзя, сидите и восстанавливайте. Добрее надо быть к людям!
ИМХО, автор правильно сделал, что попытался (и успешно) найти еще один вариант возвращения базы к жизни! Молодец, поддерживаю!
Еще в семерке были недокументированные способы попытки восстановить битый мд-шник. Теперь вот буду знать и для 8-ки запасной вариант!
Еще раз спасибо!
27. Нина (нинас) 03.04.12 09:34
28. Eugene Korshkov (ekors) 10.04.12 16:20
Но в жизни бывают всякие ситуации...
Если бы все были такие как в описано в идеале, то планета называлась бы по-другому.
А так спасибо Автору за опыт, которым он поделился!
29. aleksei (alekseies) 25.04.12 09:21
Платформа 1С:Предприятие 8.2.15.310 клиент-сервер на тестовой базе УПП 8.2.1.3.24.2 выскочила ошибка "Нарушена целостность структуры конфигурации" при обновлениии на УПП 8.2.1.3.15.1.
Избавились от ошибки восстановлением из бэкапа и чисткой кеша.
30. Вадим Чернявский (therva) 04.05.12 12:56
Еще в 10 году упражнялся с подобными багами:
Ошибка формата потока- смертный приговор для базы?

Весь вопрос ошибки формата потока заключается в том, что часть CF-ника, при ошибке выгрузки или глюков с кешем базы (На слабенькой машинке сохраняем свое творчество, и тут же пытаемся выгрузить CF), забивается нолями... Причем эти ноли сохраняются и в конфигурации базы данных. В итоге: при отсутствии хоть какого-нибудь CF или DT, от этой базы- восстановить наработки будет уже практически нереально!

Подобный танец с бубном пробовал, вот только подмена кеша не сработала на 8.1. Пролазил через Хранилище конфигураций.


Вот описание моего танца с бубном, приведшего к положительному результату:

1. Создаем новую директорию (Директория1);
2. Создаем в 1С новую пустую базу (База1) располагающуюся в данной директории (Директория1);
3. Разворачичаем в новой базе (База1) один из рабочих dt файлов;
4. Открываем конфигурацию для редактирования (Конфигурация- Открыть конфигурацию);
5. Выходим из конфигуратора.
6. Копируем битую базу повер только что созданной (База1);
7. Заходим в новую базу конфигуратором- получаем открытую для редактирования конфигурацию (!!!);
8. Поднимаем для данной базы хранилище конфигураций (Хранилище1);
9. Закрываем конфигуратор;
10. Создаем еще одну новую директорию (Директория2);

11. Создаем в 1С еще одну новую пустую базу (База2) располагающуюся в данной директории (Директория2);
12. Открываем пустую базу (База2) конфигуратором;
13. Подключаемся к хранилищу конфигураций (Хранилище1);
14. Загружаем конфигурацию из хранилища (Хранилище1);

Впринципе все.
Далее можно выгрузить из базы2 работоспособный cf, либо же перенести непосредственно в базу2 данные при помощи универсального обмена через XML.


Пункты 1-7, это и есть аналог подмены кеша, но, видимо, на тот момент платформа сразу переписывала кеш по новой, или как- то проверяла его принадлежность базе. А работа с хранилищем- была обусловлена тем, что оно брало данные о конфигурации именно из кеша.
31. eigen20 19.06.12 16:55
Спасибо за интересную статью. Когда будет такая база обязательно попробую ваш алгоритм.
32. Игорь Фрунзэ (gorodok11) 10.10.12 16:04
Сегодня у меня день плюсиков. После успешного реанимирования одной базы, благополучно упала вторая. :( Горе какое. Ваши советы очень помогли при разработке технологии реанимирования. Плюс в карму уже добавил.
34. Сергей Поздняков (RoleXX) 25.10.12 19:56
Спасибо за интересный вариант. Пару дней назад у клиента так же упала база. Основная проблема заключается в том что это распределённая БД на MSSQL 2008 и упал один из её узлов. Узел то я восстановил, но проблема повторяется при каждом обмене с центральным узлом. Соответственно конфигурация узла не может обновится. Перепробовал всё что нашёл в инете (в том числе и этот вариант), но так и не решил проблему... Печалька((((. И самое главное непонятно что собственно приводит к этой проблеме.
35. Игорь Фрунзэ (gorodok11) 09.11.12 10:03
Еще один мой комментарий. В большинстве случаев помогает это решение но, у меня на днях был опыт восстановления рабочей базы в которой была сломана конфигурация. Сама база работала почти нормально, вот только невозможно было администрировать ее. Конфигурация не открывалась, выгрузки вылетали с ошибкой, загрузка архива тоже не шла (кроме как в новой базе). Хотя, думаю, в архиве тоже присутствовала эта ошибка. Восстановил выгрузкой в новую базу с той же конфигурацией через стандартную обработку ОбменДаннымиXML. На всякий случай делал тестирование и исправление с пересчетом итогов из конфигуратора. Все встало на свои места.
36. Петр Сусоров (susorov) 06.02.13 09:21
Спасибо за публикацию и её обсуждение, всем!
37. Александр Медведев (anig99) 01.11.13 08:30
Кажется, помогло! Спасибо огромное!!!!
38. Айбек К (ak0710) 15.12.13 13:43
Привет всем! Автору огромное спасибо ! Так же этот метод помогает при "ошибке потока данных "!

Я пробовал:
1. удалять из списка базу добавлять
2. очишать кэш
3. удалять платформу , устанавливать новую
4. удалять антивирусы файрволы
5. обновлять платформу до последней версии

А помогло это решение, у меня была проблема со структурой конфигурации, при тестировании с галочку проверка логической целостности давал ошибку потока на регистре "товары на складах" (1С Розница), ппц убил на это дело больше 1го часа.

Конфа уже была снята с поддержки , поэтому я в этом регистре добавил реквизит новый все сохранил , а потом опять его удалил.

Может кому тоже поможет если структура конфы порушилась

С уважением , Айбек Кыдырулы
39. Айбек К (ak0710) 15.12.13 13:45
Я просто подумал уже надо будет переносить универсальной обработкой данные в новую базу, получилось без переноса!)
40. Влад Чуд (Сплавщик) 28.07.15 00:02
Прошел все 10 пунктов. Все получилось, только обновляться база далее отказалась. Пришлось из рабочей базы выгрузить конфигурацию в файл и загрузить в мертвую в режиме объединения с постановкой на поддержку. Помогло.
41. Александр (shrek2) 16.09.16 14:43
Понимаю, что где-то в недрах описанного способа следующая последовательность действий содержится, но мне оказалось достаточно выполнить вот что.
Выгрузить конфигурацию через меню: "Конфигурация" - "Сохранить конфигурацию в файл".
Снять с поддержки.
Загрузить сохраненную на первом шаге конфигурацию обратно.
И ошибка исчезла.