|
Блокировка таблицы "журналы" - как узнать, кто блокирует? | ☑ | ||
---|---|---|---|---|
0
profik777
26.11.08
✎
15:33
|
Блокировка таблицы "журналы" - как узнать, кто блокирует???
|
|||
1
ДенисЧ
26.11.08
✎
15:34
|
в блокировках sql-сервера
|
|||
2
Mikeware
26.11.08
✎
15:34
|
посмотреть, кто в блокировке на запись к файлику 1sjourn.$lk
|
|||
3
Стрелок
26.11.08
✎
15:35
|
блокировка просиходит в момент записи документа и его проведения. вводи глобальный список и пихай туда юзеров в начале проведения и удаляй после окончания
|
|||
4
profik777
26.11.08
✎
15:39
|
to ДенисЧ :
как посмотреть на сервере?? делаю exec sp_who 'active' но как узнать, кто заблокировал именно эту таблицу??? |
|||
5
profik777
26.11.08
✎
15:41
|
to Стрелок - это в модуле проведения КАЖДОГО документа сделать нужно???
|
|||
6
ДенисЧ
26.11.08
✎
15:42
|
sp_lock даст spid, а по нему из sp_who уже понимать дальше.
|
|||
7
Mikeware
26.11.08
✎
15:43
|
(4) запросом к syslocks. Только ты получишь в лучшем случае имя хоста, с которого запущен процесс... А для ассоциации с именем юзверя придется табличку отдельную заводить, и при входе писать туда pid и имя...
|
|||
8
profik777
26.11.08
✎
16:02
|
а как по objID понять, какая именно таблица заблокирована?
|
|||
9
ДенисЧ
26.11.08
✎
16:04
|
А может, ты всё-таки почитаешь доку?
|
|||
10
profik777
26.11.08
✎
16:05
|
почитаю, если подскажете, какую. Просто SQL не в моей эпархии, хотя интересно. Нужно СРОЧНО решить проблему
|
|||
11
ДенисЧ
26.11.08
✎
16:06
|
пуск - программы - ms sql server - book online
и там поиск по sp_lock |
|||
12
Fragster
гуру
26.11.08
✎
16:07
|
(10) мужик, ты бы пилу наточил! - некогда, пилить надо!
|
|||
13
profik777
26.11.08
✎
16:09
|
:-)
|
|||
14
profik777
26.11.08
✎
16:16
|
согласно доков делаю это:
USE MyBase; GO SELECT DISTINCT OBJECT_NAME(object_id) FROM master.sys.objects; GO Выдает: Invalid object name 'master.sys.objects'. |
|||
15
ДенисЧ
26.11.08
✎
16:17
|
master..sysobjects
|
|||
16
profik777
26.11.08
✎
16:19
|
Invalid object name 'master.sysobjects'.
|
|||
17
profik777
26.11.08
✎
16:20
|
заработало
|
|||
18
profik777
26.11.08
✎
16:28
|
только NULL выдает. А мне имя таблицы нада
|
|||
19
profik777
26.11.08
✎
16:38
|
помогите плиз
|
|||
20
ДенисЧ
26.11.08
✎
16:41
|
ЧТо у тебя не работает? из sp_lock получаешь objid, с ним лезешь в sysobjects (своей базы, не master'овой) - там name - имя таблицы.
|
|||
21
КонецЦикла
26.11.08
✎
16:46
|
(12) Хорошая притча, я ее диру рассказывал :)
|
|||
22
profik777
26.11.08
✎
16:58
|
to ДенисЧ
не могу получить name таблицы USE MyBase; GO SELECT DISTINCT OBJECT_NAME(85575343) FROM master..sysobjects; GO выдает NULL |
|||
23
ДенисЧ
26.11.08
✎
17:00
|
(20) " ним лезешь в sysobjects (своей базы, не master'овой) " (с) Я, любимый.
|
|||
24
ДенисЧ
26.11.08
✎
17:00
|
(23) -> (22)
|
|||
25
profik777
26.11.08
✎
17:08
|
USE MyBase;
GO SELECT DISTINCT OBJECT_NAME(85575343) FROM MyBase..sysobjects; GO выдает NULL |
|||
26
ДенисЧ
26.11.08
✎
17:11
|
select name from sysobjects where id = 85575343
|
|||
27
profik777
26.11.08
✎
17:22
|
если заменяю
SELECT DISTINCT OBJECT_NAME(85575343) FROM MyBase..sysobjects; на select name from sysobjects where id = 85575343 Выдает пустой отчет |
|||
28
ДенисЧ
26.11.08
✎
17:24
|
такой отчёт, значит.
|
|||
29
profik777
26.11.08
✎
17:25
|
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
Смотрящий от 1С
26.11.08
✎
17:30
|
ИМХО Ваши руки не для скуки. А как насчет дедовского способа.
ЕМ Management- Current Activity - Lock/Object и смотрим кто нашу таблицу 1sjourn держит |
|||
31
profik777
26.11.08
✎
17:35
|
дело в том, что там только блокировки типа DB, а мою блокировку TB там почему-то не показывает, хотя sp_lock ее выдает
|
|||
32
profik777
26.11.08
✎
17:36
|
mode IS
остальные mode S - они показываются |
|||
33
profik777
26.11.08
✎
17:37
|
извините, не ТВ, а ТАВ
|
|||
34
Смотрящий от 1С
26.11.08
✎
17:48
|
Там показывается не с изменениями а делается снимок на момент времени. Если блокировки нет значит ее нет. "Ты видишь суслика? Нет. И я нет. А он есть..." (С) ДМБ
|
|||
35
profik777
26.11.08
✎
18:18
|
Заблокировал табличку в тестовой базе. Кроме меня в ней никто не сидит.
sp_lock выдает блокировку, Enterprise Manаger - нет |
|||
36
Кириллка
26.11.08
✎
18:36
|
(0)Нужно создать эту хранимую процедуру:
USE master GO CREATE PROC sp_DBLocks @DBNameIn sysname = NULL, @ObjName sysname = NULL WITH RECOMPILE 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 DECLARE @cmd varchar(1000) DECLARE @DBName sysname -- If no database was supplied, then assume current database SELECT @DBName = ISNULL(@DBNameIn, DB_NAME()) -- Verify that the supplied database exists IF NOT EXISTS (SELECT * FROM master.dbo.sysdatabases (NOLOCK) WHERE Name = @DBName) BEGIN RAISERROR(15010,1,1,@DBname) WITH SETERROR RETURN 15010 END -- 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, substring (v.name, 1, 4) As Type, substring (rsc_text, 1, 16) as Resource, substring (u.name, 1, 8) As Mode, substring (x.name, 1, 5) As Status FROM master.dbo.syslockinfo sli (NOLOCK) JOIN master.dbo.spt_values v (NOLOCK) ON sli.rsc_type = v.number AND v.type = ''LR'' JOIN master.dbo.spt_values x (NOLOCK) ON sli.req_status = x.number AND x.type = ''LS'' JOIN master.dbo.spt_values u (NOLOCK) ON sli.req_mode + 1 = u.number AND u.type = ''L'' JOIN master.dbo.sysdatabases sd (NOLOCK) ON sli.rsc_dbid = sd.dbid JOIN ' + @DBName + '.dbo.sysobjects so (NOLOCK) ON sli.rsc_objid = so.id WHERE sd.name = ''' + @DBName + '''' -- 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
Кириллка
26.11.08
✎
18:39
|
(35)а каким образом ты заблокировал таблицу?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |