:: Visual Foxpro, Foxpro for DOS
Порча таблиц
FaustGreen
Автор

Сообщений: 116
Дата регистрации: 26.06.2023
Есть задача расположенная на сети, периодически портятся файлы *.dbf (table is corrupted).
При этом часто на компе, где работает пользователь, всплывает окошко виндусовское - "Ошибка отложенной записи".

Может кто сталкивался с ней и как решали проблему ?

Пока предположения такие: при записи данных в таблицу на сети данные сначала как то кэшируются в памяти, а после происходит попытка записи (неудачная). Смотрел файлы в hex editor-е, там получается что вначале идут байты с описанием таблицы и байт отвечающий за количество записей хранит например значение 40, а самих данных только на 39 записей (размер блока данных/размер одной записи). Т.е. получается при записи успевается измениться счетчик записей, потом идет обрыв, и сами данный по следующей строке данных не успевают записаться.

Вот почему идет этот обрыв? Если из-за кеширования, то можно ли им управлять средствами Foxpro? Если это виндовые заморочки, можно ли их там как то отключить (убрать кеширования для таблиц приложения)?



Исправлено 1 раз(а). Последнее : FaustGreen, 29.08.23 10:51
Ratings: 0 negative/0 positive
Re: Порча таблиц
FaustGreen
Автор

Сообщений: 116
Дата регистрации: 26.06.2023
И еще вопрос: как программно проверить, что файл испорчен (Corrupted) ?
Ratings: 0 negative/0 positive
Re: Порча таблиц
AndyNigmatec

Сообщений: 1590
Откуда: Волгоград
Дата регистрации: 28.06.2015
На мой взгляд данная проблема скорее всего из-за проблем с сетью/железом ... когда-то давно тоже постоянно сталкивался с таким.
Собственно кардинально решить этот геморой мне удалось только соскочив с dbf в пользу более "взрослых" СУБД, причем это оказалось не так сложно как казалось сначала.

FaustGreen
И еще вопрос: как программно проверить, что файл испорчен (Corrupted) ?

ну я бы попробовал конструкцию с try при открытии, что-то типа такого:

TRY
SELECT 0
USE (lcFile) ALIAS cMyTable SHARED
CATCH
AERROR(a1)
?a1[2]
ENDTRY
Ratings: 0 negative/0 positive
Re: Порча таблиц
Vedmak

Сообщений: 5989
Откуда: CiTY
Дата регистрации: 30.10.2003
Да, но разбор причин поломки надо развить.
Например индексный файл сломался или сам DBF...


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Порча таблиц
FaustGreen
Автор

Сообщений: 116
Дата регистрации: 26.06.2023
Vedmak
Да, но разбор причин поломки надо развить.
Например индексный файл сломался или сам DBF...
Сломался сам dbf. Причина поломки скорее всего, как и написал AndyNigmatec, это проблема с сетью/железом.
Периодичность поломки разная - бывает и два раза за день сломается, а может раз в три месяца.

Из догадок, часто при поломке файла наблюдается окошко ошибка отложеной записи, примерно такое - stevsky.ru.

Иногда коруптяться файлы при выгрузке из 1С в DBF (в этой же сети).
Ratings: 0 negative/0 positive
Re: Порча таблиц
FaustGreen
Автор

Сообщений: 116
Дата регистрации: 26.06.2023
Ну и отлавливать такие ошибки сложновата, как и проверять помогло то или иное действий, так воспроизвести ошибку по желанию не получится.

Я года три назад собирал себе комп. Сразу после сборки полетели BSOD - ы GSOD - ы (Blue screen of death и Green screen of death).
По коду ошибки в интернете нашел кучу статей с примерно таким содержанием:
1) Для устранения ошибки сделайте это.
2) Если не помог пункт 1) выполните этот пункт.
3) Если не помог пункт 2) выполните этот пункт.
4) ...

Ну так вот на устранение этой ошибки потратил где то полгода. Так как выполняешь пункт 1), например, поменять что то в реестре, и ждешь.
Хорошо если ошибка повторяется быстро, и ты понимаешь, что этот пункт не помог.
Но иногда ошибка проявляла себя снова через два месяца (а ты уже думаешь что проблема решилась).

Примерно так же боролся с порчей таблиц:
1) Пробовал разбивать sql запросы на более мелкие.
2) Пробовал менять "update from" на кучу мелки апдейтов.
3) Просил админа посмотреть сеетвые логи (там вроде все ок было).
4) Админ пробовал менять какие то настройки по буферизации.

Пока ничего не помогло.
Ratings: 0 negative/0 positive
Re: Порча таблиц
Владимир Максимов

Сообщений: 14103
Откуда: Москва
Дата регистрации: 02.09.2000
Антивирус еще проверь. Обычно есть возможность добавить исключения, что проверять не надо. Вот папки, где лежат DBF/FPT/CDX надо добавить в исключения антивируса

Но, в общем случае, проблема не имеет решения.

Тут дело в том, как физически происходит блокировка DBF-таблиц. А происходит это путем "сдвига" некой области памяти на 2ГБ. Из-за чего, собственно, и возникло ограничение на размер DBF-таблицы.

Т.е. если блокировка была наложена ("сдвинута" область памяти), но в этот момент что-то произошло, то это потеря информации в этом самом "сдвинутом" блоке. Обычно это и есть одна..две записи

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

Да, можно уменьшить вероятность порчи таблиц, но совсем ее исключить не получится никак. Все-равно периодически таблицы будут "портится"
Ratings: 0 negative/0 positive
Re: Порча таблиц
Vedmak

Сообщений: 5989
Откуда: CiTY
Дата регистрации: 30.10.2003
Да, сетевые проблемы важный момент. Я лишь раз правил заголовки поврежденных DBF-файлов когда волшебным шаманством выявил (не спрашивайте как, сейчас не вспомню), что в хедере DBF-йла счетчик записей отстает от реального. HexEditor помог поправить шапку DBF и приложение узнало файлы. С тех пор строго в SQL ушел, там с транзакционной логикой попроще строить обмен данными с базой.

Да-да, знаю что транзакции есть и для DBF. Но и обувь бывает деревянной, но почему-то все любят "#Adidas" (на это место каждый поставит свою любимую марку ))))) ).


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 30.08.23 21:21
Ratings: 0 negative/0 positive
Re: Порча таблиц
sphinx

Сообщений: 31392
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Цитата:
Но, в общем случае, проблема не имеет решения.

Это да. У нас не коррупт файла, а ошибка (сетевая, понятно, все работает как часики) - на произвольной строчке (GO TOP, SEEK...) - ошибка доступа к файлу. Системщики туповаты, они пальцем в ошибку - это ошибка в программе. На большее не способны. Я могу и сам диагностику сетей провести, толко мне ха это не платят, а учить людей, которые работают рядом - и бесплатно. Увольте. И ЗП другая.

Чвстично решал через TRY.. CATCH/ Там еще раз тот же самое. А циклы, пока не решится проблема - пробовал - зло, так точно не решение. Пишем в окне - КАК произошла проблема, подробности. И вкуда обратиться. Программно проблемы сетей/доступа/роутеров не решаются. И я только часть убрал проблем, но точно не все.
Как начинают какой-то злоипучий поток обновлений баз антивиря, или еще какие регламенты - все, мои падают. Но разбираться им неохота (да и квалификация так себе). Я тоже плечами пожму, с моей стороны пули вылетели. Идите нах.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Порча таблиц
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Vedmak
Да, сетевые проблемы важный момент. Я лишь раз правил заголовки поврежденных DBF-файлов когда волшебным шаманством выявил (не спрашивайте как, сейчас не вспомню), что в хедере DBF-йла счетчик записей отстает от реального. HexEditor помог поправить шапку DBF и приложение узнало файлы. С тех пор строго в SQL ушел, там с транзакционной логикой попроще строить обмен данными с базой.
Да-да, знаю что транзакции есть и для DBF. Но и обувь бывает деревянной, но почему-то все любят "#Adidas" (на это место каждый поставит свою любимую марку ))))) ).

Пользуйтесь кремом марки "Карпаты"! )

я тоже жил и умираю в DBF. Достойная структура для поминания, и упоминания )
железные проблы, по вопросу ТС
Кстати, если сеть "звезда" (прости господи за назвыание, а не токен ринг, тоже прости господи), то разбери и пропаяй (тщательно, с прогревом всего столба контакта)) контакты (на разьеме-втыкалке изернет-кабеля), - помогло оживить несколько неисправных изернет-розеток



Исправлено 3 раз(а). Последнее : of63, 31.08.23 20:19
Ratings: 0 negative/0 positive
Re: Порча таблиц
Burn

Сообщений: 5651
Откуда: Днепр
Дата регистрации: 02.01.2002
Я даже писал простенькую прогу, которая исправляла данную ошибку прямо из Фокса если вылетала ошибка открытия.
Ratings: 0 negative/0 positive
Re: Порча таблиц
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
если "отвалится" сеть на 1 мин, то написать ничего невозможно, в "сетевой" (файл-серверной) проге.
Ratings: 0 negative/0 positive
Re: Порча таблиц
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
где то была утилита исправления заголовка dbf - если счётчик не соответствовал количеству записей
Ratings: 0 negative/0 positive
Re: Порча таблиц
Burn

Сообщений: 5651
Откуда: Днепр
Дата регистрации: 02.01.2002
В свое время сложилось впечатление, что проблема возникала когда таблицы хранились на сетевой машине с виндой а пользователи вместо корректного выхода из фоксовского приложения просто выключали машину. После перехода на новелловский сервер проблема ушла
Ratings: 0 negative/0 positive
Re: Порча таблиц
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
Насколько я помню - проблема была именно из-за свитча и плохих контактов. Но тот топик был времён ethernet.
Ratings: 0 negative/0 positive
Re: Порча таблиц
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Burn
В свое время сложилось впечатление, что проблема возникала когда таблицы хранились на сетевой машине с виндой а пользователи вместо корректного выхода из фоксовского приложения просто выключали машину. После перехода на новелловский сервер проблема ушла

Фокс в принципе надеется на недежиность железа, ОС, сети, в смысле общения с файлами, т.е общается с DBF файловыми ф-иями ОС, причем с нехорошим предположением, что де обращение к "header" открытого фоксом файла даст гарантию, что файл обычно есть. А бывает, что он не есть, ОС возвращает ошибку чнения файла... неизвестно, насколько часто ребята из флкс команды после каждого чтения/ записи в файл (DBF) анализируют ошибку ОС, и что по ней делают...
Уже был разговор, что если каждое общение с средой проверять на ошибку, то программа растет, нечитаемая становится, и просто лень.
Второй механизм отхода от таких ошибок - изобретение протокола общения с БД, вот SQL-драйвер есть... и то он тоже может возвращать ошибку (сервер подзорвали через милисекунду после обращения нампример, что делает ваша программа? анализирует ли вообще ошибку? не у всех и не всегда, мтк
Ratings: 0 negative/0 positive
Re: Порча таблиц
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
alextash
Насколько я помню - проблема была именно из-за свитча и плохих контактов. Но тот топик был времён ethernet.
а щас мы в где?
Ratings: 0 negative/0 positive
Re: Порча таблиц
of63

Сообщений: 25406
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> И еще вопрос: как программно проверить, что файл испорчен
SELE 0
USE файл
IF !USED()
ERROR "Ошибка открытия таблицы &файл"
ENDIF

и более тонкие (соотв размера файла его длине записи * на кол записей физ. размеру, наличию символа 1A, или дате файла (подсунули враги старый файл например)... это "по желанию заказчика" (в разумную меру т.е.)
Ratings: 0 negative/0 positive
Re: Порча таблиц
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
of63
alextash
Насколько я помню - проблема была именно из-за свитча и плохих контактов. Но тот топик был времён ethernet.
а щас мы в где?
Это было 1 Мбит/сек, а сейчас WiFi 6 - 10 ГГбит/сек или Витая пара 8.2 - 40 ГГбит/сек
Ratings: 0 negative/0 positive
Re: Порча таблиц
ssa

Сообщений: 13015
Откуда: Москва
Дата регистрации: 23.03.2005
alextash
of63
alextash
Насколько я помню - проблема была именно из-за свитча и плохих контактов. Но тот топик был времён ethernet.
а щас мы в где?
Это было 1 Мбит/сек, а сейчас WiFi 6 - 10 ГГбит/сек или Витая пара 8.2 - 40 ГГбит/сек
И это все перестало быть ethernet'ом?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


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

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

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