:: Visual Foxpro, Foxpro for DOS
Проверить правильность (целостность) индекса для таблицы FoxPro
Rotesbyte
Автор
Привет всем!

Как можно точно проверить правильность (целостность) индекса для таблицы FoxPro?

Тоесть, надо не перестроить индексы для таблицы, а точно выяснить битый индекс у таблицы или нет.

Ratings: 0 negative/0 positive
Re: Проверить правильность (целостность) индекса для таблицы FoxPro
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
А зачем выяснять? Перестроил и все




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: Проверить правильность (целостность) индекса для таблицы FoxPro
IGOR_SMIRNOVSKY

Сообщений: 132
Откуда: СПб
Дата регистрации: 02.03.2005
2Rotesbyte
Например, см. вложение. Результат: выдаст сообщение или Фокс рухнет.

2AleksM
индексирование больших таблиц занимает время,
функция может ответить быстрее.




------------------
дураком помру
Ratings: 0 negative/0 positive
Re: Проверить правильность (целостность) индекса для таблицы FoxPro
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Цитата:
Тоесть, надо не перестроить индексы для таблицы, а точно выяснить битый индекс у таблицы или нет.
Эта задача по затратам сопоставима с построением индекса заново.

По сути, индекс - это пара значений: значение ключа - номер записи. Т.е. надо перебрать ВСЕ записи как в таблице, так и в индексе, заново вычислить значение ключа и сравнить с номером записи в индексе. И чем это отличается от полного перестроения индекса?
Ratings: 0 negative/0 positive
Re: Проверить правильность (целостность) индекса для таблицы FoxPro
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Владимир!

Есть одно существенное отличие - проверка не потребует EXCLUSIVE доступа. Хотя по времени скорее всего займёт БОЛЬШЕ времени чем перестроение индекса.
И что ещё более печально - нельзя полагаться на "штатный" доступ к индексу. Например там образовался цикл (это сравнительно легко сделать) - и мы просто попадаем в бесконечную беготню между парой-тройкой записей.
Если бы я решал такую задачу, то сначала попытался бы восстановить по индексу содержимое таблицы (т.е. извлёк из индекса все пары ключ-номер записи), проверил на "дубли", на "пропущенные номера" - если индекс без фильтров и неUNIQUE, наконец в режиме с отключенным индексом сравнил реальные данные с восстановленными... Хотя на 100% гарантию я не дам
P.S. Естественно что катастрофические повреждения индекса (в частности потеря собственно cdx файла, его ЗАнуление, или обрезание до размера 0 байт, сбой на верхнем уровне бинарного дерева - где хранится инфа о тегах) - вызовут при нормальном стечении обстоятельств фоксовую ошибку (которую МОЖНО и НУЖНО отловить) - ну и лишь в самом плохом случае слёт по C005 или ещё какой-то "неловимый" слёт программы.
P.P.S. Недоделанный проектик "восстанавливающий" по CDX индексные ключи есть, но заброшен (надеюсь временно )




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 39 (Гостей: 39)

© 2000-2024 Fox Club 
Яндекс.Метрика