Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать, что запись, которую собираешься редактировать, заблокирована / 13 сообщений из 13, страница 1 из 1
02.09.2002, 12:03:31
    #32047382
Серг70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Сразу оговорюсь, специальную таблицу содержащую информацию о блокированных записях держать не хочется
...
Рейтинг: 0 / 0
02.09.2002, 12:07:46
    #32047383
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Здесь посмотри\r
\r
ЗЫ Этот топик находится на 18-20 строк ниже твоего. Может, ПОИСК бы тебе помог?
...
Рейтинг: 0 / 0
02.09.2002, 12:24:46
    #32047389
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Мы используем пару процедур:
sp_getapplock
sp_releaseapplock
Смысл сейчас не вспомню...
по моему устанавливается поименованная блокировка при редактировании, соответственно если редактирование не завершено, установка новой поименованной блокировки не возможна...
...
Рейтинг: 0 / 0
02.09.2002, 12:43:14
    #32047398
Серг70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Я блокирую записи для совместого использования, чтобы другие пользователи могли читать, но не редактировать
Код: plaintext
1.
Begin Transaction
Select * From SP6 With (HoldLock) Where Id= 1 

Другой пользователь должен получить сообщение, что запись заблокирована
Метод, предложенный Dankov
************
В принципе можно получить набор данных, содержажий первичные ключи (или записи целиком), залоченных записей в таблице:
1) отбираем все записи с хинтом NOLOCK
2) отбираем незалоченные записи хинтом READPAST
3) разница между ними и есть залоченные записи.

Есно, это все пишется в один запрос.
************
в моем случае не работает - оба запроса дают один и тот же результат

А прежде чем задать вопрос, конечно же посмотрел все близкие темы ...
...
Рейтинг: 0 / 0
02.09.2002, 18:28:52
    #32047560
Серг70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Почесавшись, родил ХП, определяющую, заблокирована ли запись (@RowId) в таблице (@TableName) для совместного использования процессом, отличным от заданного (@SPId) .
Предполагается, что таблицы имеют поле Id с кластерным индексом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
CREATE PROCEDURE Blk_RowTable
	@SPId Int,@TableName VarChar( 20 ),@RowId Numeric( 12 ),@Cnt_blocked Int Out
AS
Begin

Declare @SrtExec VarChar( 200 ),@ObjId Numeric( 12 ),@IndId Numeric( 12 ),@Resource Char( 16 )

Begin Transaction
Select @SrtExec='Declare @id Numeric(12) Select @id=id From '+@TableName+' With (HoldLock)'+' Where Id='+Str(@RowId)
exec (@SrtExec)
select 	
	@ObjId=rsc_objid,
	@IndId=rsc_indid,
	@Resource=substring (rsc_text,  1 ,  16 )
from 	master.dbo.syslockinfo,
	master.dbo.spt_values v
where   master.dbo.syslockinfo.rsc_type = v.number
	and v.type = 'LR'
	and substring (v.name,  1 ,  4 )='KEY '
	and convert (smallint, req_spid)=@SPId

 --Select 	@ObjId objid,
 
 --	@IndId indid,
 
 --	@Resource Resource,
 
 --	@SPId SPId
 

select @cnt_blocked=count(req_spid) 
from 	master.dbo.syslockinfo,
	master.dbo.spt_values v
where   master.dbo.syslockinfo.rsc_type = v.number
	and v.type = 'LR'
	and @ObjId=rsc_objid
	and @IndId=rsc_indid
	and 'KEY '=substring (v.name,  1 ,  4 )
	and @Resource=substring (rsc_text,  1 ,  16 )
	and convert (smallint, req_spid)<>@SPId
RollBack Transaction
End
GO

Процедура создана на основе sp_lock
Блокировка записей для совместного использования осуществляется командами типа
Код: plaintext
1.
2.
Begin Transaction
Select * From SP6 With (HoldLock) Where Id= 1 

И стало мне счастье
...
Рейтинг: 0 / 0
02.09.2002, 19:24:59
    #32047572
YellowMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
А можно глупый вопрос ?
А что такое "запись заблокирована " ? Что это для Вас значит ?
...
Рейтинг: 0 / 0
03.09.2002, 10:19:33
    #32047631
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
2 Серг70
А Вы то сами такое использовали?
Круто конечно, но... Человек идёт по тупиковому пути, а Вы ему помогаете идти еще дальше
...
Рейтинг: 0 / 0
03.09.2002, 10:36:15
    #32047638
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
блин.... как... как...
наткунтся на ошибку....
и обработать ее...
вопрос за последнию неделю обсуждается каждый день....
ну объясните мне ,- ЗАЧЕМ Вам это нужно?
...
Рейтинг: 0 / 0
03.09.2002, 12:19:46
    #32047694
Серг70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Постараюсь ответить всем
Исходная задача :
Пользователь решил модифицировать ряд данных, связанных (может через несколько таблиц) с конкретной записью заданной таблицы. Информация о допустимости модификации считывается из БД (из заданной таблицы) многими пользователями, как правило с утра. У всех данные одни и те же. Процесс модификации может длится от нескольких минут до часов. При этом последовательно пересчитанные данные из одних таблиц добавляются в другие. В этом случае пользователь, начавший процесс, должен заблокировать возможность запустить тот же процес модификации для других ползователей, при этом давая работать с данными в режиме чтения, включая и исходную таблицу.
Конечно, можно создать справочную таблицу и туда при начале процесса выкладывать а по окончании удалять имя таблицы и номер заблокированной записи. Но рухнувшие до окончания процесса соединения оставят заблокированными записи. Но и здесь можно победить, вставляя запись в справочную таблицу под транзакцией, а всем давая читать эту таблицу при незавершенной транзакции. Но в результате имеем лишнюю активно ипользуемую (и увеличивающую лог) таблицу.
Вот для чего я и затеял всю эту байду.
...
Рейтинг: 0 / 0
03.09.2002, 12:27:20
    #32047699
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
Про sp_getapplock, sp_releaseapplock читали?
...
Рейтинг: 0 / 0
03.09.2002, 14:20:06
    #32047770
Серг70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
2 snake
Предлагаемые Вами процедуры для блокирования ресурса могут обрабатываться только из приложений, так как фактически запрашиваемый ресурс не блокируется, а информация о нем заносится в системную таблицу master.dbo.syslockinfo . Да, в приложении можно соответствующим образом псевдоблокировку этого ресурса обработать. Но в случае использования ресурсов напрямую (вне приложения) нужно проверить визуально информацию о заблокированном ресурсе процедурой sp_lock , и если ресурс помечен как заблокированный, то с ним ничего не делать. Мой же метод физически блокирует ресурс и даже напрямую с ним ничего не сделаешь.
...
Рейтинг: 0 / 0
03.09.2002, 14:29:45
    #32047775
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
даже напрямую с ним ничего не сделаешь
Боюсь даже предположить, что у меня такое возможно... Напрямую с таблицами не работает никто.
...
Рейтинг: 0 / 0
03.09.2002, 15:00:09
    #32047791
Серг70
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать, что запись, которую собираешься редактировать, заблокирована
А как же поддерка БД? Неужели ваши пользователи не совершают необратимых ошибок. Наши - только дай. Держим специальных программеров, вычищающих за ними плюхи. Есно, работают они с таблицами напрямую (ну быть может с применением каких-либо скриптов)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как узнать, что запись, которую собираешься редактировать, заблокирована / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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