Восстановление работоспособности файловой базы. 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).

См. также

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

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

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

14400 руб.

29.04.2020    24263    75    144    

58

Тестирование и исправление ключей аналитики ERP, УТ11, КА

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

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

3600 руб.

10.02.2017    102273    602    166    

641

Автоматическая корректировка НДФЛ в ЗКГУ

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

На этот раз действительно автоматическая корректировка НДФЛ! С помощью данной обработки можно автоматически скорректировать НДФЛ, не тратя целые часы на его ручную корректировку. Можно в считанные минуты изменить НДФЛ по всем сотрудникам в организации. Что бережет деньги на оплату специалиста и время! Обновлена и адаптирована к новым правилам исчисления и удержания НДФЛ с 01.01.2023 г.

4500 руб.

23.06.2022    10521    75    30    

35

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

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

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    20038    285    35    

58

Заполнение документа "Корректировка регистров" произвольными данными

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

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

2400 руб.

13.07.2015    48542    159    29    

110

Помощник исправления порядка расчетов

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

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

7200 руб.

02.11.2020    6273    3    0    

5

Групповое изменение валюты в документе «Установка цен»

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

Теперь Вам не понадобится пересчитывать цену в другую валюту отдельно по каждой номенклатуре. Расширение сэкономит Ваше время, позволив сделать это при помощи групповой обработки в документе Установки цен.

2400 руб.

27.06.2023    2054    1    0    

1

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

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

При загрузке банковской выписки поступлений по платежным картам 1С не совсем верно распознает данные, предоставляемые банком. В результате приходится корректировать эти данные вручную в документе "Поступление на расчетный счет". Ставить сумму комиссии (даже когда программа автоматом рассчитала сумму она не всегда совпадает с банком), вид операции, в зависимости от торговой точки менять учет налогов, ставить договор итд. Все это настраивается один раз и вам останется только выбрать период! Есть и простой вариант использования - просто правит сумму комиссии. Расширение в комплекте позволяет вызвать обработку автоматически после загрузки выписки.

2400 руб.

23.12.2021    12786    8    26    

13
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DragonAgo 13 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@ 8 18.04.13 00:09 Сейчас в теме
А можно ли вылечить файловую базу ЗУП, если утилита chdbfl.exe и ТиИ ни чего не находят, база запускается, работает нармально, но при групповом расчете НДФЛ база падает со словами "Недостаточно памяти"?
8. andrewks 1362 18.04.13 08:06 Сейчас в теме
(7) denis1c@, а почему Вы решили, что база содержит физические ошибки?
сколько сотрудников? какой релиз платформы и конфы?
9. yandextesting 147 18.04.13 10:25 Сейчас в теме
(7) недавно сталкивался с подобным вопросом, проблема оказалась в неверно заполненной дате документа по одному из сотрудников: вместо 2013 года был указан 0013 год н.э. :) В результате ЗУП пыталась выполнить какие-то расчеты за пару тысяч лет... Вероятность того, что это проблема БД крайне мала, на мой взгляд - копайте данные.
13. denis1c@ 8 18.04.13 23:06 Сейчас в теме
(9) Благодарю за наводку. Открыл регистр сведений "НДФЛ сведения о доходах" и увидел такую картину: Месяц налогового периода - февраль 0013 г. Оказывается в системе ввели документ начисление по б.л. этой датой.
Спасибо всем за помощь. Проблема решена.
10. mdie 86 18.04.13 12:56 Сейчас в теме
(7) denis1c@, запустите под отладчиком в режиме замера производительности и найдете момент "распутывая" от места проблемы. К тому же недавно также пришлось такое лечить, когда период регистрации/начисления у НДФЛ указали лет на 200 больше.
А автору огромное спасибо за тулзу - реально помогла поднять базу с минимальными потерями.
11. s_uu 22 18.04.13 17:34 Сейчас в теме
А каков физический предел размера файловой базы данных?
12. andrewks 1362 18.04.13 17:40 Сейчас в теме
(11) s_uu, теоретически его нет. есть ограничение на размер каждого из объектов таблицы (записи, блобы, индексы) - чуть менее 4 Гб. Самих таблиц может быть очень много.

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

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

Не стал разбираться - написал програмку, которая склеивает два 1CD-файла в один и все заработало.
Вот ссылка: Склеивание двух 1CD-файлов в один
20. andrewks 1362 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.

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