On-line: Andrey, tnsr2, гостей 1. Всего: 3 [подробнее..]
АвторСообщение



Пост N: 14
Зарегистрирован: 02.10.08
ссылка на сообщение  Отправлено: 22.10.08 16:46. Заголовок: Мусор в базах...


Может кто сталкивался с такой гадостью:
Задачка работает у пользователей (все базы в shared режиме, но чаще всего на 1 компе у каждого). Базы без индексов не открываются. И иногда создается такое впечатление, что кто-то или что-то дописывает какой-то мусор (типа куски памяти, куски баз, куски индексов) в конец базы. ПРИЧЕМ! индексы при этом не трогаются, остаются красивыми. В итоге при следующем входе в программу все работает корректно, к базе добавляются строки, мусор не виден до первой переиндексации.
Понимаю, что сумбурно все объяснил, но может у кого какие мысли будут?
Пы.Сы. XHarbour 0.99.51 + FWH 2.5

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 36 , стр: 1 2 All [только новые]


администратор




Пост N: 1029
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.10.08 17:00. Заголовок: Воспользуйся поиском..


Воспользуйся поиском по слову мусор

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1012
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.10.08 17:17. Заголовок: Возможно, при аварий..


Возможно, при аварийном завершении программы увеличивается размер файла. При этом в конце файла оказываются произвольные данные.
А количество записей в заголовке dbf соответствует размеру файла ?
Это можно увидеть только в момент появления мусора, только этот момент надо поймать

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 710
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.10.08 00:07. Заголовок: Смотри: http://clipp..


Смотри:
http://clipper.borda.ru/?1-4-0-00000279-000-0-0-1202064489

Вообще в нормальных прогах (типа БЭСТ или других) предусмотрено поле в базе с контрольной суммой записи.
И при индексации или другой "починки DBF-ника" идет проверка.
Если не соответствует контрольная сумма записи, то это мусор и запись удаляется.

У меня тоже такой мусор появляется, только за компами в других городах не уследишь...


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 02.10.08
ссылка на сообщение  Отправлено: 23.10.08 08:46. Заголовок: СпасиБо всем! Буду д..


СпасиБо всем! Буду думать над Вариантом с контрольной суммой. У себя я сделал пунктик "Проверка корректности баз". Там открываю базу как двоичный файл и чешу по каждой записи проверяя чтобы в числовых полях и датах стояли цифры. Но этот способ выбраковки не идеален
Вообще-то я заметил такую штуку: Программа стоит где-то в 20 разных местах у разных пользователей. Так вот есть люди, у которых вообще никогда такой гадости не появляется, хотя базы у них одни из самых больших. Может все-таки дело в операционках? В основном такое бывает если работают на W98 ...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 02.10.08
ссылка на сообщение  Отправлено: 23.10.08 09:54. Заголовок: Провел такой Експери..


Провел такой Експеримент: Вышел из программы. Вручную дописал к базе двоичный мусор. Зашел в программу. В итоге все красиво. Число записей в заголовке кривое, но прога работает без проблем как часы. Причем разные dbвьюеры реагируют по-разному: кто предлагает скорректировать заголовок, а кто работает без вопросов (и показывает мусор в конце).
А вообще, те у кого такое возникает, на чем программы у вас писаны? Прросто охота локализовать проблемму: может дело в хХарборе, может в конкретной его версии???

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 711
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.10.08 18:48. Заголовок: Loach пишет: А вооб..


Loach пишет:

 цитата:
А вообще, те у кого такое возникает, на чем программы у вас писаны?



У меня такое бывало и на Клипере и на хХарборе.
И на слабых машинах и на хороших.
И под 98 и под ХР.
Вирус тоже вносит вклад в дописывание мусора.
Статистика: на 30 различных компов у 2-3 машины образуются такой мусор в файлах.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 129
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 25.10.08 21:12. Заголовок: У меня было на хХарб..


У меня было на хХарборе при некоректном завершении работы на рабочей станции.
Практически исчезло после того как, на рабочих станциях при операции добавления записей стал использовать локальную базу рабочей станции. После того как завершал редактирование - добавлял в основную.
Но клиппер такого не было в таком виде. Там свои заморочки

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4649
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.01.16 11:55. Заголовок: Всем привет ! WinXP ..


Всем привет !
WinXP в качестве сервера, доп. станция тоже ХР.

Вот такой мусор в базе:



Поле IDZ тип "+"
Как избавляться от мусора в базе ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1182
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.01.16 12:57. Заголовок: Andrey пишет: Как и..


Andrey пишет:

 цитата:
Как избавляться от мусора в базе ?


Устранить причину(ы) его появления.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4651
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.01.16 13:04. Заголовок: PSP пишет: Устранит..


PSP пишет:

 цитата:
Устранить причину(ы) его появления.


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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1183
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 19.01.16 13:09. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А какие причины могут быть ?


Обычно - это аварийное/некорректное завершение программы. Очень часто из-за внезапного отключения питания компа. Ничего нового.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4652
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.01.16 13:21. Заголовок: А какой тогда алгори..


А какой тогда алгоритм перезаписи базы можно сделать ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 746
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.01.16 15:13. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А какой тогда алгоритм перезаписи базы можно сделать ?



Любой алгоритм, какой нравится.
Но прочитав хотя бы ченчлог из харбура перед этим
 
* src/rdd/dbf1.c
* do not copy automatically updated fields when destination area
is not empty
* set DBTF_CPYCTR to indicate that counters should be copied from
source to destination area when original value of automatically
updated fields are transferred
; Now DBF* RDDs in Harbour respects the following rules for record
transfer operations (COPY TO / APPEND FROM) with automatically
updated fields:
- COPY TO transfers original values to destination table and
finally copy counters from the source table to destination one
so autoincrement fields in both tables after next append will be
initialized with the same values regardless of number of copied
records - even if only single record is copied then counters in
destination table will inherit next values for new record from
the source table. Also values of RowVer and ModTime fields are
copied from source to destination table and not updated during
transfer operation.

- APPEND FROM works like COPY TO (original field values and then
counters are copied to destination table) if the source table
supports counters and destination table is empty and FLocked()
or opened in exclusive mode.
If source table does not support counters for given fields, i.e.
it is processed by transfer RDD like DELIM or SDF (RDT_TRANSFER)
or destination table is not empty or opened in shared mode and
FLock is not set when APPEND FROM is executed then automatically
updated fields (counters, RowVer, ModTime) are not copied and
initialized with new values like for each new record added to
destination table.




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4653
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.01.16 18:35. Заголовок: Т.е. если специально..


Т.е. если специально ставить ПЕРВОЕ поле в базе типа "+" (AutoInc),
то всегда можно будет из битой базы восстанавливать правильную базу ?

последовательно копирую записи до номера 3615, потом игнорирую все остальные записи до номера 3616 и далее копирую по порядку. Так ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5461
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.01.16 18:40. Заголовок: Andrey Да тут дело ..


Andrey
Да тут дело такое , даже если в поле IDZ будет правильная цифирь , то это не факт что значения
в остальных полях корректны.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 747
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.01.16 20:17. Заголовок: Andrey пишет: А алг..


Andrey пишет:

 цитата:
А алгоритм копирование правильных записей - это простое (последовательное)
копирование полей по AutoInc с правильным номером ?



COPY TO для записей у которых поле таймштамп не ноль ( именно время а не дата )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4654
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.01.16 11:22. Заголовок: Haz пишет: для запи..


Haz пишет:

 цитата:
для записей у которых поле таймштамп не ноль ( именно время а не дата )



А как будет это выглядеть ?
Синтаксис дай пожалуйста... Не работал ещё с такими полями...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 748
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.01.16 11:45. Заголовок: Andrey пишет: Не ра..


Andrey пишет:

 цитата:
Не работал ещё с такими полями...


Решил на клиенте поупражняться ?

Преобразуй в строку cStr := hb_TToC( tDateTime, "", "HHMMSSFFF" )
если в строке одни нули , значит эта запись мусорная

с задачей "если в строке одни нули " сам справишься ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4655
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.01.16 11:50. Заголовок: Haz пишет: с задаче..


Haz пишет:

 цитата:
с задачей "если в строке одни нули " сам справишься ?



Да !
Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4656
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.01.16 13:49. Заголовок: Не проходит .... Нуж..


Не проходит .... Нужно делать 2 проверки: на IDZ > 0 и TSZ > 0



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 749
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.01.16 14:06. Заголовок: Andrey пишет: Не пр..


Andrey пишет:

 цитата:
Не проходит .... Нужно делать 2 проверки: на IDZ > 0 и TSZ > 0



Задача для школьника , Проверок нужно делать столько, сколько потребуется чтобы поймать все , включая валидные значения ID, даты в полях и пр.
Не нули в значениях времени это не 100% гарантия .
Для первого твого скрина по этой теме пойдет, а дальше ....тут нет телепатов чтобы читать в астрале данные из твоей базы.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4657
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.01.16 15:41. Заголовок: Всё таки самый прост..


Всё таки самый простой способ это моё первое предложение.
по первому полю (AutoInc) последовательное копирование полей с запоминанием номера при разрыве записей
и продолжением копирования.
Ну и доп.проверки по другим полям.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 750
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.01.16 16:02. Заголовок: Andrey пишет: с зап..


Andrey пишет:

 цитата:
с запоминанием номера при разрыве записей


Обычно Autoinc работает примерно так
В заголовке базы храниться последнее значение и при добавлении записи оно инкрементируется.
Если в базе были удаления и паки - то разрывы в нумерации будут 100 % ( автоинк не восполняет дыры )
Andrey пишет:

 цитата:
проверки по другим полям.


Вот это единственный правильный способ.
Как вариант - можно не копировать а удалить мусор по условию и пакануть .


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 185
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 20.01.16 17:08. Заголовок: Какая-то подозритель..


Какая-то подозрительно регулярная порча базы. Портится, судя по скрину,
одно поле, хотя если данные портятся, то крякозябры должны быть во всех
полях, если связано с аварийным завершением. А посмотреть базу, именно
порченные места в WIN кодировке не пробовал ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4658
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.01.16 19:10. Заголовок: nick_mi пишет: Порт..


nick_mi пишет:

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



Сбойные поля все кракозябы:


Смотреть нечего !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5463
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.01.16 22:33. Заголовок: Andrey пишет: Смотр..


Andrey пишет:

 цитата:
Смотреть нечего !



nick_mi пишет:

 цитата:
А посмотреть базу, именно
порченные места в WIN кодировке не пробовал ?



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4659
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.16 11:22. Заголовок: Dima пишет: nick_mi..


Dima пишет:

 цитата:
nick_mi пишет:
цитата:
А посмотреть базу, именно
порченные места в WIN кодировке не пробовал ?



Последнее поле CHUMKVAR на картинке (номер дома, строка).
Ну и что там в ней смотреть ? Кто попробует расшифровать ?

И так везде в битых записях.
Нормальные записи вытащил и всё прекрасно читается.



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 54
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 22.01.16 21:35. Заголовок: А если тупо железо в..


А если тупо железо виновато? Винт сбойный или что-то в этом роде?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4664
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.01.16 21:52. Заголовок: vvv пишет: А если т..


vvv пишет:

 цитата:
А если тупо железо виновато? Винт сбойный или что-то в этом роде?



Да тут много чего может быть. Починил базу, пока проблем нет.
Скорее всего "скачки" электроэнергии, мусор тогда и пишется.

Встречал захломлённую WinXP на которой периодически писался мусор в базы.
Переустановка ХР решило проблему.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 231
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 12.03.20 12:04. Заголовок: Andrey пишет: Вообщ..


Andrey пишет:

 цитата:
Вообще в нормальных прогах (типа БЭСТ или других) предусмотрено поле в базе с контрольной суммой записи.



А есть в Харборе стандартные функции для вычисления контрольной суммой записи?

Для контрольной суммы файла, я знаю, есть hb_md5file и hb_crc32. Или они не только для файлов?
Кстати, чем они отличаются? Я использовал только hb_md5file.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3923
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.20 13:24. Заголовок: rvu пишет: А есть в..


rvu пишет:

 цитата:
А есть в Харборе стандартные функции для вычисления контрольной суммой записи?

Для контрольной суммы файла, я знаю, есть hb_md5file и hb_crc32. Или они не только для файлов?
Кстати, чем они отличаются? Я использовал только hb_md5file.



Стандартной функции нет, но ничего не мешает сделать свою
Мне самому когда-то пришлось при добавлении записи заполнять поле crc32, по конкатенации всех остальных полей записи, преобразованных в строку.
При чтении записи соответственно crc32 проверялось

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6602
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.20 18:41. Заголовок: Можно ещё в базу сам..


Можно ещё в базу самым первым полем поставить
   AADD( aDbf , {"ID"      ,"+",  8, 0 } ) // автоинкремент

тогда при сбоях можно визуально в программе dbedit.exe видеть и удалять "мусор" из базы.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7173
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.03.20 23:24. Заголовок: rvu пишет: А есть в..


rvu пишет:

 цитата:
А есть в Харборе стандартные функции для вычисления контрольной суммой записи?


Pasha пишет:

 цитата:
Стандартной функции нет, но ничего не мешает сделать свою


Сделал или подсказать ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 232
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 15.03.20 09:14. Заголовок: Dima пишет: Сделал ..


Dima пишет:

 цитата:
Сделал или подсказать ?



Выяснил, что hb_crc32 можно не только для файлов использовать, но и для полей. Пока у себя не делал, но даже если бы и сделал, все равно с интересом бы посмотрел другой пример.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7174
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.03.20 11:46. Заголовок: rvu Например так мо..


rvu
Например так можно
 
cc:=""
for i = 1 to fcount()
cc+=hb_valtoexp(fieldget( i )) // или что то другое вместо hb_valtoexp
next
hb_md5(cc) // или hb_crc32(сс)



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 233
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 15.03.20 11:57. Заголовок: А еще из функций CHE..


А еще из функций CHECKSUM() есть.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 36 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 589
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет