powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить статус job-a
10 сообщений из 10, страница 1 из 1
Как определить статус job-a
    #32042698
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак не могу найти как определить, что job выполняется в данный момент.
Есть, казалось бы, идеальное решение - поле run_status таблицы msdb.dbo.sysjobhistory , но, к сожалению, запись в этой таблице создается только когда job уже завершил работу, и обещанный статус "in progress" никак не получить.
Может кто знает отгадку?
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32042711
Фотография KANDed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В ЕМ наступи на job и сделай refresh.
2. sp_help_job
Посмотри Job Execution Status Constants (значения смотри в BOL)

Вообще-то надо было в BOL наступить на поиск "Job Status "
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32042712
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но хотелось бы узнать из T-SQL.
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32042713
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, невнимательно прочитал, первый раз
похоже работает
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32042716
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вспомнил почему я хотел найти статус job-а ы системной таблице. Если в SP sp_help_job задать параметр @job_name, то возвращается 4 рекордсета.
Это не очень удобно. А раз это можно получить через SP, то можно получить и из системной таблицы, но найти никак не удается.
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32042736
Tulkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внимптельно BOL почитай.Один из параметров sp_help_job указывает,какие рекордсеты выводить.
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32042742
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, надо учиться читать, похоже
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32043017
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-прежнему есть проблема - как получить "current_execution_status" из рекордсета в T-SQL.

Выражение:
Код: plaintext
1.
create table #t ( ... )
insert #t exec msdb.dbo.sp_help_job @job_name = 'some_job_name', @job_aspect = 'JOB'

дает ошибку:
Код: plaintext
1.
Server: Msg  8164 , Level  16 , State  1 , Procedure sp_get_composite_job_info, Line  67 
An INSERT EXEC statement cannot be nested.

Так же, как и
Код: plaintext
insert #t exec msdb.dbo.sp_get_composite_job_info

Дальнейшее исследование показало, что создается процесс:
Код: plaintext
1.
cmd:
SQLAgent - TSQL JobStep (Job 0x969D09390748F5419FC4452B59762CAF : Step  1 )

Но что такое 0x969D09390748F5419FC4452B59762CAF?
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32043019
Philippe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Finally, I was able to figure out how to do it.
Unbelievable, how it is non-trivial.



Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
CREATE FUNCTION get_running_jobs () RETURNS
TABLE AS 
RETURN (
	SELECT
		j1.job_id ,
		j1.name ,
		J1.description
	FROM msdb..sysjobs AS j1 
	WHERE j1.job_id IN (
		SELECT
		CAST (
			SUBSTRING ( j2.job_id ,  07  ,  2  ) +
			SUBSTRING ( j2.job_id ,  05  ,  2  ) +
			SUBSTRING ( j2.job_id ,  03  ,  2  ) +
			SUBSTRING ( j2.job_id ,  01  ,  2  ) +
			'-' +
			SUBSTRING ( j2.job_id ,  11  ,  2  ) +
			SUBSTRING ( j2.job_id ,  09  ,  2  ) +
			'-' +
			SUBSTRING ( j2.job_id ,  15  ,  2  ) +
			SUBSTRING ( j2.job_id ,  13  ,  2  ) +
			'-' +
			SUBSTRING ( j2.job_id ,  17  ,  4  ) +
			'-' +
			RIGHT ( j2.job_id,  12  ) AS uniqueidentifier
		)
		FROM (
			SELECT
			SUBSTRING (
				p.program_name,
				CHARINDEX ( '0x', p.program_name ) +  2 ,
				CHARINDEX (
					SPACE (  1  ),
					p.program_name,
					CHARINDEX ( '0x' , p.program_name )
				) -
				CHARINDEX ( '0x' , p.program_name ) -  2 
			)
			FROM master..sysprocesses AS p
			WHERE p.program_name LIKE 'SQLAgent%JobStep%'
		) AS j2( job_id )
	)
) GO

CREATE FUNCTION get_running_jobs2 ()
RETURNS TABLE AS
	RETURN (
		SELECT j1.job_id , j1.name , j1.description
		FROM msdb..sysjobs AS j1
		WHERE EXISTS (
			SELECT *
			FROM master..sysprocesses AS p
			WHERE
				p.program_name LIKE
					'SQLAgent%JobStep%' +
					master.dbo.fn_varbintohexstr (
						CAST ( j1.job_id AS varbinary )
					) +
					'%'
		)
	) GO
...
Рейтинг: 0 / 0
Как определить статус job-a
    #32043351
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если использовать недокументированные функции, то конечно все проще

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table #t(job_id uniqueidentifier, 
last_run_date int ,
last_run_time int ,
next_run_date int ,
next_run_time int ,
next_run_schedule_id int ,
requested_to_run int ,
request_source int ,
request_source_id int ,
running int,
current_execution_step int ,
current_retry_attempt  int ,
current_execution_status  int )

insert #t EXECUTE master.dbo.xp_sqlagent_enum_jobs  1 , 'dbo'

select * 
from #t a
inner join msdb.dbo.sysjobs_view b on b.job_id = a.job_id
drop table #t
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить статус job-a
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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