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

Откуда: Электросталь
Сообщений: 10
При попытке добавить новые шаги в уже исполняющуюся работу на сервере, они (шаги) в нее вроде бы добавляются (во всяком случае их видно в EM), но не исполняются.
В чем может быть проблема?

PS MSSQL 7.0
12 май 04, 16:21    [674207]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Интересно, а для чего такое понадобилось?!
12 май 04, 16:24    [674224]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Atheist
Member

Откуда: Электросталь
Сообщений: 10
С клиента принимаются пакеты данных (в дбф-ках), которые потом заливаются в базу. Потом файлики удаляются. Пакетов может приниматься несколько сразу и чтобы не разводить много джобов, хотелось бы запихать все шаги в один. :)
12 май 04, 16:35    [674266]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Пакетов может приниматься несколько сразу и чтобы не разводить много джобов


А зачем чтоб обработать несколько dbf файлов создавать несколько джобов?
12 май 04, 16:38    [674276]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Gary
Member

Откуда: Святая Земля
Сообщений: 110
SQL 2000 требует запуска sp_updatejob, может, и в 7 есть...
12 май 04, 16:44    [674307]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Gary
Member

Откуда: Святая Земля
Сообщений: 110
sp_update_job, sorry
12 май 04, 16:45    [674312]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Atheist
Member

Откуда: Электросталь
Сообщений: 10
автор

А зачем чтоб обработать несколько dbf файлов создавать несколько джобов?

Всмысле?

Пакет состоит из 3-х ДБФ-файликов. Он может быть один, а может быть и несколько сразу, заранее неизвестно. Эти файлики копируются во временную папочку на сервере, из которой хранимой процедурой заливаются в БД. Эта заливка может происходить как 20 секунд, так и 30 минут. Для запуска хп и последующего удаления временных файлов создается джоб (это для одного пакета). Потом может быть принят второй пакет. Чтобы для него не создавать еще один джоб, хотелось бы просто необходимые 2 шага дописать в уже существующий, чтобы они исполнились после заливки предыдущего пакета.
12 май 04, 16:48    [674325]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
А если пакет переписать....?
И усе в пакете делать..... DTS за тем и нать.... и зашедулить и зациклить его моно...
Вот в помощь:DTS FAQ
12 май 04, 17:14    [674403]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Atheist
Member

Откуда: Электросталь
Сообщений: 10
Gary

sp_update_job, sorry

К сожалению, не помогает. :(

buser

А если пакет переписать....?
И усе в пакете делать..... DTS за тем и нать.... и зашедулить и зациклить его моно...
Вот в помощь:DTS FAQ

Хм... Надо подумать, может так и действительно будет проще...

ПС: Но все равно хотелось бы знать, можно ли добавлять в работающий джоб новые шаги и, если да, то как...
12 май 04, 17:29    [674438]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Gary
Member

Откуда: Святая Земля
Сообщений: 110
Я этим пользуюсь, правда, в 2000-ном
Эта процедура добавляет ко всен джобам step JobFailure. sp lms_JobFailure сидит в master db

Не говорю, что это лучшее решение, то, что есть....

CREATE PROCEDURE lms_InitSystemJobs
AS
BEGIN
-------------------------------------------------------------------------------
-- This cursor returns latest job step for all jobs that does not has within --
-- step named 'JobFailure'. --
-- In addition, it also returns total number of steps for the job --
-------------------------------------------------------------------------------
DECLARE JobStepList CURSOR LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR SELECT job.job_id,job.name,step.step_id,step.on_fail_action,
step.on_success_action,stepn.step_count
FROM msdb.dbo.sysjobs job,
msdb.dbo.sysjobsteps step,
(
SELECT job.job_id, COUNT(*) AS step_count
FROM msdb.dbo.sysjobsteps step, msdb.dbo.sysjobs job
WHERE step.job_id = job.job_id
GROUP BY job.job_id
) AS stepn
WHERE job.job_id = step.job_id
AND stepn.job_id = job.job_id
AND job.name NOT LIKE 'lms%'
AND job.name NOT LIKE 'rt%'
AND NOT EXISTS (SELECT * FROM msdb.dbo.sysjobsteps step1
WHERE job.job_id = step1.job_id
AND step_name = 'JobFailure')
AND step.step_id = (SELECT MAX(step2.step_id)
FROM msdb.dbo.sysjobsteps step2
WHERE step2.job_id = job.job_id)
DECLARE @JobID uniqueidentifier
DECLARE @JobName sysname
DECLARE @StepID integer
DECLARE @OnFail tinyint
DECLARE @OnSuccess tinyint
DECLARE @StepCount tinyint
DECLARE @Command NVARCHAR(3200) -- as in table

OPEN JobStepList
FETCH NEXT FROM JobStepList
INTO @JobID,@JobName,@StepID,@OnFail,@OnSuccess,@StepCount
WHILE @@FETCH_STATUS = 0
BEGIN
-- if OnSuccess = 2, i.e. quit with failure,
-- it means, that this step performs error handling
-- we add next step to prepare mail message
-- For all cases, we set OnFailure to 'goto next step'
IF @OnSuccess = 2
BEGIN
UPDATE msdb.dbo.sysjobsteps SET on_success_action = 3
WHERE job_id = @JobID AND step_id = @StepID
END
UPDATE msdb.dbo.sysjobsteps SET on_fail_action = 3
WHERE job_id = @JobID AND step_id = @StepID
SET @StepID = @StepID + 1
SET @Command = 'EXECUTE lms_JobFailure ''' + @JobName + ''''
INSERT INTO msdb.dbo.sysjobsteps
(job_id,step_id,step_name,subsystem,command,flags,additional_parameters,
cmdexec_success_code,on_success_action,on_success_step_id,
on_fail_action,on_fail_step_id,server,database_name,database_user_name,
retry_attempts,retry_interval,os_run_priority,output_file_name,
last_run_outcome,last_run_duration,last_run_retries,last_run_date,
last_run_time)
VALUES
(@JobID,@StepID,'JobFailure','TSQL',@Command,0,NULL,0,2,0,2,0,
@@SERVERNAME,'master',NULL,0,0,0,NULL,0,0,0,0,0)
EXECUTE msdb.dbo.sp_update_job
@job_id = @JobID,
@start_step_id = 1
FETCH NEXT FROM JobStepList
INTO @JobID,@JobName,@StepID,@OnFail,@OnSuccess,@StepCount
END
CLOSE JobStepList
DEALLOCATE JobStepList
-- update replication cleanup job
-- subscription will be deactivated one month after failure
SELECT @JobID = job_id FROM msdb.dbo.sysjobsteps
WHERE command like 'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention =%'
IF @JobID IS NOT NULL
BEGIN
UPDATE msdb.dbo.sysjobsteps SET
command = 'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 720'
WHERE command like 'EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention =%'
EXECUTE msdb.dbo.sp_update_job
@job_id = @JobID,
@start_step_id = 1
END
RETURN 0
END
GO
REVOKE ALL ON lms_InitSystemJobs FROM PUBLIC
GO
12 май 04, 17:46    [674490]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
LAlex
Member

Откуда: Omsk
Сообщений: 209
Я не разбирался с последним скриптом, но самое простое, что может быть, на том шаге, который раньше был последним, стоит после него делать Quit with success, на чем джоб и кончается. Посмотри это дело в ЕМ и поставь Goto next step.
13 май 04, 07:53    [675110]     Ответить | Цитировать Сообщить модератору
 Re: Как добавить шаг в исполняемую работу?  [new]
Atheist
Member

Откуда: Электросталь
Сообщений: 10
LAlex
на том шаге, который раньше был последним, стоит после него делать Quit with success, на чем джоб и кончается

Нет, стоит Goto next step. Причем я пробовал и сразу у последнего шага ставить Goto next step, но тогда работа выходит с ошибкой что не смогла перейти на несуществующий шаг 4 (и тогда, когда его действительно нет, и тогда, когда я его добавил во время исполнения джоба), и ставить Quit on success, а затем при добавлении новых шагов менять на Goto next step, после чего джоб останавливается на 3 шаге и сообщает что он вышел нормально, при этом игнорируя вновь добавленные шаги. :(
13 май 04, 09:46    [675247]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить