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

Откуда:
Сообщений: 9
Добрый день!
Профессионалы своего дела помогите пожалуйста, необходимо очистить более 40000 job из базы, сервер старенький и если делать это руками. То получается 500 - 700 за 2 часа. После работы долго времени сидеть нету, семья. Поэтому я обращаюсь к вам, подскажите скрипт, который бы удалял job по диапазону времени (скажем с 3.01.2008 по 12.06.2008) и по диапазону номера job-а (скажем с 1573 по 1640). У меня не хватает навыков и знаний, чтобы на писать данный скрипт. Пожалуйста помогите!!!
13 июн 11, 10:30    [10805375]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Попробуйте начать с изучения таблиц sysjobs, sysjobsteps в базе msdb. Полагаю, когда вы посмотрите на их содержимое, дело пойдет.

Только вот версию сервера вы зря не озвучили, от этого может зависеть. Результат print @@version - в студию.
13 июн 11, 11:13    [10805451]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
MS SQL 2000 EE
13 июн 11, 18:12    [10806854]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
aleks2
Guest
sp_help_job
sp_delete_job
Ну и временная таблица+курсор или чего вы ишо знаете.
13 июн 11, 18:54    [10806943]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Маленький говно-кодик:
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
Условия сами допишите, чтоб не удалить лишние.
13 июн 11, 19:03    [10806969]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
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
Условия сами допишите, чтоб не удалить лишние.


Огромное спасибо, сегодня попробую! А какое условие?
14 июн 11, 08:34    [10808156]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
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
14 июн 11, 15:00    [10810776]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
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%') чтобы оставить что нужно!
14 июн 11, 17:04    [10811771]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Sveta657,

Значит неправильно условие. Показывайте код.
14 июн 11, 17:30    [10811928]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
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 длинные названия и использовать '%%' наверное можно использовать как маску?
14 июн 11, 17:53    [10812050]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
Sveta657
Дело в том что у нас в name длинные названия и использовать '%%' наверное можно использовать как маску?

Указать условия чтобы удалить все кроме нужного (указанного)!
14 июн 11, 17:54    [10812061]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
То, что в @JobID поменяли Int на uniqueidentifier - это правильно. А вот в top 1 на 30 - незачем.
Какя сейчас ошибка?
14 июн 11, 17:58    [10812090]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
Prolog
То, что в @JobID поменяли Int на uniqueidentifier - это правильно. А вот в top 1 на 30 - незачем.
Какя сейчас ошибка?

Ошибка удаляет все не смотря на условие, то есть не оставляет нужного! После прогонки скрипта была ошибка, мол вылет за границу чего то там (поняла что ругается на JobID). Выложить смогу текст ошибки только завтра.
14 июн 11, 18:04    [10812130]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
USE msdb;
GO
declare @t table (pattern varchar(30))
insert into @t
values
 ('%июн%'),('%restor%'),('%eod%'),('%index%'),('%check%'),('%5293%')
 
DECLARE @JobID uniqueidentifier, @Result int;
SELECT @JobID = job_id FROM sysjobs sj WHERE NOT exists(select * from @t where sj.name like pattern)
WHILE (@JobID IS NOT NULL) BEGIN
EXEC @Result = sp_delete_job @job_id = @JobID;
IF (@Result != 0) BREAK;
SELECT @JobID = job_id FROM sysjobs sj WHERE NOT exists(select * from @t where sj.name like pattern)
END
GO
14 июн 11, 18:07    [10812152]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Вместо NOT IN нужно NOT LIKE через OR.
14 июн 11, 18:09    [10812164]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
invm
USE msdb;
GO
declare @t table (pattern varchar(30))
insert into @t
values
 ('%июн%'),('%restor%'),('%eod%'),('%index%'),('%check%'),('%5293%')
 
DECLARE @JobID uniqueidentifier, @Result int;
SELECT @JobID = job_id FROM sysjobs sj WHERE NOT exists(select * from @t where sj.name like pattern)
WHILE (@JobID IS NOT NULL) BEGIN
EXEC @Result = sp_delete_job @job_id = @JobID;
IF (@Result != 0) BREAK;
SELECT @JobID = job_id FROM sysjobs sj WHERE NOT exists(select * from @t where sj.name like pattern)
END
GO


Спасибо! Теперь оставит только то что указано в скобках?
14 июн 11, 18:10    [10812172]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Sveta657,

Оставит те задание, наименования которых не соответствуют указанным шаблонам.
14 июн 11, 18:21    [10812233]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
Sveta657
Member

Откуда:
Сообщений: 9
invm
Sveta657,

Оставит те задание, наименования которых не соответствуют указанным шаблонам.

А на оборот, дело в том что проще указать что оставить чем что удалить?
14 июн 11, 18:22    [10812240]     Ответить | Цитировать Сообщить модератору
 Re: Удаление Job-ов  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Sveta657,

Если надо наоборот, то замените not exists на exists.
14 июн 11, 21:13    [10812907]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить