Tags

,

Hoje no trabalho tive que apagar um Subplan de um plano de manutenção antigo. Até aí tudo bem. O problema é que o Job associado à esse Subplan não foi apagado. Quando eu tentei apagar o job recebi a seguinte mensagem de erro:

The DELETE statement conflicted with the REFERENCE constraint “FK_subplan_job_id”. The conflict occurred in database “msdb”, table “dbo.sysmaintplan_subplans”, column ‘job_id’.
The statement has been terminated. (Microsoft SQL Server, Error: 547)

Tentei utilizar a procedure sp_delete_job e obtive o mesmo erro. A saída foi apagar o job “na mão”! Para economizar tempo, verifiquei as tabelas envolvidas e criei um script para este serviço, basta apenas saber o Job_ID do job desejado.

select job_id, name from msdb.dbo.sysjobs
go

use msdb;
Declare @JobID uniqueidentifier;

set @JobID = <Coloque Aqui o JobID>; — Coloque aqui o valor correspondente ao job_id que deseja apagar

— que foi recuperado pela query anterior

if @JobID is null
raiserror (‘Favor Informar um JobID para Exclusão’, 16, 1)
else
begin
delete from sysjobschedules where job_id = @JobID
delete from sysmaintplan_log where plan_id = (select plan_id from [dbo].[sysmaintplan_subplans] where job_id =@JobID)
delete from sysmaintplan_subplans where job_id = @JobID
delete from sysjobstepslogs where step_uid in (select step_uid from sysjobsteps where job_id = @JobID )
delete from sysjobsteps WHERE job_id = @JobID
delete from sysjobservers where job_id = @JobID
delete from sysjobs where job_id = @JobID
end

Anúncios