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

Вообще-то надо было в BOL наступить на поиск "Job Status "
...
Рейтинг: 0 / 0
13.08.2002, 08:33:10
    #32042712
Philippe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
Спасибо, но хотелось бы узнать из T-SQL.
...
Рейтинг: 0 / 0
13.08.2002, 08:36:58
    #32042713
Philippe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
спасибо, невнимательно прочитал, первый раз
похоже работает
...
Рейтинг: 0 / 0
13.08.2002, 08:43:26
    #32042716
Philippe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
Вспомнил почему я хотел найти статус job-а ы системной таблице. Если в SP sp_help_job задать параметр @job_name, то возвращается 4 рекордсета.
Это не очень удобно. А раз это можно получить через SP, то можно получить и из системной таблицы, но найти никак не удается.
...
Рейтинг: 0 / 0
13.08.2002, 09:44:37
    #32042736
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
Внимптельно BOL почитай.Один из параметров sp_help_job указывает,какие рекордсеты выводить.
...
Рейтинг: 0 / 0
13.08.2002, 09:57:51
    #32042742
Philippe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
да, надо учиться читать, похоже
...
Рейтинг: 0 / 0
13.08.2002, 23:37:02
    #32043017
Philippe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
По-прежнему есть проблема - как получить "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
14.08.2002, 01:47:33
    #32043019
Philippe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
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
14.08.2002, 20:24:15
    #32043351
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить статус job-a
Если использовать недокументированные функции, то конечно все проще

Код: 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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить статус job-a / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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