Имя: Пароль:
1C
 
Блокировка таблицы "журналы" - как узнать, кто блокирует?
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)а каким образом ты заблокировал таблицу?
Программист всегда исправляет последнюю ошибку.