powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / sp_getapplock
2 сообщений из 2, страница 1 из 1
sp_getapplock
    #32038224
al__r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день.

Решился я тут попробовать как работают sp_getapplock.

Например:
Код: plaintext
exec sp_getapplock 'RESOURCE_NAME', 'Exclusive', 'Session'


Далее, смотрим чего получилось:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
spid   dbid   ObjId       IndId  Type Resource         Mode     Status 
 ------ ------ ----------- ------ ---- ---------------- -------- ------ 
 
     51        7             0        0  DB                    S        GRANT
     52        4             0        0  DB                    S        GRANT
     53       12             0        0  DB                    S        GRANT
     53        1      85575343        0  TAB                   IS       GRANT
     53       12             0        0  APP  RESO6c9e30b4     X        GRANT
     54        4             0        0  DB                    S        GRANT


Все замечательно, все правильно. Проблема заключается в том, что получить какую-либо информацию о поставленной блокировке можно только по имени ресурса (в данном примере 'RESO6c9e30b4'), которое вычисляется путем хэширования оригинального имени.

Можно ли каким-либо способом этот хэш вычислить?
...
Рейтинг: 0 / 0
sp_getapplock
    #32038624
Doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо ничего вычислять. Вы как с обычными блокировками работаете? Вот так же и с этими надо. Не забывайте, что есть set lock_timeout.

The LOCK_TIMEOUT setting allows an application to set a maximum time that a statement waits on a blocked resource. When a statement has waited longer than the LOCK_TIMEOUT setting, the blocked statement is canceled automatically, and error message 1222 "Lock request time-out period exceeded" is returned to the application.

However, any transaction containing the statement is not rolled back or canceled by SQL Server. Therefore, the application must have an error handler that can trap error message 1222. If an application does not trap the error, it can proceed unaware that an individual statement within a transaction has been canceled, and errors can occur because statements later in the transaction may depend on the statement that was never executed.

Implementing an error handler that traps error message 1222 allows an application to handle the time-out situation and take remedial action for example, automatically resubmitting the statement that was blocked, or rolling back the entire transaction.

To determine the current LOCK_TIMEOUT setting, execute the @@LOCK_TIMEOUT function, for example:

DECLARE @Timeout int
SELECT @Timeout = @@lock_timeout
SELECT @Timeout
GO

See BOL for further info.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / sp_getapplock
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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