Обсуждение:Восстановление целостности файлов Pervasiv
0 (0)
Обсуждение:Восстановление целостности файлов Pervasiv ( Обсуждение примера 05.04.2013 18:26 )
0(0)Макрос позволяет восстановить только целые записи из dbt файла пропуская ошибочные записи, почему то за 15 лет существования RSBank наделана куча утилит по восстановлению,
но все они работают по принципу целые записи от начала файла + целые записи от конца файла, а если ошибок несколько то все что было между ошибками просто теряем.
PS:Вот я и решил исправить это досадное недоразумение, хотелось бы чтобы утилиты восстановления были встроены в АБС и не приходилось в мыле срочно искать пути выхода в экстренных случаях.
Посмотреть пример
>> ОтветитьЕрунда какая-то (+) ( sokols 08.04.2013 14:17 )
2(1)var lastp=0; ... macro Read var inf=TBFile(RepairBase,"R",-1,SrcPath + RepairBase , RepairDef); macro Add ... end; if (maxcount==0) maxcount=NRecords(inf); InitProgress(maxcount,"","Восстановление базы"); end; lastp инициализировано нулём, поэтому в следующую ветку управление не попадёт никогда if (lastp!=0) while (inf.GetDirect(lastp)==false) Add(); lastp=lastp+1; message(lastp); end; end; while (inf.next() ) вот внутри этого цикла всё и будет крутиться Add(); lastp=inf.GetPos(); end; ... OnError(); lastp=lastp+1; println("error in position ",lastp); message(lastp); return; end; CreateNew(); while (1) Read(); end;
Стало быть, весь макрос - это последовательный проход по испорченному файлу и переписывание его записей во вновь созданный. Такая технология ничего не даёт. Во-первых, если файл испорчен, то макрос на какой-то записи и отвалится. Во-вторых, если ключ, по которому пробегаем файл, имеет один из флагов - Null value или Manual, то при определённых значениях некоторые записи не скопируются.
butil - наше всё :-)
>> ОтветитьОткрой глаза и включи голову. ( LeonL 10.04.2013 12:20 )
0(0)Во первых если файл испорчен то он отвалится на испорченной записи и попадет в OnError который установит номер следующей записи,
и While(1) переоткроет файл уже с целой записи.
Во вторых открой глаза inf=TBFile( -1 ) открыть файл БЕЗ КЛЮЧА ПО ФИЗИЧЕСКОЙ ПОЗИЦИИ.
В третьих бутил работает только до первой и последней ошибки средины нет.
И последнее если ты не понял логики, сначала спроси потом высказывай свое эКСПЕРТНОЕ мнение.
И самое последнее ты что реально думаешь что человек бы выложил неработающий макрос? я уже его дважды использовал на рухнувших базах борум, и оба раза
он отработал на 100% потери составили 2 и 1 запись, а штатный бутил предлагал мне отрезать 60 и 20 тысяч записей.
>> ОтветитьОК, уговорил (+) ( sokols 10.04.2013 17:37 )
0(0)Невнимательно просмотрел, да.
Хотя что-то не верится, что низкоуровневый бутил справляется с задачей восстановления хуже, чем макрос.
Тебе остаётся извиниться за хамский тон, и тему можно считать закрытой.
>> ОтветитьОк извиняюсь,просто не люблю когда люди выносят финальное решение не разобравшись и даже не проверив ( LeonL 11.04.2013 09:02 )
0(0)Почему Pervasiv сделал такой убогий бутил, я незнаю и почему за десятки лет ситуация на том же уровне для меня загадка.
Ведь даже утилита rebuild тоже делает свое дело до первой ошибки.
>> Ответить