Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Кто заблокировал строку?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
В таблице заблокированны 2 строки. Смотрим с помощью sp_lock вот так:
create table #t (

spid smallint,dbid smallint,ObjId int,IndId smallint,
Type nchar(4),Resource nchar(16),Mode nchar(8),Status nchar(5))

insert into #t exec sp_lock

select #t.*, sp.hostname from #t, Master..SysProcesses as sp
where #t.spid = sp.spid
drop table #t

Вот что получилось:
spid	dbid	ObjId	IndId	Type	Resource		Mode	Status	hostname  

58 10 624877443 1 KEY (0d00bc52ce75) X GRANT Petrov
58 10 624877443 1 PAG 1:158 IX GRANT Petrov
58 10 0 0 DB S GRANT Petrov
58 10 624877443 0 TAB IX GRANT Petrov
62 10 624877443 0 TAB IX GRANT Ivanov
62 10 0 0 DB S GRANT Ivanov
62 10 624877443 1 PAG 1:158 IX GRANT Ivanov
62 10 624877443 1 KEY (0700744e0ee4) X GRANT Ivanov

Теперь, как узнать какая именно строка, кем заблокированна. Т.е. когда
сидоров обращается к заблокированной строке, то что бы ему
говорили "строка заблокированна пользователем Ivanov", если ее
дейстивтельно блокируте Иванов, а не Петров.
6 окт 03, 12:39    [364770]     Ответить | Цитировать Сообщить модератору
 Re: Кто заблокировал строку?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Теперь, как узнать какая именно строка, кем заблокированна.

А почему именно строка? Заблокирована может быть страница, экстент, наконец, вся таблица. Да и зачем это надо тебе? И что значит обращался к заблокированной строке? На чтение, на модификацию?
6 окт 03, 12:44    [364784]     Ответить | Цитировать Сообщить модератору
 Re: Кто заблокировал строку?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Не важно, предположим, что сидоров обращался на модификацию с параметром (nowait). те:
Update table1 set stage=1 where id=@id

Сидоров знает ID строки в таблице. Его мало волнуте заблокированна строка, страница, таблица. Все что интересует Сидорова это кем заблокированна вот это строка, Ивановым или Петровым. Каким spid то есть.
6 окт 03, 13:00    [364833]     Ответить | Цитировать Сообщить модератору
 Re: Кто заблокировал строку?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=50263
6 окт 03, 13:04    [364841]     Ответить | Цитировать Сообщить модератору
 Re: Кто заблокировал строку?  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
--верхний блокирующий процесс для данного spid
--источник уже не помню, но работает
CREATE PROCEDURE iiGetBlockInfo
@BlockedSPID INT
AS

IF EXISTS (SELECT * FROM master.dbo.syslockinfo WHERE req_spid = @BlockedSPID AND req_status = 3)
SELECT
sli1.req_spid AS SPID,
SUBSTRING (u.name, 1, 8) As Mode,
DB_NAME(sli1.rsc_dbid) AS [Database],
OBJECT_NAME(sli1.rsc_objid) AS [Table],
sli1.rsc_Text AS [Resource]
FROM
master.dbo.syslockinfo sli1
JOIN master.dbo.spt_values u ON sli1.req_mode + 1 = u.number AND u.type = 'L'
JOIN master.dbo.syslockinfo sli2 ON sli1.rsc_dbid = sli2.rsc_dbid AND sli1.rsc_objid = sli2.rsc_objid AND sli1.rsc_text = sli2.rsc_text
WHERE
sli2.req_spid = @BlockedSPID AND sli1.req_status = 1 AND sli1.req_spid <> @BlockedSPID AND sli2.req_status = 3

ELSE
SELECT
CAST(1 as int) AS SPID,
SUBSTRING ('', 1, 8) AS Mode,
DB_NAME(NULL) AS [Database],
OBJECT_NAME(NULL) AS [Table],
CAST(NULL AS nchar(32)) AS [Resource]
WHERE 1=2
GO
6 окт 03, 13:07    [364860]     Ответить | Цитировать Сообщить модератору
 Re: Кто заблокировал строку?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
Это все не то.
2tpg Там ничего нет по этой теме. т.е. мне не интересен вариант с отдельной таблицей.
2iSestrin Это процедура выводит то же самое, что и мой код в начале топика.

Мне же нужна связка ID в таблице и Spid который блокирет это строку.
Я так понимаю что все кроется в поле [Resource]. Как его расшифровать?
1:158 - это что?
(0d00bc52ce75) - это что?
6 окт 03, 13:37    [364937]     Ответить | Цитировать Сообщить модератору
 Moжет это может?  [new]
snake
Member

Откуда: Russia, Penza
Сообщений: 2290
sp_getapplock
6 окт 03, 13:39    [364947]     Ответить | Цитировать Сообщить модератору
 Re: Кто заблокировал строку?  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18326
2snake Все прочитал, ничего нету.
6 окт 03, 14:41    [365113]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить