Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как дождаться окончания выполнения job-а / 4 сообщений из 4, страница 1 из 1
01.08.2002, 15:04:34
    #32040304
Panov Vitaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как дождаться окончания выполнения job-а
Как дождаться окончания выполнения job-а на Transact-SQL

запускаю Job с помощью sp_start_job

необходимо дождаться окончания выполнения задания

для того чтобы начать выполение других действий.


Если использовать sp_help_job то как мне присвоить возвращаемые этой процедурой значения локальным переменным???

P.S.
Если можно - пример полного кода. А то я уже запарился...
...
Рейтинг: 0 / 0
01.08.2002, 16:28:28
    #32040348
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как дождаться окончания выполнения job-а
Выполнение других действий можно начать добавив следующий шаг прямо в Job. Если Job выполняется не синхронно то статус можно узнать например так:

Код: 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.
declare @job_id UNIQUEIDENTIFIER, @job_name sysname, @is_sysadmin int, @job_owner   sysname
set @job_name = 'Optimizations Job for DB Maintenance Plan ''DB Maintenance Plan1'''
EXECUTE sp_verify_job_identifiers '@job_name', '@job_id',  @job_name OUTPUT, @job_id OUTPUT
print @job_id

  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)

  SELECT @is_sysadmin = ISNULL(IS_SRVROLEMEMBER(N'sysadmin'),  0 )
  SELECT @job_owner = SUSER_SNAME()

insert into #xp_results EXECUTE master.dbo.xp_sqlagent_enum_jobs @is_sysadmin, @job_owner, @job_id 
select running from #xp_results

drop table #xp_results
...
Рейтинг: 0 / 0
01.08.2002, 16:30:31
    #32040353
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как дождаться окончания выполнения job-а
ЗЫ: sp_verify_job_identifiers в msdb
ЗЫЫ: SQL 2000
...
Рейтинг: 0 / 0
01.08.2002, 19:11:12
    #32040464
Panov Vitaly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как дождаться окончания выполнения job-а
Спасибо всем за подробные ответы.

Но к сожалению у меня версия 7.0

Проблема решилась немного криво, но все-таки работает:

Код: 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.
61.
62.
63.
64.
65.
             set @jobName ='Имя моего жоба' 

	 /*	Получаем номер job-а		*/ 
	select 
		@id=job_id 
	from 
		msdb.dbo.sysjobs 
	where 
		name  =@jobName

	 /*	Перед запуском job-а определяем "максимальную" запись в JobHistory
		Это необходимо для контролирования процесса хода выполнения
		job-а
	 */ 
	select @InID= max(instance_id) from msdb..sysjobhistory 
	where job_id =@id

	exec msdb.dbo.sp_start_job @job_id=@id

	 /*	Ждем окончания выполнения job-а	*/ 
	set @JobRunning = 1 

	while @JobRunning= 1 
	begin
		 -- Ждем 5 секунд и проверяем состояние job-а
 
		WAITFOR DELAY '000:00:05'
		if exists(
			select 
				*
			from 
				msdb..sysjobhistory 
			where 
				job_id = @id
				and instance_id>@InID
				and step_id = 0 )
		begin
			 /*	Устанавливаем флажок выхода из цикла	*/ 			
			set @JobRunning= 0 

			 /*	Получаем результат выполнения жоба и описание ошибки	*/ 
			select @JobResult= (	select run_status
						from 
							msdb..sysjobhistory 
						where 
							job_id = @id
							and instance_id>@InID
							and step_id = 0 )
			select @ErrMessage =(	select message
						from 
							msdb..sysjobhistory 
						where 
							job_id = @id
							and instance_id>@InID
							and step_id = 0 )
		end
		
	end
	
	 /*	Если при выполнении job-а возникла ошибка - 	*/ 
	if @JobResult <> 1  
	begin
		select  1  as ErrCode,  @ErrMessage as ErrDescription
		return
	end
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как дождаться окончания выполнения job-а / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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