![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избавиться от длительной блокировки записи?
guest_Dmitry © (2004-07-26 18:32:00)Столкнулся с такой проблемой: пользователь открыл запись в базе на редактирование и ушел покурить, кофе попить, либо внес изменения и забыл запостить датасет. В результате запись на длительное время остается заблокированная. Кто как с этим борется, подскажите пожалуйста.
Johnmen (2004-07-27 12:33:00) [1]1. IB не блокировочник, а версионник.
2. Блокировку можно сымитировать.
3. Если этого специально не делать, то можно идти пить кофе/пиво.
4. Пишущая тр-ия короткая и стартует в момент нажатия [Ok]
Sergey13 (2004-07-27 12:19:00) [2]2ИдиотЪ (27.07.04 11:15) [35]
>vecna ©
>спорим, что 2 вариант
Спорим, что и первый не решает проблему из вопроса. 8-)
ИдиотЪ (2004-07-27 11:15:00) [3]vecna ©
спорим, что 2 вариант у тебя тоже может быть неправильным?!
vecna (2004-07-27 11:11:00) [4]мне известны два варианта решения этой проблемы,
первый: select for update (так в oracle) но в твоей СУБД должна быть аналогичная фишка, которая не дает менять _выбранные_ записи другим транзакциям. второй вариант, непосредственно перед update'ом (после перекура), делать select по всем полям (хотя достаточно только по обновляемым), дабы убедиться, что за перекур, твою запись никто не тронул. И при наличии их, update+commit, иначе exception "Минздрав предупреждал"
имхо, другие варианты (если они есть) не правильные =)
Sergey13 (2004-07-27 11:04:00) [5]Мужики, че вы спорите? Какие нафиг блокировки, зачем? Сервак и так не даст изменить заблокированную им самимзапись. Единственное что надо сделать - реакцию на исключительную ситуацию и правильная работа с транзакциями. И нефига давать юзеру возможность редактировать вручную через ДБ-компоненты, особенно в реальномногопользовательских базах.
2guest_Dmitry (26.07.04 18:32)
>пользователь открыл запись в базе на редактирование и ушел покурить
Это проблема не пользователя а программера.
ИдиотЪ (2004-07-27 10:51:00) [6]Anatoly Podgoretsky ©
должны быть, только по-умному и уж позволять чтение блокированных
Соловьев (2004-07-27 10:03:00) [7]
> стоит ReadCommited
этот уровень не держит запись
Anatoly Podgoretsky (2004-07-27 09:59:00) [8]В многопользовательских базах в идеале не должно быть никаких блокировок.
Блокировкам смерть!
ИдиотЪ (2004-07-27 09:22:00) [9]Ega23 ©
насчет блокировок я не совсем понял твою идею
Как узнать, что блокировка жива ? Т.е. сеанс не отвалился, а то будет до скончания века висеть )
Anatoly Podgoretsky (2004-07-26 20:13:00) [10]Для фирмы к тому же экономически выгодно, не думай что я шучу
guest_Dmitry (2004-07-26 20:09:00) [11]Anatoly Podgoretsky © (26.07.04 20:04) [26]
:)
Anatoly Podgoretsky (2004-07-26 20:04:00) [12]guest_Dmitry (26.07.04 18:32)
Лишением премии
guest_Dmitry (2004-07-26 19:55:00) [13]Попробую вопрос тогда по другому сформулировать: как отловить бездействие пользователя в течении какого-то времени?
Esu (2004-07-26 19:52:00) [14]Мне таблица блокировок больше нравится, а то поменял, сохранил, пошел кофе пить. А тут кто-то другой то же самое сделал :)
guest_Dmitry (2004-07-26 19:29:00) [15]в продолжение к guest_Dmitry (26.07.04 19:27) [22]
и чем больше пользователей, том встречаться ситуация стала чаще..
guest_Dmitry (2004-07-26 19:27:00) [16]Ega23 © (26.07.04 19:20) [19]
Так в том то и оно, что нужно сформировать документ на какого-то партнера, а эта запись в справочнике как раз заблокирована.
guest_Dmitry (2004-07-26 19:25:00) [17]Сергей Суровцев © (26.07.04 19:18) [18]
Т.е. включать CachedUpdates?
Была мысль перехватывать нажатие клавиш и движение мыши, и если оных не происходило какое-то время, то делать откат. Но как такое реализовать, если программа, например, неактивна?
Ega23 (2004-07-26 19:21:00) [18]Сергей Суровцев © (26.07.04 19:18) [18]
Тоже вариант. Но в моём проекте совершенно неприемлем, ибо именно НУЖНО показывать оператору КЕМ заблокирована запись.
Ega23 (2004-07-26 19:20:00) [19]оператор может отвлечься на какое-то время, а блокировка то висит....
Да, но висит блокировка только одной записи, а не всей таблицы. Другие-то записи редактировать можно!
Сергей Суровцев (2004-07-26 19:18:00) [20]Лучше всего базу вообще сразу отпускать. Пусть клиент у себя редактирует сколько влезет, хоть повиснет, а воткогда кнопочкой подтвердил изменения, то тогда и в базу. И база целее будет и нервы.