powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Улет индекса
21 сообщений из 21, страница 1 из 1
Улет индекса
    #34658908
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Такая вот проблемка... В течение некоторого времени были проблемы с сервером и при входе в программу (программа локально на компе, база на сервере) появлялось сообщение "запись находится вне заданного диапазона" или что-то такое. Как я понял при анализе ситуации - это слетал индексный файл. После переиндексации все восстанавливалось. Но это обнаруживалось только при входе в программу при открытии индексированного файла.
Вопрос.
Техника у нас не очень надежная, так вот есть ли возможность в процессе работы (не выходя/входя в программу) отслеживать такую ситуацию?
Кстати, раньше я просто переиндексировал систему (не reindex, а просто переиндексация по новой). После этого перед переиндексацией я стал удалять индексные файлы. И пока, тьфу-тьфу, работает. Здесь может быть животное порыто?
...
Рейтинг: 0 / 0
Улет индекса
    #34658934
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если индексы создаются заново, то их лучше предварительно удалить DELETE TAG ALL, т.к. без этого предыдущий (замененный) индекс остается в индексном файле, но не используется (мусор вобщем).
2. По максимуму отказаться от монопольного открытия таблиц, т.к. при вылете клиента изменяющего что-то монопольно в таблице индекс почти всегда портится, а иногда и таблица.
3. Если есть возможность надо сделать ежедневную индексацию. Например по заданию на сервере по ночам, или если сервер на ночь выключается, то при включении.
...
Рейтинг: 0 / 0
Улет индекса
    #34658952
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"...
А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"?
Не могу въехать - что за фигня?!
Причем на одной из машин... Какие настройки???
...
Рейтинг: 0 / 0
Улет индекса
    #34658959
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2DimaT

на 1. Теперь я просто удаляю индексные файлы.

на 2. Монопольного доступа на таблицы ни у кого нет. Дается только для переиндексации, базе никто не сидит.

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

НО.В том-то и загвоздка, что я боюсь слета индекса в процессе работы и того, что не удастся это вовремя обнаружить! Ведь тогда может быть катастрофа - не работать поиск или, что хуже работать неправильно!
...
Рейтинг: 0 / 0
Улет индекса
    #34658997
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RedrikСорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"...
А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"?
Не могу въехать - что за фигня?!
Причем на одной из машин... Какие настройки???
Вероятно на других машинах в эту часть программы не попадают или индекс от локальной таблицы.
Варианты возникновения:
USE ... order MyOrder (set order to MyOrder, seek ... order MyOrder и т.п.) - при несуществующем тэге MyOrder, или если индексный файл не открыт. Включи в проекте debuginfo и сохраняй в лог где конкретно ошибка происходит, а потом код смотри что не так.

StandD...
НО.В том-то и загвоздка, что я боюсь слета индекса в процессе работы и того, что не удастся это вовремя обнаружить! Ведь тогда может быть катастрофа - не работать поиск или, что хуже работать неправильно!
Тогда сделай какую-нибудь систему контроля корректного выхода. Например объект где в Init() - добавление записи в таблицу активных пользователей, установка флага активности и ее блокировка (при вылете блокировка снимается автоматом), в Destroy() снятие флага и снятие блокировки записи. И проверку - блокировки нет, а флаг есть значит пользователь вышел некорректно, возможна порча индексов
При запуске проги создается объект, желательно с private datasession (чтобы случайно таблицу не закрыть в процессе работы), проверяется наличие некорректных выходов - в случае наличия - сообщение пользователю "Надо индексировать". При нормальном выходе (даже при прерывании по ошибке в коде) объект уничтожается и снимает флаг активности, а при зависании компа или пропадании сетки флаг активности останется.
...
Рейтинг: 0 / 0
Улет индекса
    #34659005
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2DimaT

В принципе у меня создается таблица активных пользователей, которые попадают в нее при входе и удаляются при корректном выходе. Т.о. если пользователь неактивен,а запись о нем есть - это признак некорректного выхода и намек на необходимость переиндексации.
Но это при вылете пользователя из программы. Но ведь возможен вариант невылета, но угробливания индекса. Вот что меня смущает.
...
Рейтинг: 0 / 0
Улет индекса
    #34659016
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StandD... Но ведь возможен вариант невылета, но угробливания индекса. Вот что меня смущает. Например? Средствами VFP испортить индексы невозможно, фокс сам следит за их целостностью, за исключением одной ситуации: индекс не структурный (имя файла CDX не совпадает с именем DBF), таблица открывается без индекса и изменяется.
...
Рейтинг: 0 / 0
Улет индекса
    #34659017
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T StandD... Но ведь возможен вариант невылета, но угробливания индекса. Вот что меня смущает. Например? Средствами VFP испортить индексы невозможно, фокс сам следит за их целостностью, за исключением одной ситуации: индекс не структурный (имя файла CDX не совпадает с именем DBF), таблица открывается без индекса и изменяется.

А вот это уже интересно... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо? И второе - насчет изменения таблицы при отключенном индексе - надо проверить, не мой ли косяк!
Спасибо!
...
Рейтинг: 0 / 0
Улет индекса
    #34659020
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StandD... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо?Плохо только тем что надо следить чтобы индексы всегда открывались. А чем не устроили одноименные индексы?
...
Рейтинг: 0 / 0
Улет индекса
    #34659024
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T StandD... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо?Плохо только тем что надо следить чтобы индексы всегда открывались. А чем не устроили одноименные индексы?

Открываются... А одноименные не делаю черт его знает почему. Когда-то что-то навеяло. Теперь всегда индексный файл именую как filedbf+"i". Традиция, блин...
...
Рейтинг: 0 / 0
Улет индекса
    #34659028
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если отказался от структурных индексов только из-за проблем с индексированием при серьезном слете индексов, то это лечится пропуском ошибок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
on error do localerr with ERROR(), MESSAGE(), LINENO(), PROGRAM()
private plWasError
local lcPath, lcFile, lnSc
lcPath = addbs(justpath(SYS( 2014 , 'rees.dbc')))
for lnSc =  1  to  10 
	clear
	plWasError = .f.
	? 'Проход № ' + astr(lnSc)
	if lnSc =  2  && Второй проход, значит проблемы. Удаляем индексы.
		close data all
		lcFile = lcPath + 'rees.dcx'
		delete file &lcFile
		lcFile = lcPath + '*.cdx'
		delete file (lcFile)
		use rees.dbc excl
	endif

	close data all
	? "Контейнер базы данных"
	open database rees excl
	validate database
	pack database

	? "Таблица REPORT"
	use report excl
	if used('report')
		delete tag all
		pack
		index on name tag name
	endif

	...

	if !plWasError && Ошибок не было. Выходим.
		exit
	endif
endfor

close data all
if plWasError && Ошибки не исправлены
	?
	? '!!! ОБНАРУЖЕНЫ НЕИСПРАВИМЫЕ ОШИБКИ !!!'
	inkey( 0 )
endif

proc localerr
para err,x1,x2,x3
if err= 1557  .or. err= 1705 
	clear
	close data all
	messagebox("Не могу проиндексировать."+chr( 13 )+"Вероятно работает кто-то еще.", 0 ,"ОШИБКА")
	return to master
endif
? 'error'
plWasError = .t.
return
...
Рейтинг: 0 / 0
Улет индекса
    #34659042
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, пробую разобраться.
...
Рейтинг: 0 / 0
Улет индекса
    #34659078
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StandD... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо? Еще один подводный камень в данной ситуации - использование команд SQL (SELECT, UPDATE, INSERT, DELETE) приводит к автоматическому открытию таблицы (если она не открыта ранее) и индексы в твоем случае не откроются, т.е. SELECT - будет тормозить, а UPDATE, INSERT, DELETE приведут к необходимости индексации.
...
Рейтинг: 0 / 0
Улет индекса
    #34659206
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, приму к сведению!
...
Рейтинг: 0 / 0
Улет индекса
    #34660275
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StandDТехника у нас не очень надежная, так вот есть ли возможность в процессе работы (не выходя/входя в программу) отслеживать такую ситуацию?
Пробовал технику, рекомендуемую на UT. Проблемы с индексами иногда обнаруживались, иногда нет. Мой частный вывод - автоматизировать данный процесс нельзя. Можно только немного "уменьшить" вероятность его появления методами описанными выше - ежедневным удалением и пересозданием индекса.

P.S. Причина, по которой у нас возникала пробема - часть таблиц открывалась на изменение в FPW2.6 а часть в VFP 9.1 c буферизацией. Отсюда и получался "развал" индекса (то есть неправильное построение ветки индекса), потому как FPW2.6 и более поздние версии FoxPro имеют отличия в построении b-trees...

В общем этот bug вроде как был уже исправлен в VFP 9.1... Но многие фирмы продолжают использовать FPW2.6...
...
Рейтинг: 0 / 0
Улет индекса
    #34660311
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Sergey Ch

Спасибо за информацию. Индексы уже давно утром убиваю и создаю. В общем-то, что-то вроде нащупал. В программе ведется протокол действий пользователей (где-то по 4-5 тыс. записей в день). Так вот по времени в протоколе локализовал один компьютер, на котором сразу после переиндексации вошли в программу и индексы слетели через несколько минут (в это время на других компах программа не была запущена). Нашел на нем вирус, убил. Пока тихо. Возможно ли разрушение индекса вирусом?
...
Рейтинг: 0 / 0
Улет индекса
    #34660803
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StandD... Пока тихо. Возможно ли разрушение индекса вирусом?
Теоретически - да, практически - маловероятно, почитай описание вируса, я такого ни разу не видел, да и смысла портить индексы у вирусописателя нет, только если какой шизанутый враг dbf-а писал.

А кроме лечения вируса никакие изменения не проходили? exe обновил? локально что-нибудь снес и поновой записал? неверно это помогло.
...
Рейтинг: 0 / 0
Улет индекса
    #34660845
StandD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TТеоретически - да, практически - маловероятно, почитай описание вируса, я такого ни разу не видел, да и смысла портить индексы у вирусописателя нет, только если какой шизанутый враг dbf-а писал.

А кроме лечения вируса никакие изменения не проходили? exe обновил? локально что-нибудь снес и поновой записал? неверно это помогло.

Да нет, ничего не менял... То-то и беспокоит. А насчет врага dbf-a - это да, это круто! ж-)
...
Рейтинг: 0 / 0
Улет индекса
    #34660859
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StandD2 Sergey Ch
Возможно ли разрушение индекса вирусом?
Весьма возможно. Если вирус контролирует наиболее часто открываемые файлы и мешает правильному построению дерева индекса (причина аналогичная указанная мной выше).
...
Рейтинг: 0 / 0
Улет индекса
    #34918672
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T RedrikСорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"...
А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"?
Не могу въехать - что за фигня?!
Причем на одной из машин... Какие настройки???
Вероятно на других машинах в эту часть программы не попадают или индекс от локальной таблицы.
Варианты возникновения:
USE ... order MyOrder (set order to MyOrder, seek ... order MyOrder и т.п.) - при несуществующем тэге MyOrder, или если индексный файл не открыт. Включи в проекте debuginfo и сохраняй в лог где конкретно ошибка происходит, а потом код смотри что не так.

Прозевал ответ... :-(
"Другие машины" - это не насчет сети и т.п. Это просто копия на другой комп - софт исключительно локальный!
Индексирую и после пары операций - DELETE TAG ALL, а в ответ - INDEX TAG NOT FOUND!
Если дать ему DELETE TAG QQQ (т.е. указать конкретное имя) - без проблем!
И это только на одном компьютере и только на VFP7 - "рядом" есть VFP9 и на нем никаких ругательств...
...
Рейтинг: 0 / 0
Улет индекса
    #34918930
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redrik Dima T RedrikСорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"...
А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"?
Не могу въехать - что за фигня?!
Причем на одной из машин... Какие настройки???
Вероятно на других машинах в эту часть программы не попадают или индекс от локальной таблицы.
Варианты возникновения:
USE ... order MyOrder (set order to MyOrder, seek ... order MyOrder и т.п.) - при несуществующем тэге MyOrder, или если индексный файл не открыт. Включи в проекте debuginfo и сохраняй в лог где конкретно ошибка происходит, а потом код смотри что не так.

Прозевал ответ... :-(
"Другие машины" - это не насчет сети и т.п. Это просто копия на другой комп - софт исключительно локальный!
Индексирую и после пары операций - DELETE TAG ALL, а в ответ - INDEX TAG NOT FOUND!
Если дать ему DELETE TAG QQQ (т.е. указать конкретное имя) - без проблем!
И это только на одном компьютере и только на VFP7 - "рядом" есть VFP9 и на нем никаких ругательств... Т.е. на другом компе работает - копируешь на этот и ошибка начинается? А если эту с ошибкой на другой комп?
Может в контейнере БД что-то съезжает? смотри мой самплес выше - я ж не просто так 10 проходов с игнорированием ошибок делаю. Их там столько разных вылазит, что обрабатывать замучишься.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Улет индекса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]