Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определить: выполняется процедура или нет  [new]
Smile
Guest
На сервере (6.5.)в шедулере висит процедура.
Как клиенту (VB6)определить работает ли в данный момент процедура или простаивает?
6 июн 02, 23:39    [34035]     Ответить | Цитировать Сообщить модератору
 Определить: выполняется процедура или нет  [new]
klama
Guest
Если таки использовать VB - то через DMO.
А если хочется сделать это, не выходя за пределы SQL сервера, то можно запустить xp_enumqueuedtasks и выплюнуть её результат во временную таблицу. Откуда, естественно, можно делать тривиальный select.
7 июн 02, 00:39    [34036]     Ответить | Цитировать Сообщить модератору
 Определить: выполняется процедура или нет  [new]
Smile
Guest
Спасибо 4 klama.
Обязательно SQL-DMO?
А другие способы есть?
7 июн 02, 19:38    [34194]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
Приветствую Уважаемый All!

подскажите, пожалуйста, что это за процедура xp_enumqueuedtasks?
по форуму, она упоминается только в этом топике, но Гугл про неё знает (и даже советует не использовать :) )

но ни SQL2000 ни SQL2005 - про неё ничего не знают ...
use master
exec xp_enumqueuedtasks
go

Server: Msg 2812, Level 16, State 62, Line 2
Could not find stored procedure 'xp_enumqueuedtasks'.
26 июл 13, 13:05    [14621601]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
ъ
подскажите, пожалуйста, что это за процедура xp_enumqueuedtasks?
Была такая в SQL Server 6.5

Сейчас её нету.
26 июл 13, 13:33    [14621773]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ъ
что это за процедура xp_enumqueuedtasks?

Была в MSSQL 6.5. Возможно, и в 7.0.
В 2000 и далее — отсутствует.

ъ
Гугл про неё знает (и даже советует не использовать :) )

Не Гугл советует не использовать, а какая-то левая фирма, составившая мануал для 2005 путём копи-паста из мануала для 6.5.
26 июл 13, 13:38    [14621811]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
alexeyvg,

Спасибо!

А что-то подобное (ХП) есть ещё?

Или может, что-то другое посоветуете ... у меня задача, такая как в сабже:
- Есть достаточно тяжёлая ХП. Вот хочу в начале её выполнения, определять - не запущенна ли она УЖЕ кем-то другим?
И, если запущенна - выход. Если нет - выполняется ХП.

Как такое можно "поаккуратней" сделать?

У меня вот такая "идейка" была:
- в начале процедуры - проверять/создавать глоб.времен.табличку (##Flag), а в конце ХП - эту табличку дропать
- и если при входе в ХП - табличка уже существует, то "на выход"

Насколько эта идея "плохая"? Могут ли быть проблемы, если ХП "вылетела" не доработав?
26 июл 13, 13:49    [14621879]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
Crimean
Member

Откуда:
Сообщений: 13148
ъ
у меня задача, такая как в сабже:
- Есть достаточно тяжёлая ХП. Вот хочу в начале её выполнения, определять - не запущенна ли она УЖЕ кем-то другим?
И, если запущенна - выход. Если нет - выполняется ХП.


AppLock?
26 июл 13, 13:50    [14621888]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
Гость333
ъ
Гугл про неё знает (и даже советует не использовать :) )

Не Гугл советует не использовать, а какая-то левая фирма, составившая мануал для 2005 путём копи-паста из мануала для 6.5.

:)) вот-вот,
меня это и сбило с толку - что везде (в том pdf-е) упоминается 2005 сервер
26 июл 13, 13:53    [14621915]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
Crimean
ъ
у меня задача, такая как в сабже:
- Есть достаточно тяжёлая ХП. Вот хочу в начале её выполнения, определять - не запущенна ли она УЖЕ кем-то другим?
И, если запущенна - выход. Если нет - выполняется ХП.


AppLock?

Спасибо!

Вот читаю тему, где тоже, что и нужно мне, сделано через sp_getapplock / sp_releaseapplock
Блокировка процедуры от повторного запуска

и, насколько я понимаю, проблема "вылета" ХП для applock - так же существует?
Как учесть ситуацию, если ХП "вылетела" не выполнив - sp_releaseapplock ?

и ещё, - работать будет на MS SQL2000 , так что try/catch - использовать не получится ...
26 июл 13, 14:47    [14622282]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
aleks2
Guest
ъ
и, насколько я понимаю, проблема "вылета" ХП для applock - так же существует?
Как учесть ситуацию, если ХП "вылетела" не выполнив - sp_releaseapplock ?


Херачить в транзакции?
26 июл 13, 14:52    [14622332]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
вот, это я так понял, тоже, что и я "изобрёл" :) с временн.таблицами

6768820
alexeyvg
А в те времена, когда sp_getapplock-а ещё не было, использовали другой приём:
Сделать временную таблицу, потом проверить наличие временных таблиц по заданной маске в tempdb - если больше одной, то выход.

Значит, не обязательно создавать глобальную врем.таблицу, что бы её увидеть из другого коннекта?
Если я создам просто временную талицу #Flag - каким запросом, из другого коннекта можно узнать, что она действительно существунт ?
26 июл 13, 14:57    [14622369]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
aleks2
ъ
и, насколько я понимаю, проблема "вылета" ХП для applock - так же существует?
Как учесть ситуацию, если ХП "вылетела" не выполнив - sp_releaseapplock ?


Херачить в транзакции?

Вариант, конечно, ... но не хотелось бы - "тяжелая" ХП, слишком ...
Выполняется не час, правда, но свои верные 5мин. - есть. В итоге получится, что 5мин. выполнялась, потом 5мин. - откатывалась - и всё это время, приложение будет "колом стоять" ..

И, главное, мне не особенно и важно - успешно ХП выполнилась или нет.
Если "не успешно", то всё равно, в ближайшие 30 мин. она запустится, и "всё исправит".
Нужно только что бы в один момент времени - выполнялся только один вызов этой ХП.

А то сейчас так получается, что её одновременно запускают из 10-ти разных мест.
Эти 10-ть запусков - делают, в итоге, одно и тоже, но при этом - лочат друг друга, "со страшной силой" ... ))
26 июл 13, 15:11    [14622492]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ъ
Если я создам просто временную талицу #Flag - каким запросом, из другого коннекта можно узнать, что она действительно существунт ?

Что-то типа такого
select *
from tempdb..sysobjects
where name like '#Flag%'

Но чтобы видеть времянки из других коннектов, нужны повышенные права (возможно, даже sysadmin, точно не скажу).
26 июл 13, 15:13    [14622512]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
ъ
Guest
Гость333,

Спасибо, работает!
поробую "пойти этим путём" :)
26 июл 13, 15:23    [14622612]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
Crimean
Member

Откуда:
Сообщений: 13148
есть же "сессионные" блокировки кроме транзакционных. в худшем случае процесс пристрелить придется, если "повиснет"
26 июл 13, 15:33    [14622711]     Ответить | Цитировать Сообщить модератору
 Re: Определить: выполняется процедура или нет  [new]
aleks2
Guest
ъ
Вариант, конечно, ... но не хотелось бы - "тяжелая" ХП, слишком ...
Выполняется не час, правда, но свои верные 5мин. - есть. В итоге получится, что 5мин. выполнялась, потом 5мин. - откатывалась - и всё это время, приложение будет "колом стоять" ..

И, главное, мне не особенно и важно - успешно ХП выполнилась или нет.


create procedure dbo.LockedMyProc (...)
as
exec @ret = sp_getappllock ...

if @ret = 0
  exec @result = MyProc ...
else
  set @result = -12345;

exec @ret = sp_releaseappllock ...

return @result
26 июл 13, 17:22    [14623759]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить