powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Организация блокировок ручками.
16 сообщений из 16, страница 1 из 1
Организация блокировок ручками.
    #32074945
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень хотелось бы организовать блокировки не встроенными возможностями SQL server, а на уровне "клиента", т.е. блокировать не записи/таблицы и дт, а документы типа Чертеж,СбороСварочнаяМарка, Список оборудования чертежа и тд. Никаких оптимистических и прочек блокировок не надо. Нужно только организовать что-то вроде "Этот объект недоступен так как с ним работает пользователь такой-то". Вроде бы ничего сложного.
Но есть изюминка - все клиенты, а это разнотипные приложения, с разных машин большой сети, в которой любой пользователь может работать с любой машины, конектятся к SQL Server под одним логином.
Поэтому завел отдельную таблицу, в которую пишу при запуске клиентских приложений: Имя пользователя (определяю его средствами windows - т.е. средствами клиента.), Имя машины, Время подключения.
SPID в эту таблицу не пишу, потому как клиентские приложения бывают отсоединяются, а затем вновь присоединяются к SQL Server тем самым меняют SPID.
Отдельно веду таблицу блокировок, т.е. такой то пользователь заблокировал чертеж такой-то, и список оборудования такой-то. И вроде бы все хорошо.

Но в определенный момент на клиенте случается или ошибка, или сбой питания, или умелые ручки нажали Reset и блокировки не убираются ;).

Сломал голову по каким - же признакам определять что блокировку можно снять.

Подскажите пожалуйста, если кто уже ломал голову над этим.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32074958
Kilroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть интересный столбец в таблице master..sysprocesses - называется
NETADDRESS, это есть MAC адрес сетевой карты компьютера пользователя.
Его можно использовать и для блокировок и контроля за случайными отключениями.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32074966
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, но совершенно забыл написать что ситуация усложняется тем что ряд пользователь работает с программой запуская их на terminal server, таким образом имея одинаковое имя машины, сетевой адрес, и отличаясь только Именем пользователя.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32074993
Kilroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае определить и снять "дохлую" блокировку можно только по данным, которые идентифицируют коннект, то есть по таблице sysprocesses.
Или как вариант - запоминать на клиенте старый @@spid и при переподключении к серверу апдейтить таблицу блокировок, и при ее организации использовать именно @@spid.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075000
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp_getapplock
sp_releaseapplock
?
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075011
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp_getapplock в данном случае не подходит, так как ни о какой транзакции речь идти не может. Блокировка устанавливается когда один из клиентов редактирует какую-нибудь сущность. И снимаются когда он заканчивает. Во время редактирования может произойти обеденный перерыв, или просмотр вспомогательного отчета, или что нибудь еще...
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075026
Merle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитай доку внимательно, там транзакции не обязательны...
Если указать тип "session" то блокировка продержится до тех пор пока активен коннект или пока наложивший сам ее не снимет, это ровно то что тебе нужно.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075036
Kilroy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Merle

Так у них такое приложение, которое не держит коннект, а открывает и закрывает его много раз, и при этом еще какие-то ресурсы должно держать.
АРМ'у можно посочувствовать...
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075054
Merle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, я так понял, что если клиент отсоединился, значит блокировку нужно снять... Иначе проблем нет, ну нажал ресет, перезагрузился, залез обратно доделал все что надо и снял блокировку.
Или я чего-то не понимаю...
Если бы при сознательном отключении коннекта блокировка не снималась, то проблема с ресетом бы не стояла, точнее это был бы другой порядок малости, по сравнению с тем количеством юзеров, которые пошли пить кофе и забыли, что под них ресурс зарезервирован.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075067
Фотография APM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное непонятно выразил мысль. Блокировку надо снимать только когда на клиенте была сознательно запущена процедура "деблокировки", или когда он "отсоединился по RESET", но во время работы клиент может отсоединяться и вновь присоединяться к бд. Вопрос то собственно в том и есть как определять что он "отсоединился по RESET".
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075090
Merle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему тогда если клиент отсоединился "по ресет" он не может подсоединиться опять и снять блокировку? Какая разница, то он покурить пошел, а то ресет нажал... Сигарета 7 минут в среднем, а ресет как правило быстрее ;))
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075134
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто завести отдельное поле в головной таблице - признак блокировки? Или нужно обязательно имя пользователя? Тогда если только с клиента передавать
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075157
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я лично такое никогда не делал, но мне кажется, что надо в таблице блокировок еще и держать поле, в которое бы ставилось время, до которого блокировка действительна. Блокирующая программа должна это время периодически корректировать (т.е. увеличивать). Т.е. допустим открывается документ, открывается блокировка, ставится врямя окончания блокировки: текущее время + 1 минута. Если документ до этого времени закончил редактироваться - блокировка снимается, если нет - программа должна чуть раньше окончания времени блокировки его подправить, увеличив еще на минуту.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075195
Фотография AnS1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в sap R/3 сделано следующим образом
объявляется объект блокировки Создаются (на автомате) 2 функции:
DEQUEUE_<имя объекта> - блокировать
ENQUEUE_<имя объекта> - снять блокировку

для ведения используется обычная таблица с ключом вроде
<объект блокировки> -<значение объекта > - <пользователь > -
<статус блокировки>- на чтение/на запись

при обращении пользовательской программы к данным объекта блокировки происходит тривиальный select (ну, т.е. в sap есть спец. оператор) по данной таблице. Если блокировка имеется - то ... программист сам решает, что ему делать - прервать обработку или нет...

коннект к SQL серверу только один - от application server. Естественно, последний обрабатывает все данные по пользователям/сеансам.

Резюмируя, если не лень, то следует использовать application server как для контроля сеансов, так и для блокировок на объекты пользовательского уровня.
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075236
Фотография Nickolay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня было что-то подобное. Вышел из положения следующим образом: при старте программа разблокирует все заблокированные ей объекты. Таким образом если программа "завершилась неожиданно", все оставшиеся после нее объекты будут сняты при ее перезапуске. Проблема, однако не решается при полном крахе компьютера, когда последующий перезапуск невозможен :(
...
Рейтинг: 0 / 0
Организация блокировок ручками.
    #32075316
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нужно 100% гарантия снятия блокировок и отсутствие гемора - трех-звенка то-что доктор прописал....
в принципе можно и внутри сервера все организовать ... но при периоде тайм аута в 1-5 минут нагрузка на сервер будет большая....
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Организация блокировок ручками.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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