Порча таблиц | |
---|---|
FaustGreen Автор Сообщений: 71 Дата регистрации: 26.06.2023 |
Есть задача расположенная на сети, периодически портятся файлы *.dbf (table is corrupted).
При этом часто на компе, где работает пользователь, всплывает окошко виндусовское - "Ошибка отложенной записи". Может кто сталкивался с ней и как решали проблему ? Пока предположения такие: при записи данных в таблицу на сети данные сначала как то кэшируются в памяти, а после происходит попытка записи (неудачная). Смотрел файлы в hex editor-е, там получается что вначале идут байты с описанием таблицы и байт отвечающий за количество записей хранит например значение 40, а самих данных только на 39 записей (размер блока данных/размер одной записи). Т.е. получается при записи успевается измениться счетчик записей, потом идет обрыв, и сами данный по следующей строке данных не успевают записаться. Вот почему идет этот обрыв? Если из-за кеширования, то можно ли им управлять средствами Foxpro? Если это виндовые заморочки, можно ли их там как то отключить (убрать кеширования для таблиц приложения)? Исправлено 1 раз(а). Последнее : FaustGreen, 29.08.23 10:51 ![]() |
Re: Порча таблиц | |
---|---|
FaustGreen Автор Сообщений: 71 Дата регистрации: 26.06.2023 |
И еще вопрос: как программно проверить, что файл испорчен (Corrupted) ?
![]() |
Re: Порча таблиц | |
---|---|
AndyNigmatec Сообщений: 1481 Откуда: Волгоград Дата регистрации: 28.06.2015 |
На мой взгляд данная проблема скорее всего из-за проблем с сетью/железом ... когда-то давно тоже постоянно сталкивался с таким.
Собственно кардинально решить этот геморой мне удалось только соскочив с dbf в пользу более "взрослых" СУБД, причем это оказалось не так сложно как казалось сначала.
ну я бы попробовал конструкцию с try при открытии, что-то типа такого:
![]() |
Re: Порча таблиц | |
---|---|
Vedmak Сообщений: 5849 Откуда: CiTY Дата регистрации: 30.10.2003 |
Да, но разбор причин поломки надо развить.
Например индексный файл сломался или сам DBF... ------------------ Говорить стоит лишь для тех, кто слушает. ![]() |
Re: Порча таблиц | |
---|---|
FaustGreen Автор Сообщений: 71 Дата регистрации: 26.06.2023 |
Сломался сам dbf. Причина поломки скорее всего, как и написал AndyNigmatec, это проблема с сетью/железом. Периодичность поломки разная - бывает и два раза за день сломается, а может раз в три месяца. Из догадок, часто при поломке файла наблюдается окошко ошибка отложеной записи, примерно такое - stevsky.ru. Иногда коруптяться файлы при выгрузке из 1С в DBF (в этой же сети). ![]() |
Re: Порча таблиц | |
---|---|
FaustGreen Автор Сообщений: 71 Дата регистрации: 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) Админ пробовал менять какие то настройки по буферизации. Пока ничего не помогло. ![]() |
Re: Порча таблиц | |
---|---|
Владимир Максимов Сообщений: 14069 Откуда: Москва Дата регистрации: 02.09.2000 |
Антивирус еще проверь. Обычно есть возможность добавить исключения, что проверять не надо. Вот папки, где лежат DBF/FPT/CDX надо добавить в исключения антивируса
Но, в общем случае, проблема не имеет решения. Тут дело в том, как физически происходит блокировка DBF-таблиц. А происходит это путем "сдвига" некой области памяти на 2ГБ. Из-за чего, собственно, и возникло ограничение на размер DBF-таблицы. Т.е. если блокировка была наложена ("сдвинута" область памяти), но в этот момент что-то произошло, то это потеря информации в этом самом "сдвинутом" блоке. Обычно это и есть одна..две записи Причем следует еще учитывать, что "таблица" - это, в общем случае, не один файл, а комплекс связанных между собой фалов. Мемо-поля, индексы. Соответственно, "испортится" может не только сама таблица, но и индекс или мемо-поле Да, можно уменьшить вероятность порчи таблиц, но совсем ее исключить не получится никак. Все-равно периодически таблицы будут "портится" ![]() ![]() |
Re: Порча таблиц | |
---|---|
Vedmak Сообщений: 5849 Откуда: CiTY Дата регистрации: 30.10.2003 |
Да, сетевые проблемы важный момент. Я лишь раз правил заголовки поврежденных DBF-файлов когда волшебным шаманством выявил (не спрашивайте как, сейчас не вспомню), что в хедере DBF-йла счетчик записей отстает от реального. HexEditor помог поправить шапку DBF и приложение узнало файлы. С тех пор строго в SQL ушел, там с транзакционной логикой попроще строить обмен данными с базой.
Да-да, знаю что транзакции есть и для DBF. Но и обувь бывает деревянной, но почему-то все любят "#Adidas" (на это место каждый поставит свою любимую марку ))))) ). ------------------ Говорить стоит лишь для тех, кто слушает. Исправлено 1 раз(а). Последнее : Vedmak, 30.08.23 21:21 ![]() |
Re: Порча таблиц | |
---|---|
sphinx Сообщений: 30872 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Цитата: Это да. У нас не коррупт файла, а ошибка (сетевая, понятно, все работает как часики) - на произвольной строчке (GO TOP, SEEK...) - ошибка доступа к файлу. Системщики туповаты, они пальцем в ошибку - это ошибка в программе. На большее не способны. Я могу и сам диагностику сетей провести, толко мне ха это не платят, а учить людей, которые работают рядом - и бесплатно. Увольте. И ЗП другая. Чвстично решал через TRY.. CATCH/ Там еще раз тот же самое. А циклы, пока не решится проблема - пробовал - зло, так точно не решение. Пишем в окне - КАК произошла проблема, подробности. И вкуда обратиться. Программно проблемы сетей/доступа/роутеров не решаются. И я только часть убрал проблем, но точно не все. Как начинают какой-то злоипучий поток обновлений баз антивиря, или еще какие регламенты - все, мои падают. Но разбираться им неохота (да и квалификация так себе). Я тоже плечами пожму, с моей стороны пули вылетели. Идите нах. ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Порча таблиц | |
---|---|
of63 Сообщений: 24807 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Пользуйтесь кремом марки "Карпаты"! ) я тоже жил и умираю в DBF. Достойная структура для поминания, и упоминания ) железные проблы, по вопросу ТС Кстати, если сеть "звезда" (прости господи за назвыание, а не токен ринг, тоже прости господи), то разбери и пропаяй (тщательно, с прогревом всего столба контакта)) контакты (на разьеме-втыкалке изернет-кабеля), - помогло оживить несколько неисправных изернет-розеток Исправлено 3 раз(а). Последнее : of63, 31.08.23 20:19 ![]() |
Re: Порча таблиц | |
---|---|
Burn Сообщений: 5631 Откуда: Днепр Дата регистрации: 02.01.2002 |
Я даже писал простенькую прогу, которая исправляла данную ошибку прямо из Фокса если вылетала ошибка открытия.
![]() |
Re: Порча таблиц | |
---|---|
of63 Сообщений: 24807 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
если "отвалится" сеть на 1 мин, то написать ничего невозможно, в "сетевой" (файл-серверной) проге.
![]() |
Re: Порча таблиц | |
---|---|
alextash Сообщений: 2280 Откуда: НСК Дата регистрации: 03.05.2006 |
где то была утилита исправления заголовка dbf - если счётчик не соответствовал количеству записей
![]() |
Re: Порча таблиц | |
---|---|
Burn Сообщений: 5631 Откуда: Днепр Дата регистрации: 02.01.2002 |
В свое время сложилось впечатление, что проблема возникала когда таблицы хранились на сетевой машине с виндой а пользователи вместо корректного выхода из фоксовского приложения просто выключали машину. После перехода на новелловский сервер проблема ушла
![]() |
Re: Порча таблиц | |
---|---|
alextash Сообщений: 2280 Откуда: НСК Дата регистрации: 03.05.2006 |
Насколько я помню - проблема была именно из-за свитча и плохих контактов. Но тот топик был времён ethernet.
![]() |
Re: Порча таблиц | |
---|---|
of63 Сообщений: 24807 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Фокс в принципе надеется на недежиность железа, ОС, сети, в смысле общения с файлами, т.е общается с DBF файловыми ф-иями ОС, причем с нехорошим предположением, что де обращение к "header" открытого фоксом файла даст гарантию, что файл обычно есть. А бывает, что он не есть, ОС возвращает ошибку чнения файла... неизвестно, насколько часто ребята из флкс команды после каждого чтения/ записи в файл (DBF) анализируют ошибку ОС, и что по ней делают... Уже был разговор, что если каждое общение с средой проверять на ошибку, то программа растет, нечитаемая становится, и просто лень. Второй механизм отхода от таких ошибок - изобретение протокола общения с БД, вот SQL-драйвер есть... и то он тоже может возвращать ошибку (сервер подзорвали через милисекунду после обращения нампример, что делает ваша программа? анализирует ли вообще ошибку? не у всех и не всегда, мтк ![]() |
Re: Порча таблиц | |
---|---|
of63 Сообщений: 24807 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
а щас мы в где? ![]() |
Re: Порча таблиц | |
---|---|
of63 Сообщений: 24807 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> И еще вопрос: как программно проверить, что файл испорчен
SELE 0 USE файл IF !USED() ERROR "Ошибка открытия таблицы &файл" ENDIF и более тонкие (соотв размера файла его длине записи * на кол записей физ. размеру, наличию символа 1A, или дате файла (подсунули враги старый файл например)... это "по желанию заказчика" (в разумную меру т.е.) ![]() |
Re: Порча таблиц | |
---|---|
alextash Сообщений: 2280 Откуда: НСК Дата регистрации: 03.05.2006 |
Это было 1 Мбит/сек, а сейчас WiFi 6 - 10 ГГбит/сек или Витая пара 8.2 - 40 ГГбит/сек ![]() |
Re: Порча таблиц | |
---|---|
ssa Сообщений: 12962 Откуда: Москва Дата регистрации: 23.03.2005 |
И это все перестало быть ethernet'ом? ------------------ Лень - это неосознанная мудрость. ![]() |
© 2000-2023 Fox Club  |