Автор | Сообщение |
|
| |
Пост N: 14
Зарегистрирован: 02.10.08
|
|
Отправлено: 22.10.08 16:46. Заголовок: Мусор в базах...
Может кто сталкивался с такой гадостью: Задачка работает у пользователей (все базы в shared режиме, но чаще всего на 1 компе у каждого). Базы без индексов не открываются. И иногда создается такое впечатление, что кто-то или что-то дописывает какой-то мусор (типа куски памяти, куски баз, куски индексов) в конец базы. ПРИЧЕМ! индексы при этом не трогаются, остаются красивыми. В итоге при следующем входе в программу все работает корректно, к базе добавляются строки, мусор не виден до первой переиндексации. Понимаю, что сумбурно все объяснил, но может у кого какие мысли будут? Пы.Сы. XHarbour 0.99.51 + FWH 2.5
|
|
|
Ответов - 36
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 1029
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.10.08 17:00. Заголовок: Воспользуйся поиском..
Воспользуйся поиском по слову мусор
|
|
|
|
| Администратор
|
Пост N: 1012
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.10.08 17:17. Заголовок: Возможно, при аварий..
Возможно, при аварийном завершении программы увеличивается размер файла. При этом в конце файла оказываются произвольные данные. А количество записей в заголовке dbf соответствует размеру файла ? Это можно увидеть только в момент появления мусора, только этот момент надо поймать
|
|
|
|
| постоянный участник
|
Пост 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-ника" идет проверка. Если не соответствует контрольная сумма записи, то это мусор и запись удаляется. У меня тоже такой мусор появляется, только за компами в других городах не уследишь...
|
|
|
|
| |
Пост N: 15
Зарегистрирован: 02.10.08
|
|
Отправлено: 23.10.08 08:46. Заголовок: СпасиБо всем! Буду д..
СпасиБо всем! Буду думать над Вариантом с контрольной суммой. У себя я сделал пунктик "Проверка корректности баз". Там открываю базу как двоичный файл и чешу по каждой записи проверяя чтобы в числовых полях и датах стояли цифры. Но этот способ выбраковки не идеален Вообще-то я заметил такую штуку: Программа стоит где-то в 20 разных местах у разных пользователей. Так вот есть люди, у которых вообще никогда такой гадости не появляется, хотя базы у них одни из самых больших. Может все-таки дело в операционках? В основном такое бывает если работают на W98 ...
|
|
|
|
| |
Пост N: 16
Зарегистрирован: 02.10.08
|
|
Отправлено: 23.10.08 09:54. Заголовок: Провел такой Експери..
Провел такой Експеримент: Вышел из программы. Вручную дописал к базе двоичный мусор. Зашел в программу. В итоге все красиво. Число записей в заголовке кривое, но прога работает без проблем как часы. Причем разные dbвьюеры реагируют по-разному: кто предлагает скорректировать заголовок, а кто работает без вопросов (и показывает мусор в конце). А вообще, те у кого такое возникает, на чем программы у вас писаны? Прросто охота локализовать проблемму: может дело в хХарборе, может в конкретной его версии???
|
|
|
|
| постоянный участник
|
Пост N: 711
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.10.08 18:48. Заголовок: Loach пишет: А вооб..
Loach пишет: цитата: | А вообще, те у кого такое возникает, на чем программы у вас писаны? |
| У меня такое бывало и на Клипере и на хХарборе. И на слабых машинах и на хороших. И под 98 и под ХР. Вирус тоже вносит вклад в дописывание мусора. Статистика: на 30 различных компов у 2-3 машины образуются такой мусор в файлах.
|
|
|
|
| постоянный участник
|
Пост N: 129
Зарегистрирован: 13.10.05
|
|
Отправлено: 25.10.08 21:12. Заголовок: У меня было на хХарб..
У меня было на хХарборе при некоректном завершении работы на рабочей станции. Практически исчезло после того как, на рабочих станциях при операции добавления записей стал использовать локальную базу рабочей станции. После того как завершал редактирование - добавлял в основную. Но клиппер такого не было в таком виде. Там свои заморочки
|
|
|
|
| постоянный участник
|
Пост N: 4649
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.01.16 11:55. Заголовок: Всем привет ! WinXP ..
Всем привет ! WinXP в качестве сервера, доп. станция тоже ХР. Вот такой мусор в базе: Поле IDZ тип "+" Как избавляться от мусора в базе ?
|
|
|
|
| постоянный участник
|
Пост N: 1182
Зарегистрирован: 27.01.07
|
|
Отправлено: 19.01.16 12:57. Заголовок: Andrey пишет: Как и..
Andrey пишет: цитата: | Как избавляться от мусора в базе ? |
| Устранить причину(ы) его появления.
|
|
|
|
| постоянный участник
|
Пост N: 4651
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.01.16 13:04. Заголовок: PSP пишет: Устранит..
PSP пишет: цитата: | Устранить причину(ы) его появления. |
| А какие причины могут быть ? Комп далеко, в другом городе. Могу удаленно подключиться к нему. А что править не знаю...
|
|
|
|
| постоянный участник
|
Пост N: 1183
Зарегистрирован: 27.01.07
|
|
Отправлено: 19.01.16 13:09. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А какие причины могут быть ? |
| Обычно - это аварийное/некорректное завершение программы. Очень часто из-за внезапного отключения питания компа. Ничего нового.
|
|
|
|
|
| постоянный участник
|
Пост N: 4652
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.01.16 13:21. Заголовок: А какой тогда алгори..
А какой тогда алгоритм перезаписи базы можно сделать ?
|
|
|
|
| |
Пост 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.
|
|
|
|
| постоянный участник
|
Пост N: 4653
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.01.16 18:35. Заголовок: Т.е. если специально..
Т.е. если специально ставить ПЕРВОЕ поле в базе типа "+" (AutoInc), то всегда можно будет из битой базы восстанавливать правильную базу ? последовательно копирую записи до номера 3615, потом игнорирую все остальные записи до номера 3616 и далее копирую по порядку. Так ?
|
|
|
|
| |
Пост N: 5461
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.01.16 18:40. Заголовок: Andrey Да тут дело ..
Andrey Да тут дело такое , даже если в поле IDZ будет правильная цифирь , то это не факт что значения в остальных полях корректны.
|
|
|
|
| |
Пост N: 747
Зарегистрирован: 20.02.11
|
|
Отправлено: 19.01.16 20:17. Заголовок: Andrey пишет: А алг..
Andrey пишет: цитата: | А алгоритм копирование правильных записей - это простое (последовательное) копирование полей по AutoInc с правильным номером ? |
| COPY TO для записей у которых поле таймштамп не ноль ( именно время а не дата )
|
|
|
|
| постоянный участник
|
Пост N: 4654
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.01.16 11:22. Заголовок: Haz пишет: для запи..
Haz пишет: цитата: | для записей у которых поле таймштамп не ноль ( именно время а не дата ) |
| А как будет это выглядеть ? Синтаксис дай пожалуйста... Не работал ещё с такими полями...
|
|
|
|
| |
Пост N: 748
Зарегистрирован: 20.02.11
|
|
Отправлено: 20.01.16 11:45. Заголовок: Andrey пишет: Не ра..
Andrey пишет: цитата: | Не работал ещё с такими полями... |
| Решил на клиенте поупражняться ? Преобразуй в строку cStr := hb_TToC( tDateTime, "", "HHMMSSFFF" ) если в строке одни нули , значит эта запись мусорная с задачей "если в строке одни нули " сам справишься ?
|
|
|
|
| постоянный участник
|
Пост N: 4655
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.01.16 11:50. Заголовок: Haz пишет: с задаче..
Haz пишет: цитата: | с задачей "если в строке одни нули " сам справишься ? |
| Да ! Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 4656
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.01.16 13:49. Заголовок: Не проходит .... Нуж..
Не проходит .... Нужно делать 2 проверки: на IDZ > 0 и TSZ > 0
|
|
|
Ответов - 36
, стр:
1
2
All
[только новые]
|
|