Какие инструменты данных FoxPro я могу использовать для поиска поврежденных данных?

У меня есть несколько пакетов DTS для SQL Server, которые импортируют данные из базы данных FoxPro. До недавнего времени это работало нормально. Теперь скрипт, который импортирует данные из одной из таблиц FoxPro, выкидывает около 470 000 записей при импорте. Я просто помещаю данные в таблицу с полями varchar, допускающими значение NULL, поэтому я думаю, что это должна быть странная / поврежденная проблема с данными.

Какие инструменты вы бы использовали, чтобы отследить подобную проблему?

К вашему сведению, это ошибка, которую я получаю:

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

В этой таблице не должно быть столбцов BLOB-объектов.


Спасибо за предложения. Я точно не знаю, является ли это проблемой коррупции. Я только начал загружать FoxPro по своей подписке MSDN, так что посмотрю, смогу ли я открыть таблицу. SSRS открывает таблицу, просто задыхается перед тем, как просмотреть все записи. Я просто пытаюсь понять, с какой записью возникла проблема.

Ответов (6)

Вы пробовали написать небольшую программу, которая просто копирует существующие данные в новую таблицу?

Также,

http://fox.wikis.com/wc.dll?Wiki~TableCorruptionRepairTools~VFP

При 470 000 записей вы, возможно, захотите проверить, приближаетесь ли вы к пределу в 2 гигабайта для размера таблицы FoxPro. Насколько я понял, записи еще могут быть, но становятся недоступными после точки 2 гига.

Используйте ремонт базы данных с моего сайта (www.shershahsoft.com) БЕСПЛАТНО (и всегда БЕСПЛАТНО).

Я разработал эту программу для восстановления поврежденных файлов Foxpro / FoxBase / Dbase. Программа очень быстрая. Он восстановит таблицу размером 1 ГБ менее чем за минуту.

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

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

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

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

Cmrepair - отличная бесплатная утилита для восстановления поврежденных файлов .DBF.

Моя компания использует Foxpro для хранения большого количества данных ... По моему опыту, повреждение данных очень очевидно, поскольку таблица вообще не открывается. У вас есть копия foxpro, чтобы открыть стол?

@Lance:

если у вас есть доступ к окну командной строки Visual FoxPro, введите:

SET TABLEVALIDATE 11
USE "YourTable" EXCLUSIVE    && If the table is damaged VFP must display an error here
PACK    && To reindex the table and deleted "marked" records
PACK MEMO    && If you have memo fields

После этого структура таблицы должна быть действительной, если вы хотите увидеть поля с недопустимыми данными, вы можете попробовать:

SELECT * FROM YourTable WHERE EMPTY(YourField)   && All records with YourField empty
SELECT * FROM YourTable WHERE LEN(YourMemoField) > 200   && All records with a long memo field, there can be corrupted data

и т.п.