powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / блокировказаписи при редактировании, Net Remoting
6 сообщений из 6, страница 1 из 1
блокировказаписи при редактировании, Net Remoting
    #34348612
Помогите11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица в Оракле
Id Name BlockedBy
1 Name1 null
2 Name2 null
3 Name3 null


Есть клиентское приложение (C#) и сервер приложений Net Remoting
Необходимо сделать блокировку записи с Id = 1 для других пользователей при редактировании

Сервер приложений подключается к б.д. делает
select * from Table1 where Id = 1 and BlockedBy is null for update
далее если строка не заблокирована
update Table1 set BlockedBy = User_Id where Id = 1
если заблокирована выдает сообщение об этом

данные селекта отправляются на клиента, связь с б.д. в сервере приложений закрывается

Пользователь меняет данные и отправляет изменения на сервер
Сервер приложений подключается к б.д. делает
update Table1 set Name1 = NewName, BlockedBy = null where Id = 1

Всё это хорошо работает, пока не произошло каких-либо сбоев на клиенте,
после сбоя поле BlockedBy остается заполненым.

Вопрос как сделать блокировку записи при редактировании, чтобы она работала и в случае сбоев?
...
Рейтинг: 0 / 0
блокировказаписи при редактировании, Net Remoting
    #34351331
Мысль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели никто не делал?
...
Рейтинг: 0 / 0
блокировказаписи при редактировании, Net Remoting
    #35068803
Фотография webus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты можешь сделать следующее... подвать операции на сервер приложений пачками. смотри тебе нужно просто знать принял ли клиент данные. т.е. клиент в ответ на данные СП должен послылать что то в виде "ок". если в должное время "ок" от клиента не пришел, значит клиент обвалился. далее делаем либо откат операции, либо что другое.


http://webusblog.blogspot.com/
...
Рейтинг: 0 / 0
блокировказаписи при редактировании, Net Remoting
    #35068974
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А информация, за кем заблокирована запись, критична? Если нет - выкидывайте поле BlockedBy, select ... for update сам накладывает на выбранные строки RX-блокировку. Факт наличия блокировки из других сессий определяется попыткой все тем же select ... for update nowait (да, здесь нужна опция nowait) - при наличии блокировки на запрашиваемый ресурс вылетит ORA-00054: resource busy and acquire with NOWAIT specified.
Поле при сбое остается заполненным из-за того, что сервер фиксирует транзакцию, в ходе которой выполняется update Table1 set BlockedBy = User_Id where Id = 1 - могу посоветовать ловить в нужных местах exceptions на клиенте, и при их наличии снимать флаг блокировки. Но это не самый лучший выход, т.к. блокировать ресурс на время действий пользователя, и снимать блокировку по user events в большинстве случаев просто неприемлемо - представьте себе, что пользователь залочил запись, а потом пошел обедать. Или ушел домой, а наутро уехал в командировку, не разлочив запись. Что будут делать те, кому эта запись нужна? Обычно наложение блокировки, DML, и снятие блокировки по commit/rollback проходят в контексте одной транзакции.
P.S. Если все же интересно, кто удерживает запись - можно обратиться к DBA_DML_LOCKS.
...
Рейтинг: 0 / 0
блокировказаписи при редактировании, Net Remoting
    #35069759
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, он после селекта отключается. Какая там блокировка.
...
Рейтинг: 0 / 0
блокировказаписи при редактировании, Net Remoting
    #35070163
Фотография Ъй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовДык, он после селекта отключается. Какая там блокировка.
Да я все это приекрасно понимаю, поэтому и говорю, что блокировать записи и производить изменения надо в контексте одной транзакции.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / блокировказаписи при редактировании, Net Remoting
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]