Удаление Job-ов

Sveta657
Дата: 13.06.2011 10:30:47
Добрый день!
Профессионалы своего дела помогите пожалуйста, необходимо очистить более 40000 job из базы, сервер старенький и если делать это руками. То получается 500 - 700 за 2 часа. После работы долго времени сидеть нету, семья. Поэтому я обращаюсь к вам, подскажите скрипт, который бы удалял job по диапазону времени (скажем с 3.01.2008 по 12.06.2008) и по диапазону номера job-а (скажем с 1573 по 1640). У меня не хватает навыков и знаний, чтобы на писать данный скрипт. Пожалуйста помогите!!!
Ennor Tiegael
Дата: 13.06.2011 11:13:13
Попробуйте начать с изучения таблиц sysjobs, sysjobsteps в базе msdb. Полагаю, когда вы посмотрите на их содержимое, дело пойдет.

Только вот версию сервера вы зря не озвучили, от этого может зависеть. Результат print @@version - в студию.
Sveta657
Дата: 13.06.2011 18:12:25
MS SQL 2000 EE
aleks2
Дата: 13.06.2011 18:54:51
sp_help_job
sp_delete_job
Ну и временная таблица+курсор или чего вы ишо знаете.
Mnior
Дата: 13.06.2011 19:03:27
Маленький говно-кодик:
USE msdb;
GO
DECLARE @JobID Int, @Result Int;
SELECT Top 1 @JobID = job_id FROM sysjobs;
WHILE (@JobID IS NOT NULL) BEGIN
	EXEC @Result = sp_delete_job @job_id = @JobID;
	IF (@Result != 0) BREAK;
	SELECT Top 1 @JobID = job_id FROM sysjobs;
END
GO
Условия сами допишите, чтоб не удалить лишние.
Sveta657
Дата: 14.06.2011 08:34:42
Mnior
Маленький говно-кодик:
USE msdb;
GO
DECLARE @JobID Int, @Result Int;
SELECT Top 1 @JobID = job_id FROM sysjobs;
WHILE (@JobID IS NOT NULL) BEGIN
	EXEC @Result = sp_delete_job @job_id = @JobID;
	IF (@Result != 0) BREAK;
	SELECT Top 1 @JobID = job_id FROM sysjobs;
END
GO
Условия сами допишите, чтоб не удалить лишние.


Огромное спасибо, сегодня попробую! А какое условие?
Mnior
Дата: 14.06.2011 15:00:10
Sveta657
А какое условие?
Пример:
USE msdb;
GO
DECLARE @JobID Int, @Result Int;
SELECT Top 1 @JobID = job_id FROM sysjobs WHERE name NOT IN ('My','favorite','jobs');
WHILE (@JobID IS NOT NULL) BEGIN
	EXEC @Result = sp_delete_job @job_id = @JobID;
	IF (@Result != 0) BREAK;
	SELECT Top 1 @JobID = job_id FROM sysjobs WHERE name NOT IN ('My','favorite','jobs');
END
GO
Sveta657
Дата: 14.06.2011 17:04:43
Mnior
Sveta657
А какое условие?
Пример:
USE msdb;
GO
DECLARE @JobID Int, @Result Int;
SELECT Top 1 @JobID = job_id FROM sysjobs WHERE name NOT IN ('My','favorite','jobs');
WHILE (@JobID IS NOT NULL) BEGIN
	EXEC @Result = sp_delete_job @job_id = @JobID;
	IF (@Result != 0) BREAK;
	SELECT Top 1 @JobID = job_id FROM sysjobs WHERE name NOT IN ('My','favorite','jobs');
END
GO

Дал следующее:
Server: Msg 206, Level 16, State 2, Line 2
Operand type clash: uniqueidentifier is incompatible with int
Server: Msg 206, Level 16, State 1, Line 6
Operand type clash: uniqueidentifier is incompatible with int

Если @JobID сделать uniqueidentifier, то очистил все не смотря на условие. Условие ('%568%') чтобы оставить что нужно!
invm
Дата: 14.06.2011 17:30:02
Sveta657,

Значит неправильно условие. Показывайте код.
Sveta657
Дата: 14.06.2011 17:53:03
USE msdb;
GO
DECLARE @JobID uniqueidentifier, @Result int;
SELECT top 30 @JobID = job_id FROM sysjobs WHERE name NOT IN ('%июн%','%restor%','%eod%','%index%','%check%','%5293%');
WHILE (@JobID IS NOT NULL) BEGIN
EXEC @Result = sp_delete_job @job_id = @JobID;
IF (@Result != 0) BREAK;
SELECT top 30 @JobID = job_id FROM sysjobs WHERE name NOT IN ('%июн­%','%restor%','%eod%','%index%','%check%','%5293%');
END
GO

Дело в том что у нас в name длинные названия и использовать '%%' наверное можно использовать как маску?