Восстановление работоспособности файловой базы. 2. Лечение

14.04.13

Задачи пользователя - Корректировка данных

Восстановление работоспособности разрушенной файловой базы. Этап 2. Лечим базу.

Продолжение. Предыдущие этапы:

0. Введение

1. Обследование


Этап 2. Лечим базу.

На данном этапе рассмотрим пути исправления различных ошибок в файловой БД при помощи скриптов, использующих возможности компоненты 1CDLib. (Под скриптом здесь понимается обработка 1С:Предприятие 8.2, загружающая указанную компоненту либо из макета, либо из файла на диске, и содержащая определённый код на встроенном языке 1С, с использованием функций компоненты. Пример такой обработки есть в публикации, посвящённой компоненте).

В общем виде, скрипт выглядит так:

 

    FileDB=Новый("AddIn.T1CDLib.DB1CD");
   
FileDB.OpenLogFile(ИмяЛога);
   
Состояние("Чтение структуры файла");
   
FileDB.Open1CDFile(ИмяФайла);
   
Состояние("Обработка файла");

   
// здесь выполняем различные операции по лечению базы

   
FileDB.CloseFile();
   
FileDB.CloseLogFile();

   
Состояние("");


В зависимости от списка проблем, составленного на этапе обследования, можно выполнить различные операции:

  • 1. Если в заголовке базы указан неверный размер, то исправляем заголовок:

        FileDB.FixMainStreamHeader();

  • 2. Если есть таблицы с некорректным размером одного или нескольких объектов (описание, записи, BLOB, индексы):
  •     FileDB.FixTableHeaders("TABNAME",Истина,Истина,Истина,Истина);

       
    В моей практике бывали случаи, что chdbfl.exe при некорректном размере объектов какой-то таблицы не мог восстановить добрую половину данных этой таблицы, а вот после исправления размеров "терял" буквально пару-тройку записей, и это безо всякого изменения содержимого объектов такой таблицы.
        
    3. Если есть некорректные записи в корневом объекте RootEntry:
    Вывести содержимое корневого объекта в лог-файл можно так:

        FileDB.PrintRootEntry();

    Удалить некорректную запись по индексу (нумерация - с 1) из корневого объекта:

        FileDB.DeleteTableFromRootEntry(ИндексЗаписи);

       
    Если содержимое какой-то потерянной таблицы нашлось в недрах файла БД (например, при помощи поиска в Hex-редакторе), но ссылка на неё отсутствует в корневом объекте, можно её добавить:

        FileDB.AddTableToRootEntry(ИндексБлокаЗаголовкаОписанияТаблицы);

       
    Внимание: после манипуляций с корневым объектом нужно переоткрыть БД:

        FileDB.CloseFile();
       
    FileDB.Open1CDFile(ИмяФайла);

  • 4. Если в перечне таблиц базы есть таблицы с окончаниями "OG", это означает, что база рухнула в процессе реструктуризации или ТиИ. В данном случае может помочь такая операция (удаление окончания из имени таблиц):

        ArrayPres=FileDB.GetTablesArray(Ложь);
       
    TablesArray=РазвернутьЗначение(ArrayPres);

        Для
    TabInd=1 По TablesArray.Count() Цикл
           
    TableInfo=TablesArray[TabInd-1];
           
    TableName=TableInfo.Name;
            Если
    ВРег(Прав(TableName,2))="OG" Тогда
               
    МасПереимТаб.Добавить(TableName);
            КонецЕсли;

        КонецЦикла;

       
    Состояние("Переименование таблиц");

        Для каждого
    ТекТаб из МасПереимТаб Цикл
           
    FileDB.RenameTable(ТекТаб,Лев(ТекТаб,СтрДлина(ТекТаб)-2));
        КонецЦикла;

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

  • 5. Если содержимое каких-то таблиц безвозвратно потеряно, но есть не очень старый бэкап, то можно восстановить данные этих таблиц по состоянию на дату бэкапа:

        МасПереносТаб=Новый Массив;
       
    МасПереносТаб.Добавить("Reference19");
       
    МасПереносТаб.Добавить("Document192");

       
    ПапкаБазы="ПутьКПроблемнойБазе";
       
    ПапкаБазыПред="ПутьКБазеИзБэкапа";
       
    ИмяФайла=ПапкаБазы+"1Cv8.1CD";
       
    ИмяФайлаПред=ПапкаБазыПред+"1Cv8.1CD";

       
    FileDB=Новый("AddIn.T1CDLib.DB1CD");
       
    Состояние("Чтение структуры файла");
       
    FileDB.Open1CDFile(ИмяФайла);

       
    FileDB2=Новый("AddIn.T1CDLib.DB1CD2");
       
    FileDB2.Open1CDFile(ИмяФайлаПред);

       
    Состояние("Перенос таблиц");

        Для каждого
    ТекТаб из МасПереносТаб Цикл
           
    TableName=ТекТаб;
           
    ПапкаТаб=ПапкаБазыПред+TableName+"\";
           
    ВремКат=Новый Файл(ПапкаТаб);
            Если (НЕ
    ВремКат.Существует()) Тогда
               
    СоздатьКаталог(ПапкаТаб);
            КонецЕсли;

           
    FileNameDescription=ПапкаТаб+"Description";
           
    FileNameRecords=ПапкаТаб+"Records";
           
    FileNameBLOB=ПапкаТаб+"BLOB";
           
    FileNameIndexes=ПапкаТаб+"Indexes";

           
    FileDB2.SaveTableDataToFile(TableName,FileNameDescription,FileNameRecords,FileNameBLOB,FileNameIndexes);

           
    FileDB.LoadTableDataFromFile(TableName,FileNameDescription,FileNameRecords,FileNameBLOB,FileNameIndexes);
        КонецЦикла;

       
    FileDB.CloseFile();

       
    FileDB2.CloseFile();

  • Естественно, ссылки на элементы этих таблиц, созданные после бэкапа, будут "битыми", однако это всё же лучше, чем ничего.


Нумерация пунктов соответствует рекомендуемому порядку операций: т.е., сначала нужно исправить заголовки базы и таблиц, затем "разобраться" с корневым объектом, а затем уже приступать к манипуляциям с таблицами.

Также нужно помнить, что после всех проделанных манипуляций очеь полезно "шлифануть" базу утилитой chdbfl.exe с установленной галкой "Исправлять обнаруженные ошибки". Эта процедура перепакует данные всех таблиц, избавив их от мусора и удалённых записей, а также полностью перестроит индексы (а из-за "протухших" индексов база может по-прежнему не запускаться ни в одном из режимов, хотя сами данные могут быть уже восстановлены полностью).

 



В следующей статье будут рассмотрены различные ситуации при наличии проблем в конфигурации (таблицах CONFIG и CONFIGSAVE).

См. также

Корректировка данных Зарплата Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

60000 руб.

06.10.2023    4490    37    18    

45

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    33790    108    152    

75

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    111360    669    174    

708

Корректировка данных Программист Пользователь Платформа 1С v8.3 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Представьте, что есть система QR - кодирования, которая НЕ ТРЕБУЕТ изменения конфигурации, НЕ ТРЕБУЕТ изменения ни одной печатной формы для добавления QR-кода, включая внешние, НЕ ХРАНИТ данные штрихкодов и их связь, от чего база не "пухнет", ИМЕЕТ возможность закодировать в QR-коде произвольные данные параметров для последующей обработки полученных данных, УМЕЕТ прикреплять сканы, УМЕЕТ обработать считанный QR-код как ВЫ захотите. А также ХРАНИТ историю операций в обход базы для каждого пользователя в отдельности и УМЕЕТ работать с 2D - сканерами. А также автоматически распознавать отсканированные печатные формы (картинки или pdf-файлы) и выполнять заданные произвольные алгоритмы, в том числе прикрепление их к документам! Обновление 3.2 от 09.06.2024!

19200 руб.

26.08.2018    52606    16    61    

55

Взаиморасчеты Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 1C:Бухгалтерия Бухгалтерский учет Управленческий учет Платные (руб)

Вы наконец разобрались с закрытием месяцев и пора начать контролировать сроки оплаты поставщикам и задолженности клиентов, но в базе расчеты не идут из-за развернутого сальдо? Не беда, есть решение!

12000 руб.

02.11.2020    7511    6    0    

8

Закрытие периода Корректировка данных Программист Пользователь Платформа 1С v8.3 Система компоновки данных 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 руб.

13.07.2015    51361    175    29    

127

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для ООО для смены системы налогообложения УСН на ОСНО, без ведения раздельного учета, входящего НДС по способам учета. При реализации перехода в операции формируются проводки по выделению НДС, который ранее учитывался в стоимости номенклатуры, регистр «НДС Предъявленный».

6000 руб.

22.01.2025    253    1    0    

3

Корректировка данных Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Налоговый учет Налог на прибыль Платные (руб)

Обработка служит для: выравнивания бухгалтерского и налогового учета на определенную дату по выбранным счетам; закрытия остатков по выбранным счетам; обнуления налогового учета (ПР, ВР также будут обнулены)

2880 руб.

05.05.2024    698    10    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DragonAgo 16 15.04.13 09:27 Сейчас в теме
Полезная статья, еще для серверных баз, только там больше ошибок, и все скорее всего просто не описать будет
2. TrinitronHome 15.04.13 20:06 Сейчас в теме
спасибо за данную статью, очень полезная информация для меня
3. soba 16.04.13 16:20 Сейчас в теме
Да, весьма подробно изложено. Спасибо, похоже пригодится совсем скоро.
4. teller 17.04.13 09:53 Сейчас в теме
(3) soba, похоже кого-то отговорил от резервного копирования и ТиИ ?
5. soba 17.04.13 13:50 Сейчас в теме
Все проще. Бывают ситуации, когда ошибка в базе замечена спустя некоторое время, а данных уже навводили по самое небалуйся. Или еще пример. При переходе с БП2.0 на бухгалтерию строительной организации методом грубой силы загрузкой конфигурации без сравнения и объединения (спасибо заботливым разработчикам Импульса) кое-что нужно править :)
6. wirg 17.04.13 15:18 Сейчас в теме
7. denis1c@ 12 18.04.13 00:09 Сейчас в теме
А можно ли вылечить файловую базу ЗУП, если утилита chdbfl.exe и ТиИ ни чего не находят, база запускается, работает нармально, но при групповом расчете НДФЛ база падает со словами "Недостаточно памяти"?
8. andrewks 1375 18.04.13 08:06 Сейчас в теме
(7) denis1c@, а почему Вы решили, что база содержит физические ошибки?
сколько сотрудников? какой релиз платформы и конфы?
9. yandextesting 150 18.04.13 10:25 Сейчас в теме
(7) недавно сталкивался с подобным вопросом, проблема оказалась в неверно заполненной дате документа по одному из сотрудников: вместо 2013 года был указан 0013 год н.э. :) В результате ЗУП пыталась выполнить какие-то расчеты за пару тысяч лет... Вероятность того, что это проблема БД крайне мала, на мой взгляд - копайте данные.
13. denis1c@ 12 18.04.13 23:06 Сейчас в теме
(9) Благодарю за наводку. Открыл регистр сведений "НДФЛ сведения о доходах" и увидел такую картину: Месяц налогового периода - февраль 0013 г. Оказывается в системе ввели документ начисление по б.л. этой датой.
Спасибо всем за помощь. Проблема решена.
10. mdie 87 18.04.13 12:56 Сейчас в теме
(7) denis1c@, запустите под отладчиком в режиме замера производительности и найдете момент "распутывая" от места проблемы. К тому же недавно также пришлось такое лечить, когда период регистрации/начисления у НДФЛ указали лет на 200 больше.
А автору огромное спасибо за тулзу - реально помогла поднять базу с минимальными потерями.
11. s_uu 22 18.04.13 17:34 Сейчас в теме
А каков физический предел размера файловой базы данных?
12. andrewks 1375 18.04.13 17:40 Сейчас в теме
(11) s_uu, теоретически его нет. есть ограничение на размер каждого из объектов таблицы (записи, блобы, индексы) - чуть менее 4 Гб. Самих таблиц может быть очень много.

естественно, что на практике не всё так хорошо, но и не всё зависит от размера. если с базой активно работают более 5-ти человек одновременно, уже можно задумываться о серверной архитектуре, но есть и базы, прекрасно работающие и с 10-ю активными пользователями. так что всё индивидуально
22. KazanKokos 11 02.03.17 16:19 Сейчас в теме
(12) Под rdp в файловой базе может работать до 30 чел и больше. хотя конечно от 30 лучше даже в этом режиме переходить на 1с-сервер. В сети по share база и на 2-3х пользователях виснет и ломается бывает. 4-5 уже много :)
14. SeiOkami 3533 19.04.13 12:06 Сейчас в теме
Круто было бы, если кто-нить сделает обработку для лечения базы всеми возможными способами =)
15. andrewks 1375 19.04.13 13:11 Сейчас в теме
(14) SeiOkami, в данном вопросе универсализм не то, чтобы невозможен, а, скорее, вреден.

на мой взгляд, правильный алгоритм именно такой - анализ и фиксация проблем, потом - написание/применение "лечебного" скрипта, исправляющего конкретные проблемы конкретной базы
16. SeiOkami 3533 19.04.13 15:04 Сейчас в теме
(15) это, конечно, да. Однако, если сделать что-то вроде помощника диагностики проблем и по результатам задаваемых вопросов предлагать то или иное решение. Как в Windows... только рабочее =)
17. AVK_Alex 4 22.04.13 21:56 Сейчас в теме
Было бы удобно различные инструменты собрать под один GUI, да еще и с парсером логов... ну... и для полноты еще гравицапу добавить :)
18. shira84 226 26.04.13 14:46 Сейчас в теме
19. zels 174 15.04.14 23:44 Сейчас в теме
Диск при чтении дает ошибки CRC в районе 8-10Мб от начала файла 1CD (БП2.0). Если там находится конфигурация поставщика, то можно ее взять из старого архива и перенести в копию 1CD (где сбойные блоки забиты нулями)?

Не стал разбираться - написал програмку, которая склеивает два 1CD-файла в один и все заработало.
Вот ссылка: Склеивание двух 1CD-файлов в один
20. andrewks 1375 17.04.14 13:37 Сейчас в теме
(19)
Если там находится конфигурация поставщика, то можно ее взять из старого архива и перенести в копию 1CD (где сбойные блоки забиты нулями)?


да, можно
21. sss999 49 02.03.17 16:14 Сейчас в теме
подскажите как удобнее искать частичные данные таблицы что бы восстановить, так как саму таблицу не находит ни какая программа, и как понять есть ли правильная запись по ней в парамс или сама таблица повреждена, если повреждено описание то как посмотреть целые ли данные?
23. sss999 49 02.03.17 16:41 Сейчас в теме
скрипт не может переименовать таблицы ошибка компоненты на методе ренэйм, что не так?переименовывает с og на не og
24. sss999 49 02.03.17 16:50 Сейчас в теме
подскажите как вытащить данные таблицы в hex, программно не выходит, таблица с og на конце
25. sss999 49 02.03.17 17:19 Сейчас в теме
ну все равно спасибо за скрипт, хоть смог его запустить и что-то сделать
26. sss999 49 04.03.17 19:52 Сейчас в теме
как получить число подскажите ИндексБлокаЗаголовкаОписанияТаблицы
27. Artem108 16.08.17 11:38 Сейчас в теме
База вылетает с ошибкой "не обнаружена таблица "_ACCUMRGT17934". Развернул архив, там эта таблица есть. подскажите можно ли ее отдельно перенести в поврежденную базу? как это сделать?
28. msorina 11.12.18 17:18 Сейчас в теме
База вылетает без сообщений на выполнении команды
FileDB.OpenTable(0,"CONFIGSAVE");
в предлагаемом Вами коде:
FileDB=Новый("AddIn.T1CDLib.DB1CD");
Состояние("Чтение структуры файла");
FileDB.Open1CDFile(ИмяФайла);
FileDB.OpenTable(0,"CONFIGSAVE");

релиз платформы 8.3.11.2867, база была создана на релизе 8.3.11.2899.

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