Блокировка таблицы "журналы" - как узнать, кто блокирует? #375489


#0 by profik777
Блокировка таблицы "журналы"   -  как узнать, кто блокирует???
#1 by ДенисЧ
в блокировках sql-сервера
#2 by Mikeware
посмотреть, кто в блокировке на запись к файлику 1sjourn.$lk
#3 by Стрелок
блокировка просиходит в момент записи документа и его проведения. вводи глобальный список и пихай туда юзеров в начале проведения и удаляй после окончания
#4 by profik777
to ДенисЧ : как посмотреть на сервере?? делаю exec sp_who 'active' но как узнать, кто заблокировал именно эту таблицу???
#5 by profik777
to Стрелок  - это в модуле проведения КАЖДОГО документа сделать нужно???
#6 by ДенисЧ
sp_lock даст spid, а по нему из sp_who уже понимать дальше.
#7 by Mikeware
запросом к syslocks. Только ты получишь в лучшем случае имя хоста, с которого запущен процесс... А для ассоциации с именем юзверя придется табличку отдельную заводить, и при входе писать туда pid и имя...
#8 by profik777
а как по objID понять, какая именно таблица заблокирована?
#9 by ДенисЧ
А может, ты всё-таки почитаешь доку?
#10 by profik777
почитаю, если подскажете, какую. Просто SQL не в моей эпархии, хотя интересно. Нужно СРОЧНО решить проблему
#11 by ДенисЧ
пуск - программы - ms sql server - book online и там поиск по sp_lock
#12 by Fragster
мужик, ты бы пилу наточил! - некогда, пилить надо!
#13 by profik777
:-)
#14 by profik777
согласно доков делаю это: GO SELECT DISTINCT OBJECT_NAME(object_id) GO Выдает: Invalid object name 'master.sys.objects'.
#15 by ДенисЧ
master..sysobjects
#16 by profik777
Invalid object name 'master.sysobjects'.
#17 by profik777
заработало
#18 by profik777
только NULL выдает. А мне имя таблицы нада
#19 by profik777
помогите плиз
#20 by ДенисЧ
ЧТо у тебя не работает? из sp_lock получаешь objid, с ним лезешь в sysobjects (своей базы, не master'овой) - там name - имя таблицы.
#21 by КонецЦикла
Хорошая притча, я ее диру рассказывал :)
#22 by profik777
to  ДенисЧ не могу получить name таблицы USE MyBase; GO SELECT DISTINCT OBJECT_NAME(85575343) FROM master..sysobjects; GO выдает NULL
#23 by ДенисЧ
" ним лезешь в sysobjects (своей базы, не master'овой) " (с) Я, любимый.
#24 by ДенисЧ
->
#25 by profik777
GO SELECT DISTINCT OBJECT_NAME(85575343) GO выдает NULL
#26 by ДенисЧ
select name from sysobjects where id = 85575343
#27 by profik777
если заменяю SELECT DISTINCT OBJECT_NAME(85575343) FROM MyBase..sysobjects; на select name from sysobjects where id = 85575343 Выдает пустой отчет
#28 by ДенисЧ
такой отчёт, значит.
#29 by profik777
sysobjects Contains one row for each object (constraint, default, log, rule, stored procedure, and so on) created within a database. In tempdb only, this table includes a row for each temporary object Может дело в tempdb ???
#30 by Смотрящий от 1С
ИМХО Ваши руки не для скуки. А как насчет дедовского способа. ЕМ  Management- Current Activity - Lock/Object и смотрим кто нашу таблицу 1sjourn держит
#31 by profik777
дело в том, что там только блокировки типа DB, а мою блокировку TB там почему-то не показывает, хотя sp_lock ее выдает
#32 by profik777
mode IS остальные mode S   - они показываются
#33 by profik777
извините, не ТВ, а ТАВ
#34 by Смотрящий от 1С
Там показывается не с изменениями а делается снимок на момент времени. Если блокировки нет значит ее нет. "Ты видишь суслика? Нет. И я нет. А он есть..." (С) ДМБ
#35 by profik777
Заблокировал табличку в тестовой базе. Кроме меня в ней никто не сидит. sp_lock выдает блокировку, Enterprise Manаger - нет
#36 by Кириллка
Нужно создать эту хранимую процедуру: GO CREATE PROC sp_DBLocks AS /* Sproc Authored and Copyright By Robert M. Vieira, MCDBA 1999, 2000    */ /* This sproc is made availabe for public, non-commercial use              */ /* All other rights reserved                        */ -- Declare holding variable for dynamic query -- If no database was supplied, then assume current database -- Verify that the supplied database exists IF NOT EXISTS (SELECT * FROM master.dbo.sysdatabases (NOLOCK)     -- Build it (and they will come...) SELECT @cmd = '    SELECT    convert (smallint, req_spid) As spid,        rsc_dbid As dbid,        rsc_objid As ObjId,        so.Name As ObjectName,        rsc_indid As IndId,    FROM    master.dbo.syslockinfo sli (NOLOCK)    JOIN    master.dbo.spt_values v (NOLOCK) -- If an object name was supplied, add the piece that will restrict to supplied name -- Otherwise, leave it off to get all objects in the specified DB IF NOT (@ObjName IS NULL)    SELECT @CMD = @CMD +     ' AND    so.Name = ''' + @ObjName + '''' -- I'm Ordering by spid, but by Object Name seems a likely candidate if one wasn't supplied SELECT @CMD = @CMD + '    ORDER BY    spid' -- Create a little header IF @ObjName IS NULL    PRINT 'Resource Locks for Database ' + @DBName ELSE    PRINT 'Resource Locks for Database ' + @DBName + ', Resource ' + @ObjName -- We've built it, time for them to come.... EXEC (@cmd) -- Hopefully, this is zero RETURN @@ERROR GO Потом в БД, которую анализируешь запускаешь ее: EXEC sp_DBLocks Будут названия объектов и spid'ы, по спидам можно получить информацию так: EXEC sp_who2 <твой_spid>
#37 by Кириллка
а каким образом ты заблокировал таблицу?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С