Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Вниз

Ошибки в таблицах Paradox   Найти похожие ветки 

 
Дмитрий Татарников   (2004-02-07 02:26) [0]

Люди! ПОМОГИТЕ! Портятся базы данных. Базы составлены на основе таблиц Parapox. В абсолютно непредсказуемые моменты времени в отдельные таблицы закрадывается некая ошибка. При этом программа продолжает замечательно открывать эти таблицы и сохранять в них данные. Наглядно глюк можно увидеть только при ручном пролистывании таблицы. В Delphi это обычно проявляется в виде бесконечного повторения нескольких строк, а в DatabaseDesktop и в самом Paradox - в остановке и зависании таблицы на какой-то записи. Если таблица в базе данных является подчиненной, то заметить этот глюк можно лишь случайно.
А теперь о главном. Если в такой таблице изменять структуру полей, либо просто попытаться сделать "Pack Table" (не важно: Desktop_ом, Paradox_ом или программно) часть данных таблицы исчезает!!! (иногда просто не дает сделать упаковку). Врукопашную через Paradox исправлять можно, но как сделать, чтобы такая хрень вообще не вылазила? А то заказчиков около 70 и по всем не набегаешься.
Вообще такое происходит не часто, но приносит большие проблемы, т.к. упаковка таблиц и изменеие структуры выполняется программно. В результате, о потерянных данных я узнаю когда "поезд ушел".
Люди добрые! Не дайте погибнуть от рук злых пользователей!


 
Johnmen   (2004-02-07 02:46) [1]

Доп.вопрос : многопользовательский доступ ?


 
Anatoly Podgoretsky   (2004-02-07 12:43) [2]

Злые пользователи тут ни причем, выбран не подходящий формат и наверняка еще и БДЕ не простроено должным образом, плюч неверно написана программа.
Теперь тебе ничего не остатеся как бегать по пользователям и говорить. ну чего вы хотите, данный формат не может хорошо работать в многопользовательской среде, меняйте базу. И тут предлагаешь новую замечательную программу со скидками на апгрейд. Нормальный маркетинговый ход.


 
td   (2004-02-07 13:04) [3]


> Anatoly Podgoretsky © (07.02.04 12:43) [2]

Парадокс не подходит для многопользовательской работы?


 
Romkin   (2004-02-07 13:04) [4]

Сначала его убьют, ибо раньше наверняка говорили, что все замечательно работает :)
Были когда-то программки для устранения подобных глюков, найти, думаю, можно.
Выхода тут два:
0. Переписать логику приложения, чтобы этих глюков не было: ручная блокировка и тд...
1. Отказаться от использования программы в режиме, при котором проявляется глюк
2. Написать новую программу, с использованием нормальной БД, а старую забыть как страшный сон %)
http://www.partmotor.com/psites/delphikmb/csvcfs.htm


 
Anatoly Podgoretsky   (2004-02-07 14:36) [5]

td (07.02.04 13:04) [3]
Подходит, но сложности в настройке и проблемы с разрушением, проблемы увеличиваются с ростом пользоваетелей.


 
Дмитрий Татарников   (2004-02-07 18:32) [6]

> Johnmen © (07.02.04 02:46) [1]
> Доп.вопрос : многопользовательский доступ ?


Программа не многопользовательская. Если точнее, в многопользовательском режиме работают не более 5% моих заказчиков.

> Romkin © (07.02.04 13:04) [4]
> Отказаться от использования программы в режиме, при котором проявляется глюк


Программа использует порядка 30 отдельных таблиц. Такая ошибка проявлялась у разных заказчиков в абсолютно различных таблицах. Я НЕ ЗНАЮ когда это выползает.
Переписать программу проблемотично, т.к. она прошла 6-летнюю эволюцию еще от D2.
А программку по исправлению найти можно, но как диагностировать эту ошибку пока данные на месте. Программа-то не ругается?


 
mike-d   (2004-02-07 20:05) [7]

http://www.rksolution.cz - программа исправления таблиц Paradox
http://www.inprise.com/devsupport/bde/files/tutil32d.zip - DLL для нее
http://www.degisy.com/download.php - DegisyDb - компонент DbChk - почитай readme к нему, может это то что тебе надо...

А вообще послушайся советов выше и потихоньку переводи ее на другой движок


 
resident007   (2004-02-07 20:38) [8]

...потихоньку переводи ее на другой движок.

Интересно, а на какой движок если к примеру программа сугубо однопользовательская? На IB/Firebird? Или может быть на Oracle -- для одного пользователя ??!!! По моему абсурд из серии искусство ради искусства.

ИМХО, для однопользовательских систем учета, Paradox оптимален, так как:
1. Наиболее легковесен при инсталляции (установка BDE -- 2 дискеты или включить в setup --- и все!)
2. Для однопользовательской БД -- рекордная скорость практически по всем параметрам (помню когда-то по неопытности поставил для локальной програмки IB5 на Pentium 120 RAM 32. После этого сделал версию на Paradox -- все стало летать)
3. Отличная производительность в паре с родным для него BDE -- нет нужды искать альтернативный движок
4. Таблицы Paradox подлежат криптованию, и хотя недобросовестные создатели библиотеки idpdx32.dll для BDE оставили лазейку в виде пары универсальных паролей, существуют коммерческие патчи, закрывающие эту проблему
5. Беспроблемно работает в сетях до 5-7 пользователей, где нет нужды в выделенном сервере, а вполне оптимальным является файл-сервер.
6. Не самое плохое решение для распределенной БД


 
Romkin   (2004-02-07 21:01) [9]

Именно на Firebird, Yaffil, MSDE и подобные.
И что такого, что на одного пользователя? Есть Firebird Embedded
А вот по твоим пунктам:
1. А FB embedded вполне входит на одну дискету, и инсталлировать не надо, просто кинуть пару файлов в папку приложения :Р
2. Ну я бы так не говорил... Ты к нему что, через TTable обращался? Это называется поиздеваться над сервером. Как раз IB5 на P100 32 у меня летал. Тесты не проводил, но субъективно скорость явно не меньше
3. Попробуй Yaffil Personal через IBX, это быстрее :) MSDE точно быстрее, правда, ему и места много надо. И что значит нет нужды? Связка BDE + Paradox ненадежна, сам убедился. При этом есть такая вешь, как хранимые процедуры, что дает еще большую фору в скорости, на клиента идет только выжимка из данных.
4. Вот с криптованием проблемы, но тоже устранимые
5. Сорри, чушь полная. Лет пять назад это было верно, да и то сомнительно, уж слишком трудоемко писать многопользовательские приложения на файл-сервере по сравнению с сервером БД. А сейчас преимущества бесплатных серверов БД просто подавляют.
6. Тут я вообще молчу... Достаточно просто сравнить встроенный сервер и файлы.
Вот только для перевода приложения с файл-сервера на сервер БД надо его полностью переписать, забыв опыт работы с файл-сервером, там совсем другая кухня.


 
residen007   (2004-02-07 22:08) [10]

Я бы не был столь категоричным. Везде есть свои плюсы и минусы. На какой ширине записи у тебя все летало и сколько записей было?
Со стороны пользователя, по-сравнению с локальными БД, клиент-серверные СУБД не дают никаких преимуществ, а вот для разработчика -- плюсов много. Кроме того Paradox штука капризная, многие заявленные параметры на практике не работают, или работают ненадежно. Иногда портятся заголовки таблиц или сбиваются со счета автоинкрементные поля. По этой причине я отказался от всех механизмов Paradox начиная от ссылочной целостности и заканчивая контролем содержимого полей и умолчаниями. В прикладной программе использую для этих целей только собственноручно написанные функции. Исключения отлавливают все повреждения таблиц и на лету чинят их.

2. Нет, для IB только через Query, а для Paradox -- и то, и другое.
6. Ну и дальше что?

Работают 2 версии программы (firebird/IB и Paradox) для мелких и корпоративных клиентов соответственно, каждая имеет свои преимущества.


 
Romkin   (2004-02-07 23:05) [11]

Вот именно, что Парадокс штука капризная, все ручками.
А ширина записи у меня стандартная, БД же нормализована. Записей, правда, не много было, мегов под сотню-две база.
На стороне пользователя сервер дает одно: надежность. Практически, БД можно обрушить только поломкой оборудования (ну у IB еще когда места нет на диске).
И я вообще не понимаю, как можно перекладывать ссылочную целостность на клиента, чуть что - запускай проверку БД...
Млин... Помню, поставил программу на Парадоксе в подмосковье, так там же электричество в розетке исчезает раза два в неделю. Индексы летят, данные портятся, проверка иногда не помогает...
Кошмар, в общем. Пришлось срочно переносить на IB.
Кстати, если уж пользователю все равно, сервер или нет, то не лучше ли просто взять сервер? И не искать приключений в горе кода для файл-сервера?
Я просто года четыре назад окончательно отказался от файл-сервера в пользу Interbase/Firebird, и вижу только преимущества. У файл-сервера преимуществ перед клиент-сервером уже нет, никаких.
Скорость? Уже компьютер пятилетней давности полностью ее обеспечивает, на типичной БД для одного-пяти пользователей.
Дальше - пожалуйста, ставьте сервер, потянет и пару сотен.


 
mike-d   (2004-02-07 23:23) [12]


> Интересно, а на какой движок если к примеру программа сугубо
> однопользовательская? На IB/Firebird? Или может быть на
> Oracle -- для одного пользователя ??!!! По моему абсурд
> из серии искусство ради искусства.

Зачем же так категорично? Или IB/Firebird/Oracle - единственная альтернатива BDE?
Я к примеру пользуюсь DBISAM - и еще ни разу не пожалел...


 
residen007   (2004-02-07 23:35) [13]

Да это все понятно, согласен. Просто в Paradox-версии есть пара интересных фишек, удобных для пользователя, но считающихся дурным тоном для полноценного клиент-сервера. Например Table c его двунаправленным курсором позволяет пользователю пролистывать всю базу в обеих направлениях, а также возможность альтернативного ввода информации через DBGrid (основной -- форма). Также локальная Paradox-версия позволяет устроить хранилище резервных копий БД за любое число года (посредством компонента ZipTV), c возможностью восстановления состояния БД за любое число года. Кстати, в локальной сети офиса, в случае Paradox-версии используетя не файл-сервер, а распределенная БД. Недостатки конечно очевидны -- период окна между репликациями, но очевидны и преимущества -- суммарная надежность децентрализованной системы, нет нужды в выделенном сервере,а значит сеть не упадет если он накроется, ну и наконец дешевизна решения, что для малого бизнеса не маловажно.


 
Romkin   (2004-02-08 12:05) [14]

Ну что я могу сказать? Пролистывать всю таблицу в полмиллиона строк, на мой взгляд, дурость. Хотя, конечно, это я могу без проблем устроить. Ну а уж ввод через грид - это совсем просто.
Не надо думать, что это привилегия файл-сервера. Репликация? Это модель портфеля, тоже элементарно.
Дело в том, что я пользуюсь TClientDataset, которая превосходит TTable по всем параметрам, назвать хотя бы сортировку по любому набору полей, в том числе и по вычислимым, возможность работы как с сервером (через провайдер), так и с локальной копией данных... И так далее.
Хранилище резервных копий БД? Созданием архивов? Это действительно смешно, тот же Interbase позволяет создавать резервные копии на лету, во время работы с БД. А простое архивирование данных можно сделать с любыми файлами, это нельзя назвать бекапом.
Если нужна именно репликация - тоже пожалуйста, есть и репликаторы, правда, это уже стоит денег.
Вот поэтому я и говорю, что у файл-сервера нет преимуществ, никаких, его можно сделать похожим на клиент-сервер, но это требует весьма значительных усилий, что того не стоит.


 
residen007   (2004-02-08 22:38) [15]

В полмиллиона конечно глупость, а тыщ 30 - 50 max, самое то: клиент всегда прав, и что делать, если порой сам не знает что ищет (речь идет о мультилистинговой системе). Так вот если листать такие объемы, Paradox разика в 2,5 бытрее IB будет (самолично тестил), я уже не говорю о времени массовой закачки. При объемах порядка 500 000 скорость IB почти не изменится, а Paradox само-собой ляжет. Ну так кто этого не знает? А оптимум нужен для конкретной задачи.
Назвать полноценной репликацией модель портфеля -- это очень смело, если не нагло. Там еще очень много от ручек зависит (в смысле не портфеля), особенно если БД распределена между несколькими сотнями клиентов в разных регионах. Тут объемы передачи требовалось настолько минимизировать, что передаются даже не записи, а только их изменившиеся поля.
Насчет резервных копий мне взаимно смешно, особенно "IB на лету". Проблема ведь не в том, что без остановки (для моего бизнеса это не критично), а в объемах и скорости копирования, а также в скорости восстановления состояния БД на любую точку года.
IB, это тоже конечно сделает, если помучаться, вот только намного медленнее, так как сложность полновесной СУБД и зависимости тут не в помощь. (Ну не имел же ты в виду тупое копирование *.gdb, что действительно смешно).


 
Дмитрий Татарников   (2004-02-09 00:45) [16]

Господа Мастера! Сравнение плюсов и минусов различных БД - тема, конечно, интересная. Я сам на распутье: какой движок выбрать, если решусь ломать программу. Но все-таки по моему вопросу: переходить на другую систему БД - единственный выход???


 
residen007   (2004-02-09 01:35) [17]

Инфа о DBISAM меня заинтересовала. Интересно попробовать. Может даст кто-нибудь ссылку для выкачки, а то кроме кряков пока ничего не находится?
Думаю автору ветки это тоже будет интересно.


 
kaif   (2004-02-09 02:44) [18]

Я могу привести ошибку, которую я поймал еще работая с Delphi3, после чего я отказался от Paradox навсегда. Кстати, когда выходили новые версии Delphi или BDE, я прогонял этот свой тест и убеждался, что ошибка эта в ВDE никуда не девается. Она есть даже в Delphi6.
Итак, суть ошибки. Работает 1 юзер:
1. Добавляем запись, пытающуюся нарушить уникальность и вызывающую сообщение о нарушении уникального ключа.
2. Повторяем пункт 1. (не помню, обязателен ли этот шаг)
3. Делаем любой SQL-запрос против этой таблицы. Например, SELECT * FROM MYTABLE.
4. Повторяем пункт 1. Теперь исключительная ситуация почему-то не возникает
5. Закрываем таблицу.
6. Открываем таблицу и получаем сообщение:
"Index is out of date". С таблицей больше работать невозможно. Теперь ее нужно чинить. Как минимум, уничтожать и заново создавать индекс.


 
residen007   (2004-02-09 04:24) [19]

Есть такое, обходится элементарно: по исключению автоматом перестраивается индекс первичного ключа, перед этим (если есть) грохается ошибочная запись. А теперь о смешном: аналогичное бывает и с IB под BDE, хотя последний по моему был ни причем: иногда со счета сбивался генератор и при inserte возникало аналогичное.


 
Дмитрий Татарников   (2004-02-10 13:14) [20]

Из всего вышеизложенного, я понял, что BDE работает не корректно.
В статье Романа Игнатьева (Romkin) говорится о том, что в транзакции Paradox можно изменять не более 256 записей. С такой ошибкой транзакций тоже встречался. Приходилось дробить их на куски, что замедляло работу.
Также подтверждаю на личном опыте, что сбивается нумерация Autoincrement-поля (если еще и ключ по нему стоит, то новую запись не всунуть).
Если "кончился свет", индексы рушатся. Самое противное, когда рушится первичный индекс. Приходится в программе выполнять автосохранение самих таблиц и при необходимости делать восстановление из резервных копий.
Но это все "видимые" ошибки, которые возможно сразу диагностировать и исправлять. В большинстве случаев все это иправляется программным путем вообще без моего участия. Но есть и такие, которые не диагностируются (то, с чего начинался мой вопрос).
Если все так запущено, то подскажите, на какой более надежный движок можно перейти с наименьшими усилиями (чтобы в корне не ломать программу)?
Пытался найти что-то по DBISAM. Пока только кряки и DBISAM Manager. Может кто подскажет где лежит хотя-бы документация?


 
mike-d   (2004-02-10 23:00) [21]

www.elevatesoft.com


 
Anatoly Podgoretsky   (2004-02-10 23:18) [22]

Дмитрий Татарников (10.02.04 13:14) [20]
Не совсем так, это грехи формата, ну и особенности работы файл-серверных баз.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.017 c
1-25785
Ivolg
2004-02-25 11:15
2004.03.09
Буфер


1-25820
Creator
2004-02-25 16:13
2004.03.09
Копирование


14-25915
OlimPer
2004-02-15 20:27
2004.03.09
Олимпиады


1-25804
NPR2
2004-02-25 13:28
2004.03.09
запуск процедуры в определенное время


1-25800
Dim!S
2004-02-26 08:14
2004.03.09
Программный вызов DropDownMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский