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

Откуда:
Сообщений: 89
Есть таблица со списком задач:
id Name     fl_complete
1 Задача1 0
2 Задача2 0
3 Задача3 0
...

Есть клиенты которые должны получить задачу никем не занятую, и на неопределенный срок (пока висит коннект клиента или задача не выполнена) заблокировать запись.
Как правильно сделать блокировку выбранной строки? И как потом по SELECT получить незаблокированные?
12 авг 12, 16:34    [13000444]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Блокирование строк таблицы на длительное время -- плохое архитектурное решение, приводящее к проблемам с производительностью и обслуживанием БД.
12 авг 12, 17:23    [13000528]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
minton,

Добавьте в таблицу ещё один столбец User_ID.

Код:
Если он (User_ID) пустой ..., если он заполнен...
12 авг 12, 18:15    [13000632]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
minton
Member

Откуда:
Сообщений: 89
trew
minton,

Добавьте в таблицу ещё один столбец User_ID.

Код:
Если он (User_ID) пустой ..., если он заполнен...


Если User вылетит по дисконекту и не завершит задачу, нужно чтобы задача считалась свободной и ее мог запросить другой клиент, промежуточные результаты сохраняются в других таблицах и работа предыдущего User не пропадет.
Как можно в таком случае определить что User записавший в User_ID данные и незакончивший обработку задачи - отвалился по дисконнекту?
12 авг 12, 18:30    [13000670]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
Читатель неместный
Guest
Очень может быть что вам достаточно будет создавать отдельные временные глобальные таблицы с именами из айди и содержимым именем пользователя заблокировавшего запись.
.. памойму понятно описал))
12 авг 12, 18:39    [13000692]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
sp_getapplock (Transact-SQL)??
12 авг 12, 18:39    [13000693]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
aleks2
Guest
iap
sp_getapplock (Transact-SQL)??


Не есть фонтан. Это всеж для кратковременных (а-ля внутренние блокировки) + применить к строкам в запросе затруднительно.
@@spid+login_time из sysprocess
записанные в строку таблицы.
12 авг 12, 19:34    [13000868]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
minton
Member

Откуда:
Сообщений: 89
aleks2,

спс так и сделаю, запишу в таблицу задач @@spid, и буду проверять живо ли оно в master.dbo.sysprocesses
12 авг 12, 22:14    [13001381]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
minton
aleks2,

спс так и сделаю, запишу в таблицу задач @@spid, и буду проверять живо ли оно в master.dbo.sysprocesses
А ничо, что @@spid выдается заново, хоть следующему коннекту?
12 авг 12, 22:50    [13001452]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
minton
aleks2,

спс так и сделаю, запишу в таблицу задач @@spid, и буду проверять живо ли оно в master.dbo.sysprocesses
Записывайте в таблицу задач не только @@spid, но и время создания коннекта (взять из sysprocesses). Тогда хоть сможете отличать, новый это коннект с там же @@spid, или старый.
13 авг 12, 00:09    [13001691]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
minton
Member

Откуда:
Сообщений: 89
Гавриленко Сергей Алексеевич,

тогда уточнение, буду писать @@spid+login_time

должно работать
13 авг 12, 00:11    [13001698]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы незаблокированных записей  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35380
Блог
READPAST
http://msdn.microsoft.com/ru-ru/library/ms187373(v=sql.105).aspx
13 авг 12, 01:22    [13001884]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить