Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как при помощи T-SQL проверить текущее состояние job'a?  [new]
voldy
Member

Откуда:
Сообщений: 17
Стартую job командой:

declare
@result int
exec @result = msdb..sp_start_job @job_name = 'Test'
select @result


Как программно проверить текущее состояние job'a?
19 авг 05, 12:04    [1801769]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
sp_help_job
19 авг 05, 12:13    [1801829]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
voldy
Member

Откуда:
Сообщений: 17
GreenSunrise
sp_help_job


И как при помощи нее проверить программно статус?
Задача следующая:
Если job_status = выполняется тогда
ничего не делаем
иначе
делаем
19 авг 05, 12:23    [1801897]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Glory
Member

Откуда:
Сообщений: 104751
И как при помощи нее проверить программно статус?
Проанализировать возвращаемый процедурой набор
19 авг 05, 12:29    [1801938]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Или анализировать возвращаемый рекордсет, или залезать в тело sp_help_job, смотреть, как она написана и выдирать куски, которые вам интересны.
19 авг 05, 12:32    [1801953]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
-- можно так:

declare
@job_id uniqueidentifier,
@owner sysname,
@is_sysadmin int

select
@job_id = job_id,
@owner = suser_sname(owner_sid)
from
msdb.dbo.sysjobs
where
name = 'Test'

create table #xp_results
(
job_id uniqueidentifier null,
last_run_date int null,
last_run_time int null,
next_run_date int null,
next_run_time int null,
next_run_schedule_id int null,
requested_to_run int null,
request_source int null,
request_source_id sysname null,
running int null,
current_step int null,
current_retry_attempt int null,
job_state int null
)

set @is_sysadmin = coalesce(is_srvrolemember(N'sysadmin'),0)

if ((@@microsoftversion / 0x01000000) >= 8) -- SQL Server 8.0 or greater
insert into #xp_results execute master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @owner, @job_id
else
insert into #xp_results execute master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @owner

if (select Running from #xp_results where job_id = @job_id) = 1
print 'running'
else
print 'stopped'
19 авг 05, 13:43    [1802391]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
О чем я и говорю. Тырим кусок кода из sp_help_job и работаем с ним, как нам удобно.

Правда, надо не забывать о том, что если в стыренном куске есть недокументированные функции, как, например, xp_sqlagent_enum_jobs, то в будущих версиях поведение может измениться.
19 авг 05, 14:28    [1802712]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
voldy
Member

Откуда:
Сообщений: 17
У меня примерно то же, что и у Prolog'а получилось:

declare
@job_name sysname,
@job_id UNIQUEIDENTIFIER

select @job_name = 'Factoring BankXXI document'

exec msdb..sp_verify_job_identifiers '@job_name', '@job_id', @job_name, @job_id OUTPUT

CREATE TABLE #xp_results (job_id UNIQUEIDENTIFIER NOT NULL,
last_run_date INT NOT NULL,
last_run_time INT NOT NULL,
next_run_date INT NOT NULL,
next_run_time INT NOT NULL,
next_run_schedule_id INT NOT NULL,
requested_to_run INT NOT NULL, -- BOOL
request_source INT NOT NULL,
request_source_id sysname COLLATE database_default NULL,
running INT NOT NULL, -- BOOL
current_step INT NOT NULL,
current_retry_attempt INT NOT NULL,
job_state INT NOT NULL)

insert into #xp_results
EXECUTE master.dbo.xp_sqlagent_enum_jobs 1, 'job_user'

select job_state from #xp_results where job_id = @job_id

drop table #xp_results


/*
1 Executing.
2 Waiting for thread.
3 Between retries.
4 Idle.
5 Suspended.
7 Performing completion actions.
*/
19 авг 05, 14:54    [1802905]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Sergij Gromov
Member

Откуда: 49°49'44.58"N, 23°59'40.42"E
Сообщений: 443
Господа,

джобом запускается процедура, как в ней узнать job_id ?
27 мар 12, 16:23    [12321802]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Sergij Gromov,

Using Tokens in Job Steps
последний пример.
27 мар 12, 16:31    [12321846]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Sergij Gromov
запускается процедура, как в ней узнать job_id ?

Передавать из job-а
27 мар 12, 16:33    [12321859]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Sergij Gromov
Member

Откуда: 49°49'44.58"N, 23°59'40.42"E
Сообщений: 443
SamMan,

студия на $(ESCAPE_NONE(JOBID)) ругается:

Incorrect syntax near '('.
27 мар 12, 16:38    [12321889]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Sergij Gromov
студия на $(ESCAPE_NONE(JOBID)) ругается:

Incorrect syntax near '('.

Вы наверное токен в текст процедуры ставите ?
А его место - в тектсе джоба
27 мар 12, 16:39    [12321903]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Sergij Gromov
SamMan,

студия на $(ESCAPE_NONE(JOBID)) ругается:

Incorrect syntax near '('.
Это только в теле скрипта степа можно писать. Агент типа сам макроподстановку делает.
27 мар 12, 16:40    [12321909]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
Sergij Gromov
Member

Откуда: 49°49'44.58"N, 23°59'40.42"E
Сообщений: 443
Гавриленко Сергей Алексеевич
Sergij Gromov
SamMan,

студия на $(ESCAPE_NONE(JOBID)) ругается:

Incorrect syntax near '('.
Это только в теле скрипта степа можно писать. Агент типа сам макроподстановку делает.


А если политикой организации програмист имеет доступ только к процедурам, которые админы подключают в джобы ... я ж вроде с этого и начал - как в процедуре узнать АйДи .. в дальнейшем - вычитать код ошибки
27 мар 12, 16:44    [12321942]     Ответить | Цитировать Сообщить модератору
 Re: Как при помощи T-SQL проверить текущее состояние job'a?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Определение job в sysprocesses

select 
  * 
from 
  master.dbo.sysprocesses s
inner join  msdb.dbo.sysjobs j on substring(replace(j.job_id, '-',''),17,16) = substring(s.program_name,charindex('0x', s.program_name) + 18, 16)



а если навесить условие на @@SPID, то точно определите джоб или нет
28 мар 12, 08:40    [12324764]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить