Меню
Бесплатно
Главная  /  Прошивка  /  Восстановление данных. Описание работы с программой DBF Recovery Toolbox Как проверить испорченный файл dbf

Восстановление данных. Описание работы с программой DBF Recovery Toolbox Как проверить испорченный файл dbf

Программы для восстановления утерянной информации на ПК.

Новое в категории "Восстановление данных":

Бесплатная
UndeletePlus 3.0.2.406 является небольшим приложением, восстанавливающим удаленные файлы. Приложение Undelete Plus поможет восстановить потерянные файлы, в том числе стертые в режиме DOS, из Корзины, из Windows Explorer или с сетевого диска.

Бесплатная
Scan DBF 1.6 является приложением по ремонту или восстановлению повреждённых DBF-файлов. Приложение Scan DBF поможет восстановить повреждённые файлы при сбое компьютера или электропитания, когда повреждается конец или сам заголовок DBF-файлf.

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

Бесплатная
Recover My Files 4.9.4.1343 является приложением по восстановлению файлов, которые удалены при помощи Корзины в операционной системе Windows. Также приложение Recover My Files обладает возможностью восстановить файлы, которые потеряны из-за форматирования диска, стерты из-за сбоя ПК, программного сбоя или удалены вирусами.

Бесплатная
PC INSPECTOR File Recovery 4.0 является приложением, которое понадобится для восстановления информации при повреждении жёсткого диска. Приложение PC INSPECTOR File Recovery может работать с файловыми системами FAT 12/16/32, а также NTFS.

Бесплатная
OS Backup Wizard 1.19 является приложением по созданию резервных копий для Windows. Уникальностью данного приложения является его возможность при резервировании системы не использовать излишнего дискового пространства для этого.

Бесплатная

Бесплатная
Norton Ghost 15.0.0.35659 является приложением по архивации и восстановлению данных на персональных компьютерах. Приложение поддерживает работу по резервированию и восстановлению без перезагрузки системы.

Бесплатная
Handy Backup 7.1.1 является удобным приложением по автоматическому созданию копий ваших данных и документов, которые можно сохранить на любом устройстве (внешнем или внутреннем, а также на CD-RW) или же залить на FTP-сервер.

Бесплатная
GetDataBack 4.25 является мощным и удобным средством по восстановлению потерянной, поврежденной или удаленной информации с вашего жесткого диска. Приложение GetDataBack предусматривает интуитивно понятный интерфейс и улучшенное быстродействие.

Бесплатная
BadCopy Pro 4.10.1215 является приложением по восстановлению данных с компакт-дисков, дискет, flash устройств или винчестеров, которые повреждены, имеют вирусы, некорректно записаны или имеют какие-либо ошибки. Приложение BadCopy работает в автоматическом режиме при указании директории для восстановления, с возможностью работы с различными форматами графических, текстовых и исполняемых файлов, архивов и других типов файлов.

Бесплатная
Acronis True Image Home 2011 Build 6942/ Home 2012 Build 5545 является мощным приложением по созданию точных образов для выбранных разделов дисков или самих дисков. Приложение Acronis True Image создаёт резервную копию полностью всех данных, приложений и операционных систем, с возможностью быстрого восстановления или копирования на другом компьютере с возможностью создания полной копии данного компьютера.

Бесплатная
Acronis Disk Director 11 Home является комплексным программным пакетом с множеством необходимых для работы с разделами и дисками жёсткого диска инструментов. Пакет программ обладает возможностями управлять вашими дисками и разделами, а также создавать собственные загрузочные диски для резервного копирования системы и её быстрого восстановления.

Бесплатная
DiVFix 1.10 при помощи данной программы можно с лёгкостью просмотреть частично закачанные.avi ролики. Программа DiVFix поддерживает просмотр файлов различных видеоформатов, включая.wmv или.mpeg. Так как файлы.avi посмотреть возможно только если они полностью закачаны, по причине того, что в конце файлов находится индексная таблица, а без неё его нельзя открыть, то и на других проигрывателях они не воспроизводятся.

Бесплатная
Avi Previewer 2.2.7 является программой, которая обладает возможностью просмотра не до конца скаченных или просто поврежденных avi файлов, которые не проигрываются на обычных проигрывателях или имеют дефекты. Программа Avi Previewer позволит вам исправить файлы, если они повреждены, восстановить их после удаления или неправильного извлечения из архива и тому подобное.

Бесплатная
Advanced ZIP Password Recovery 4.00 является программой с возможностями для восстановления утерянных паролей для ZIP-архивов.


Скриншот 1.

Сразу после запуска программы DBF Recovery Toolbox открывается окно выбора файла dbf для восстановления. Выбор нужного файла можно осуществлять тремя способами:

Помимо файла dbf таблица также может включать в свою структуру файл, содержащий информацию из полей типа MEMO. Такие файлы, как правило, имеют имя, совпадающее с именем таблицы dbf и расширение fpt для таблиц формата FoxPro или *.dbt для таблиц формата dBase.

Примечание : В случае если поврежденный файл dbf содержит поля типа MEMO, но файл fpt или dbt указан не был, программа DBF Recovery Toolbox восстановит только структуру поля основного файла таблицы и ссылки из него на файл этого поля. Однако информация, содержащаяся во внешнем файле, обрабатываться не будет. Таким образом, если файл MEMO не был поврежден, будет возможна нормальная дальнейшая работа с восстановленной таблицей. Однако в случае, если помимо самой таблицы dbf был поврежден и не восстановлен файл fpt или dbt, при работе возможны сбои.

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

Если при вводе имени или пути к файлу таблицы была допущена ошибка, программа выдаст предупреждение Please select file to recover! (Пожалуйста, выберите файл для восстановления!) и процесс анализа структуры таблицы начат не будет.


Скриншот 2.

При переходе к этапу просмотра структуры и содержания данных исходной таблицы, программа выдаст окно с предупреждением о начале процесса восстановления информации Do you wish to start recovery? (Хотите ли Вы начать восстановление?). В случае, если необходимо изменить имя или путь к файлу dbf, или добавить к выбору файл MEMO, нужно нажать кнопку No (Нет) и вернуться к окну выбора файла с помощью кнопки Back (Назад).

В случае, если все файлы указаны верно, в диалоге нужно нажать кнопку Yes (Да). После нажатия этой кнопки программа начнет анализ файла таблицы dbf и дополнительных файлов полей MEMO.

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

В процессе анализа и восстановления информации программа DBF Recovery Toolbox :

  1. Считывает заголовок файла, идентифицирует имена и типы полей таблицы и определяет смещения, с которых физически начинаются записи в исходном файле.
  2. Производит идентификацию начала каждой записи исходной таблицы и извлекает из исходного файла все поля этих записей. В случае если таблица содержит поля типа MEMO, идентифицирует ссылки, содержащиеся в записях таблицы на адреса данных, хранящихся в файле этих полей. Сам файл MEMO при этом не обрабатывается.
  3. Если был указан файл, связанный с полями MEMO (fpt или dbt), программа анализирует его структуру и идентифицирует записи файла, соответствующие ссылкам из основной таблицы.

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

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

В случае, если файл поврежден настолько сильно, что программе не удастся восстановить из него информацию, в нижней части окна появится кнопка Send a file to developers (Отправить файл разработчикам), с помощью которой Вы сможете отправить поврежденный файл разработчикам программы по электронной почте для более подробного анализа и восстановления. Также в любой момент Вы можете отправить файл разработчикам для анализа, воспользовавшись пунктом Send source file (Послать исходный файл), находящимся в меню Actions (Действия).

После просмотра восстановленной информации нужно нажать кнопку Next (Далее), находящуюся в нижней части окна программы, для перехода к этапу сохранения восстановленного файла.


Скриншот 3.

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

При этом сохранение восстановленной из исходного файла информации возможно только в зарегистрированной версии программы. В ознакомительной версии доступен только просмотр информации на этапе 2.

Для сохранения информации можно использовать три способа выбора файла:

  1. Ввод пути и имени файла в поле со списком Repaired file name (.dbf): (Имя восстановленного файла (.dbf):), которое находится в основной рабочей области окна. При открытии окна выбора файла для сохранения программа автоматически заполняет поле ввода. По умолчанию предлагается сохранять восстановленный файл dbf в ту же папку, из которой был получен исходный файл, но с именем, состоящим из имени исходного файла и суффикса _repaired. То есть если был использован файл example.dbf, то программа предложит сохранить его под именем example_repaired.dbf.
  2. Выбор папки для сохранения и имени файла с помощью стандартного диалога сохранения файла. Кнопка вызова диалога выбора файла находится справа от поля со списком. При открытии диалога также используется каталог, из которого считывался исходный файл и имя файла, построенное по принципу, описанному выше.
  3. Выбор файла из выпадающего списка поля ввода. При работе с файлами таблиц, программа DBF Recovery Toolbox сохраняет в своих настройках информацию о ранее сохраненных файлах, и при необходимости эти имена и пути к файлам можно использовать повторно.

После указания пути и имени сохраняемого файла для сохранения восстановленной информации нужно нажать кнопку Save (Сохранить), находящуюся в нижней части окна программы.

В случае если каталога, указанного в поле Repaired file name (.dbf): не существует, будет выдано предупреждение Directory does not exist (Каталог не существует), файл сохранен не будет и программа останется на этапе выбора файла для сохранения.

Если файл, указанный в поле уже существует, программа выдаст запрос на его перезапись Do you want to rewrite the existing file? (Хотите ли Вы перезаписать существующий файл?). В случае нажатия кнопки No (Нет), программа также останется на этапе выбора файла. Если будет нажата кнопка Yes (Да), или если такого файла еще не существует, программа DBF Recovery Toolbox перейдет на этап просмотра результатов восстановления.


Скриншот 4.

Программа может сохранять информацию, считанную из исходного файла в любом формате: dBase III-IV, FoxPro 3.x (or later). Однако следует иметь в виду, что при сохранении документа в формате предыдущих версий часть данных, несовместимая с версией сохраняемого файла, может быть потеряна или повреждена.

Выбор формата сохраняемого документа осуществляется с помощью поля с выпадающим списком Select output DBF file version: (Выберите версию результирующего DBF файла).

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

После завершения настройки формата сохраняемого документа, для перехода к процессу восстановления и сохранения данных, нужно нажать кнопку Save file (Сохранить файл), которая находится в нижней части окна программы.

В случае необходимости, можно вернуться на страницу выбора файла для сохранения, нажав кнопку Back (Назад).


Скриншот 5.

На этом этапе работы программа в основной рабочей области окна выводит информацию обо всех файлах, которые были восстановлены в этой сессии ее работы. Информация состоит из:

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

После просмотра журнала можно вернуться назад с помощью кнопки Back (Вернуться), которая находится в нижней части окна программы для изменения любых параметров работы с программой (сохранения восстановленного файла под другим именем, выбора другого файла для восстановления и т. д.).

В случае, если работа с программой завершена, можно нажать кнопку Finish (Завершить) для выхода или просто закрыть окно программы.

Окончание работы

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

Люди в погоне за комфортными для них условиями работы зачастую не задумываются о безопасности и сохранности своих данных и рано или поздно сталкиваются с вопросами их утраты. Рассмотрим обращение клиента с USB Flash 2Gb Transcend. Со слов клиента, в один из дней при установке накопителя в USB порт компьютера было предложено ее отформатировать. Как утверждает клиент, он отказался от этого и обратился за помощью к системному администратору. Системный администратор, обнаружив, что при подключении USB накопителя «подвешивается» компьютер, не придумал ничего лучшего, чем согласиться с предложением операционной системы отформатировать его (никогда этого не делайте! ). Далее системный администратор использовал популярную программу автоматического восстановления R-Studio. Результат ее работы в виде безымянных папок был скопирован клиенту на другой накопитель. При просмотре результата клиент обнаружил, что около четверти файлов не могут быть открыты и, что хуже всего, 1С Бухгалтерия 7.7 отказывалась запускаться с восстановленной базой, ссылаясь на отсутствие файлов.

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

Первый этап в решении подобных задач – это создание поблочной копии оригинального накопителя (или как принято писать со времен, когда носителями были только накопители на гибких и жестких магнитных дисках – посекторной). При вычитывании обнаруживается нестабильная скорость чтения, что говорит о серьезном износе NAND памяти (многократное чтение NAND контроллером страниц NAND памяти и коррекция ошибок за счет избыточности кодов коррекции ошибок (ECC) весьма ресурсоемкая операции, что в итоге влияет на скорость чтения). При наличии непрочитанных участков необходимо заполнить их паттерном, который в дальнейшем нам поможет идентифицировать файлы, которые не были вычитаны целиком.

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

Открываем LBA 0 (0x0 в файле образе) и проверяем там наличие таблицы разделов, либо наличие Boot сектора файловой системы.


рис. 2

В нашем случае видим по смещению 0x1C2 типа раздела 0x0B, означающее, что на данный момент на USB накопителе есть раздел FAT32, который начинается с 0x80 сектора (DWORD по смещению 0x1C6), длиной 0x003C2000 секторов (DWORD по смещению 0x1CA). Переходим к boot сектору описанного раздела в сектор 0x80 (в файле образа байтах 0x10000)


рис. 3

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

Для этого нам нужны следующие параметры, описанные в boot секторе (будут указаны в виде смещения от начала сектора): размер сектора по смещению 0x0B - 0x200 (512 байт), количество секторов в кластере по смещению 0x0D - 0x08, размер кластера получается посредством перемножения размера сектора на количество секторов в кластере 0x08*0x0200=0x1000 (4096 байт), количество зарезервированных секторов до первой копии таблиц FAT - по смещению 0x0E=0x01FE (510 секторов), количество копий FAT - по смещению 0x10=0x02, размер одной копии FAT - по смещению 0x24=00000F01 (3841 секторов). Используя полученные параметры, произведем расчет положения начала области данных: 0x10000+0x01FE*200+0x00000F01*2*200=0x410000 (8320 сектор). Небольшой подвох от создателей FAT32 заключается в том, что на данный момент мы рассчитали начало области данных для раздела FAT32, но оно не является нулевой точкой отсчета, так как первые две записи в FAT таблице зарезервированы и не используются по прямому назначению, в связи с чем нулевой точкой принимается начало области данных за минусом 2 кластеров. В данном случае это будет 0x410000-0x1000*2=0x40E000 (8318 сектор).

Выполним проверку на предмет отсутствия записей в таблице размещения файлов и проведем процедуру сравнения копий на предмет разночтений.


Рис. 4

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

Далее необходимо оценить корневой каталог на предмет удаленных записей. Позиция первого кластера корневого каталога указывается в boot сектор по смещению 0x2C=0x00000002. Для второго кластера в FAT указано FF FF FF 0F, что означает конец цепочки, то есть корневой каталог состоит из одного кластера.


рис. 5

По адресу, рассчитанному выше, мы видим корневую директорию (корневой каталог), в которой содержится единственная 32-байтная запись. По смещению 0x0B мы видим значение 0x08, которое указывает на тип записи – метка тома. Тот факт, что таблицы размещения файлов заполнены нулями, и в корневом каталоге нет намека на какие-либо иные записи, говорит о том, что данный раздел был отформатирован.

Для проверки предположения о том, что раздел не пересоздавался и все параметры файловой системы корректны, необходимо произвести поиск регулярного выражения 0x2E 0x2E 0x20 0x20 0x20 0x20 0x20 0x20 со смещением внутри сектора 0x20 (данное выражение признак начала директории FAT32).


рис. 6

При нахождении регулярного выражения необходимо удостовериться, что это действительно директория, по иным признакам, так как в некоторых случаях возможно совпадение и найденное регулярное выражение не является элементом директории. Согласно информации на рис. 6, можно сказать, что данная директория начиналась с 3 кластера (номер текущего кластера директории DWORD содержится в WORD по смещению 0x1A (младшая часть) и WORD по смещению 0x14 (старшая часть)) и описывалась в корневом каталоге, так как по смещениям 0x3A и 0x34 содержатся нули (начальный кластер родительской директории). Проверим, соответствует ли номер кластера данной директории нулевой точке отсчета файловой системы, созданной после форматирования. Для этого номер кластера директории умножим на размер текущего кластера и прибавим к нулевой точке 0x03*0x1000+0x40E000=0x411000. Как видим, расчетный адрес соответствует фактическому нахождению. Установить имя данной директории возможно только в случае, если ранее корневой каталог состоял более, чем из одного кластера, и ссылка на данную директорию была не в первом кластере, так как содержимое первого кластера при форматировании было полностью уничтожено вместе с таблицами размещения файлов.


рис. 7

Повторяем все проверки: 0x04*0x1000+0x40E000=0x412000. Снова видим соответствие положения директории параметрам текущей файловой системы. Но, кроме этого, видим, что есть номер кластера родительской директории 0x03, что говорит о том, что данная директория была вложенной, и взглянув на рис. 6, можно установить имя директории, которая изображена на рис. 7. Итак, согласно рис. 6, по смещению 0x4B видим значение 0x10 - это означает, что данная запись указывает на директорию, а по смещениям 0x5A и 0x54 число 0x00000004 – указатель на 4-й кластер. По смещению 0x40 – имя директории «BIN». Именно таким образом устанавливается взаимосвязь директорий в поврежденном FAT разделе. После выполнения еще некоторого числа проверок директорий в разных участках образа можно сделать окончательный вывод о том, что на данном накопителе состоялось форматирование в границах предшествующей файловой системы и параметры вновь созданной файловой системы унаследованы от предыдущей, то есть дальнейшие аналитические операции нужно проводить в рамках раздела, описанного в таблице разделов с учетом параметров текущей файловой системы.

Зная, что 1С база, состоящая из DBF файлов, должна содержать файл конфигурации 1CV7.MD, выполним поиск последовательности 0x31 0x43 0x56 0x37 0x20 0x20 0x20 0x20 0x4D 0x44. Для того, чтобы уменьшить количество заведомо ложных результатов, поиск лучше выполнять в рамках 32-байтных блоков с нулевым смещением.


Рис. 8

Таким образом, находим все директории, содержащие в себе указатель на файл 1CV7.MD. В нашем случае обнаружилась только одна такая директория, что позволяет предполагать, что мы нашли первый кластер необходимой директории. Далее следует анализ положения родительских директорий, вплоть до корневой директории. Каждая найденная директория прописывается в таблицу FAT (сначала как директория из одного кластера, посредством записи FF FF FF 0F для соответствующего элемента таблицы). Также в корневой директории прописывается ссылка на дочерний объект.

На текущем этапе мы выполним копирование найденных файлов с предположением об их непрерывности, так как обе копии FAT не содержат информации о фрагментации (напомним, что они были безвозвратно уничтожены системным администратором в результате необдуманного форматирования USB flash). После копирования директории 1С базы анализируем количество файлов. Учитывая, что фрагмент директории был размером в один кластер, то извлекли мы не более 126 файлов, что явно намного меньше, чем должно быть в директории с DBF и CDX файлами, относящимися к 1С базе. Примерно такой же результат выдадут программы автоматического восстановления, о чем свидетельствует результат, полученный системным администратором посредством использования R-Studio.

Среди извлеченных файлов есть 1CV7.MD (файл конфигурации) и 1СV7.DD (файл словаря данных). После выполнения проверки целостности создадим у себя на диске временную папку, куда поместим 1CV7.MD. Укажем данный путь при добавлении новой базы и откроем конфигуратор, посредством которого создадим чистую базу на основании этой конфигурации. Сравним сформированный DD файл с восстановленным, если описания и количество справочников идентичны, то никаких дополнительных действий не требуется, и, имея полный список файлов, можно приступать к поиску остальных фрагментов директории 1С базы. Для этого необходимо осуществить поиск последовательностей из ASCII кодов символов, используемых в именах недостающих DBF файлов. По мере обнаружения фрагментов директории дописывать в таблицу размещения файлов продолжение цепочки. После каждой операции дополнения цепочки директории выполнять копирование файлов и анализировать, насколько сократилась количество недостающих DBF файлов, и вновь формировать последовательность ASCII кодов символов для поиска следующего фрагмента.


рис. 9

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

В данном случае выполнив поиск 5 последовательностей удалось найти все остальные фрагменты директории с базой 1С.

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

Основной метод контроля целостности DBF файла – это проверка информации, содержащейся в служебном заголовке и соответствует ли содержимое файла описанию в заголовке.


рис. 10

Первоначально проводится оценка заголовка: проверяется его длина, указанная по смещению 0x08, приводит ли указанное в нем смещение на конечный маркер 0x0D. Записи полей базы, начиная со смещения 0x20, описываются 32-байтовыми записями, в которых по смещению 0x00 следует имя поля, по смещению 0x0B тип поля, по смещению 0x10 – размер поля. Сумма размеров полей +1 (один дополнительный байт для каждой записи в базе является статусом записи в DBF) должна равняться содержимому по смещению 0x0A (размер одной записи в базе). На рисунке DBF файлы мы видим следующие длины полей: 0x09+0x10+0x10+0x10+0x10+0x10+0x01=0x5A.

Проведем проверку корректности размера файла. Для этого выполняем умножение количества записей, которое указано в заголовке по смещению 0x04 на размер одной записи в базе по смещению 0x0A с последующим сложением с содержимым по смещению 0x08.

0x00000003*0x005A+0xE1=0x01EF. По полученному смещению должен находиться маркер окончания файла 0x1A.

Для контроля целостности содержимого полей можно использовать визуальный метод.

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

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


Рис. 12

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

Необходимо проверить целостность каждого DBF файла, коих в одной 1С базе несколько сотен. По прохождении всех проверок и сборов фрагментов файлов последует финальная проверка в конфигураторе 1С Предприятия.


рис. 13

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

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

Раньше писал на Clipper Summer 87.
Нужно на Clipper 5.3 создать индексный файл CDX, но не могу даже собрать exe-шник.
В начале программы вставил:
REQUEST DBFCDX
rddSetDefault("DBFCDX")
Линкую как в примере:
BLINKER FILE $(objs) OUTPUT $@ lib dbfcdx.lib

При сборке выдает ошибку:
BLINKER: 1115: DBFCDX.LIB(CL53INIT) : "_DBFCDX" : unresolved external

Заменил BLINKER.
Стал пробовать собирать BLINKERом 6.0
то же самое.

Что интересно, если вместо DBFCDX подключать к примеру DBFNDX, т.е.
в программе
REQUEST DBFNDX
rddSetDefault("DBFNDX")
а затем
BLINKER FILE $(objs) OUTPUT $@ lib dbfndx.lib
то всё нормально линкуется и работает

По второму вопросу - в своей системе я также использую как CLIPPER (чаще), так и FOXPRO (реже и завязал с ним, поскольку у FOXPRO убийственный недостаток - максимальная размерность массива 2. Для алгоритмиста это дрова. Если знал бы сразу - вообще бы с FOXом не связывался). Но тем не менее несколько программ уже есть на FOXe. Однако не понимаю, зачем нужны общие индексы? В клиппере я использую NDX, а на FOXe - его долбаные IDX, DBF общие. Работа идет порознь - каждому своё. Или система столь монументальна, что идет непрерывным потоком изменение файлов с двух сторон? Боюсь, что нормального решения нет для разнородных систем, столь тесно работающих друг с другом на уровне индексов.
А по поводу глюков по созданию CDX Клиппером единственный совет - это скинуть файл с минимальным тестовым примером без предметной части (прога + DBF + описание глюка (когда и как он проявляется), может кому и удасться докопаться до сути происходящего.
По крайней мере у меня интерес возник.

Ответ на предыдущее письмо. _dbfcdx.lic конечно же прилинковываю, но это не помогает.

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

У фокса есть преимущество по сравнению с клиппером : намного быстрее работает с базой, а у меня задача на 400 тыс. абонентов, которых нужно каждый месяц массово пересчитывать. Тут бы фокс помог, а то бегаю по управлению, компьютеры ищу, которые можно на ночь оставить для расчета. Так что такая связка иногда весьма полезнаКСС: ...у меня задача на 400 тыс. абонентов... ...а то бегаю по управлению, компьютеры ищу, которые можно на ночь оставить для расчета. Конечно это не в тему, но при таком количестве абонентов и, стало быть, высокой ответственности, имеет смысл выделить отдельный сервер. Тогда на нём можно запускать сервисные задачи. Моя Клипперная прога, которой уже 13 лет, так и делает.

Andrey: Urri пишет: а у меня задача на 400 тыс. абонентов У меня задача раньше была на 150 тыс. абонентов. Считала целую ночь. Потом пределал алгоритм (долго делал) стала считать за 5 часов. Перешел на хХарбор. Считает 1,5-2 часа примерно. Так что Фокс, что Клиппер - пора переходить на нормальные компиляторы. А если руководство не понимает твоего труда - нужно менять руководство, или забить на работу. Чем раньше поймешь эту истину, тем легче будет жить дальше.

Смотрел я на хХарбор в начале его творческого пути, но не нашел тогда возможности прицепить к нему ADS, без которого сейчас себе не мыслю работы для своих больших по размеру баз (корректность индексов и транзакции дорого стоят). Если знаешь как подружить с ADS - подскажи пожалста и дай ссылку где взять стабильно работающий хХарбор. Я постараюсь поднять на нем расчетную часть - может полегчает.

На нормальный компилятор переходить, говоришь? Это при том, что 60% машин (из 300) такие, что половину из них w98 с трудом тянут, а другая половина - w95 только поддерживает с 14" мониторами и разрешением 640*480... Что, на VBasic-4? А руководство сейчас трудно поменять - кругом кризис однако, работодатели программистов сейчас не жалуют. Или у вас в регионе по-другому?Pasha: Поддержка Ads в харборе есть. Харбор с Ads подружился даже раньше, чем с DBFCDX, т.е. рабочмй rdd для Ads был готов, когда DBFCDX был еще глючный

Andrey: Urri пишет: что половину из них w98 с трудом тянут, а другая половина - w95 только поддерживает с 14" мониторами и разрешением 640*480... Что, на VBasic-4? Так хХарбор даже на w98 - 95 работать НАМНОГО стабильней и быстрей будет. Я тоже очень сомневался раньше, а сейчас просто думаю почему мне никто раньше его (хХарбор) не показал!!! Задача из Клипера в хХарбор переноситься просто компиляцией, но могут быть заморочки, но небольшие. Проблемы будут, подскажем. Я уже систем 5 своих и 3 чужих пренес!!! Чужие даже легче пошли, за неделю делал!

Urri: Уважаемые (вместе с модератором Pasha)! Вы не дразнитесь, а ссылку дайте на стабильный релиз хХарбора и rdd для ADS и где что можно почитать. Пожалста. Очень нужно

Andrey: Вот блин! Берешь просто xharbour качаешь оттуда версию и все! Я на этой версии уже почти год сижу!

Провел тест для clipper 5.3 , Blinker 1.0 и FoxPro 8.
Имеются два одинаковых файла testclp.dbf и testfox.dbf
с полями NAME, NAME1 - C(10), NUMBER, NUMBER1, SUMMACLP, SUMMAFOX - N(10).
Специальная программа fill.exe <кол-во записей> заполняет оба эти файла таким образом:
NAME=A000000001, NUMBER1=1 для 1-й записи,
NAME=A000000002, NUMBER1=2 для 2-й записи и т.д.
Поля NAME1 и NUMBER1 заполняются аналогично, но в обратной оследовательности, т.е. указанные значения будут иметь последняя и предпоследняя записи и т.д. Поля SUMMAFOX и SUMMACLP программой fill.exe не заполняются.
Далее имеются две аналогичные программы на CLIPPER (testclp.exe) и на FoxPro (testfox.exe). Для testclp.exe (clipper) задача следующая:
а) проиндексировать файл testclp.dbf по полю NAME (tag FLD)
и по полю NAME1 (tag FLD1), создав при этом "свой" индекс testclp.cdx;
б) пройтись по файлу testfox.dbf и, пользуясь созданным в а) индексным файлом, для каждой строки из testfox.dbf по значению NAME отыскать строку в файле testclp.dbf, у которой такое же поле NAME и прибавить поле NUMBER из этого файла к полю SUMMACLP из testfox.dbf; затем по этому же значению NAME отыскать еще одну строку в файле testclp.dbf, у которой такое же поле NAME1 и вычесть из поля SUMMACLP testfox.dbf.
в) пройтись по файлу testclp.dbf и, пользуясь индексным файлом testfox.cdx, созданным другой программой (testfox.exe - FoxPro),
для каждой строки из testclp.dbf по значению NAME отыскать строку
в файле testfox.dbf, у которой такое же поле NAME и прибавить поле NUMBER
из этого файла к полю SUMMACLP из testclp.dbf; затем по этому же значению NAME
отыскать строку в файле testfox.dbf, у которой такое же поле NAME1 и
вычесть из поля SUMMACLP testclp.dbf.
Для testfox.exe (FoxPro) аналогичная задача:
а) проиндексировать файл testfox.dbf по полю NAME (tag FLD)
и по полю NAME1 (tag FLD1), создав при этом "свой" индекс testfox.cdx;
б) пройтись по файлу testclp.dbf и, пользуясь созданным в а) индексным файлом, для каждой строки из testclp.dbf по значению NAME отыскать строку в файле testfox.dbf, у которой такое же поле NAME и прибавить поле NUMBER из этого файла к полю SUMMAFOX из testclp.dbf; затем по этому же значению NAME отыскать строку в файле testfox.dbf, у которой такое же поле NAME1 и вычесть из поля SUMMAFOX testclp.dbf.
в) пройтись по файлу testfox.dbf и, пользуясь индексным файлом testclp.cdx, созданным другой программой (testclp.exe - Clipper),
для каждой строки из testfox.dbf по значению NAME отыскать строку
в файле testclp.dbf, у которой такое же поле NAME и прибавить поле NUMBER
из этого файла к полю SUMMAFOX из testfox.dbf; затем по этому же значению NAME
отыскать строку в файле testclp.dbf, у которой такое же поле NAME1 и
вычесть из поля SUMMAFOX testfox.dbf.
Таким образом, при правильной работе обе программы должны к каждому полю каждого файла прибавить и вычесть одно и то же число (хотя и расположенные в разных записях), и в результате при правильной работе системы должны остаться нулевые значения в полях SUMMACLP и SUMMAFOX в обоих файлах.
Тест проводился для 100000 и 400000 записей, и не смотря на разный размер индексных файлов, дал правильный результат. Единственное что - при добавлении записей один из индексных файлов ("чужой") остается неправильным, поэтому при первом запуске каждая из программ выполняет только работу со "своим" индексом, и не выплняет с "чужим". После запуска второй программы оказываются правильно проиндексированными оба файла и обе программы начинают работать без сбоев (аналогично при уменьшении кол-ва записей, но при этом FoxPro вылетает в error на чужом индексе, и мне пришлось применить обработчик ON ERROR... Но это из-за того, что изменение кол-ва записей производится fill.exe без открытия обоих индексов, а также из-за того, что каждая из программ не переиндексирует чужой индекс (т.е. эта
проблема искусственно создана - иначе и не должно быть). Если разрешить FoxPro выполнить переиндексацию чужого индекса - тогда нормальная работа восстанавливается. Далее "совершенствовать" систему обработок ошибок я не стал, чтобы обе программы не сильно отличались друг от друга.
Итог следующий:
1) У меня сначала был Clipper 5.3 без патча (и я на нем уже давно работаю). Он действительно давал сбои: начиная где-то с 40000 записей, иногда работал нормально, иногда зависал, иногда вылетал с ошибкой (типа программа выполнила недопустимую операцию) в начале программы при попытке проиндексировать "свой" CDX. Как советуют здесь на форуме, сделал патч до 5.3b - всё заработало нормально. Но и до патча глюки были не в том смысле, что не понимались индексы FoxPro - без переиндексирования (когда оба индеса создавались FoxPro) обработка нормально выполнялась, CLIPPER валился на создании "своих" индексов.
2) для современных CУБД 400000 записей - не очень много. Как
видно из результатов теста, обработка всего файла со случайным поиском
занимает 2-3 минуты максимум даже на несколько устаревших компьютерах. Так что 2-4 часа времени на современной технике (и даже 30 мин.) - это "das ist fantastisсh" в моих понятиях. Проблема скорее всего или в неэкономном алгоритме, или в узких местах типа пропускной способности сети (из-за повального увлечения архитектурой клиент-сервер, к чему я отрица- тельно отношусь - но это оффтоп). 3) Как видно из результатов теста, время на создание индекса незначительно по сравнению с общим временем работы, так что лучше всего перед началом обра- ботки файлов индексы создавать заново, не доверяя ранее созданным "чужим" и "своим"индесам (если только они не используются в этот момент другими программами).
Каждая из программ в случае нормальной обработки файлов сообщает время (в сек.), потребовавшееся для:
- создания "своего" индекса (пyнкт а);
- обработки файла по "своему" индексу (пункт б);
- обработки файла по "чужому" индексу (пункт в);
- общее время работы (сюда добавляется еще время на заполение полей
SUMMAFOX и SUMMACLP нулевыми значениями в обоих файлах).
Прилагается архив:
info.doc - результаты эксперимента по времени выполнения.
fill.prg - текст вспомогательной программы на clipper для заполнения файлов.
calc.prg - текст clipper-программы.
program1.prg - текст FoxPro-программы.
makefill.bat - создает fill.exe (немного подкорректировать придется)
makecalc.bat - создает testclp.exe (тоже самое).
proj1.pjx - файл проекта на FoxPro.
testfox.dbf и testclp.dbf - файлы с данными (созданные в DBU).
testclp.cdx - индексный файл, создаваемый CLIPPERом.
testfox.cdx - инрексный файл, создаваемый FoxPro.
fill.exe - программа для заполнения файлов.
testclp.exe - программа на CLIPPERе.
testfox.exe - программа на FoxPro.
Для testfox.exe потребуется runtime environment (от VFP6
скорее всего не подойдет, так что придется использовать текст из program1.prg
и возможно тоже подкорректировать).
Для сокращения объема архива файлы dbf содержат по 10 записей, для проведения реальных испытаний следует число записей увеличить.
Если в наличии CLIPPER 5.2, то также придется подкорректирвоать fill.prg и саlc.prg.
Тесты для CLIPPER"87, CLIPPER 5.2 и VFP6 попробую выполнить несколько позже, поскольку c этими версиями не работаю и сейчас в рабочем состоянии их нет
(а также перекрестные тесты типа CLIPPER 5.2 <-> VFP8 и CLIPPER 5.3 <-> VFP6).
Несмотря на кажущуюся простоту задачи, времени все же потребовалось немало, однако именно такие объективные сравнительные исследования представляют для меня значительный интерес.Andrey: ALGO пишет: Так что 2-4 часа времени на современной технике (и даже 30 мин.) - это "das ist fantastisсh" в моих понятиях. Проблема скорее всего или в неэкономном алгоритме Это не проблема, и не неэкономный алгоритм. Нормальный, по другому не получиться. Для понятия этого алгоритма нужно представить запись значений 24 сумм прихода денег, 24 дат прихода денег, 24 тарифов, 24 сумм начислений и т.д. в одну запись в базе. Так было еще мной на Клипере написано, и пока еще не переделывал, да и не буду наверно. Я видел как на платформе 1С версии 7.5 реализовали начисление коммунальных платежей, так там у 9.тыс. абонентов начисления делались порядка 5 часов. И ничего, никто не жаловался.

Решения для бизнеса

Если использование онлайн сервиса для восстановления невозможно, вы можете скачать одну из следующих утилит:

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

Видео-руководство по использованию сервиса OfficeRecovery Online

Об OfficeRecovery for DBF Online

OfficeRecovery for DBF Online восстанавливает поврежденные базы данных DBF (dbf).

Поддерживаемые версии Visual FoxPro:
9.0, 8.0, 7.0, 6.0, 5.0 и 3.0

Восстановленные данные сохраняются в новую базу данных Visual FoxPro.

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

Примеры использования

Сервис по восстановлению поврежденных файлов DBF может использоваться, когда файл dbf не открывается в Microsoft Visual FoxPro и вы видите ошибки или предупреждения во время открытия.

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

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

Стандартные возможности:

  • Поддержка баз данных Microsoft Visual FoxPro, dBASE, FoxBASE DBF
  • Восстановить табличные структуру и данные
  • Создать новую базу данных (.dbf) с восстановленными данными
  • Проста в использовании, не требует специальных навыков

Описание восстановления файла инструментом OfficeRecovery for DBF Online

Поврежденные базы данных dbf - это файлы, которые неожиданно стали непригодными для использования и не могут быть открыты с помощью Microsoft Visual FoxPro. Существует ряд причин, по которым файл dbf может быть испорчен. И в некоторых случаях возможно исправить и восстановить поврежденный dbf (Visual FoxPro 9.0, 8.0, 7.0, 6.0, 5.0, 3.0) файл.

Если ваш dbf база данных внезапно стала поврежденной или недоступной для открытия в программе, в которой она был создана, не отчаивайтесь! Вам не нужно больше покупать дорогое программное обеспечение, чтобы восстановить только один испорченный файл dbf. OfficeRecovery for DBF Online представляет вам новый онлайн сервис, который поможет вам восстановить поврежденную базу данных dbf мгновенно. Все, что вам нужно сделать, это просто загрузить поврежденный dbf файл, используя браузер, оценить качество восстановления демо результатов и выбрать подходящий для вас вариант решения проблемы.

OfficeRecovery Online for DBF поддерживает Microsoft Visual FoxPro 9.0, 8.0, 7.0, 6.0, 5.0, 3.0. Восстановленные данные сохраняются в новую базу данных Visual FoxPro.

OfficeRecovery for DBF Online предлагает бесплатные и платные опции для получения полных результатов восстановления. Бесплатный вариант предполагает, что полные результаты могут быть получены абсолютно бесплатно в течение 14-28 дней. Всё, что вам нужно сделать, это просто подписаться на бесплатные результаты после окончания процесса восстановления файла dbf. Если же вам нужно получить восстановленный dbf файл сразу, мгновенно, вам нужно выбрать платный вариант вместо бесплатного.

Что же делать, если в вашем файле dbf не выявлено данных для восстановления? Вы можете заказать невозмещаемый анализ вашего файла нашей опытной технической командой. В некоторых случаях восстановление данных возможно только вручную.