Błąd przy usuwaniu JOBa po poprzednim usunięciu maintnance planu

7-Kwi-2014

Chciałem usunąć joby powiązane z maintnance planem. Zacząłem od  usunięcia maintnance planu, co udało się znakomicie! Maintanace planów już nie było, joby pozostały. Próbuję więc usunąć joba, a tu:

error_job_remove_maintnace_plan

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)

Job (tabela dbo.sysjobs)  jest powiązany z innymi obiektami (tabele sysmaintplan_log, sysmaintplan_subplans, sysjobschedules). Tabele są powiązane przez klucze obce, więc usuwanie można wykonać, ale trzeba to zrobić we właściwej kolejności. Moja propozycja:

USE msdb
GO
DECLARE @job_id UNIQUEIDENTIFIER
SELECT @job_id=job_id FROM sysjobs
WHERE name = 'Here enter the job name, which you like to remove'
BEGIN TRAN
   DECLARE @subplan_id UNIQUEIDENTIFIER
   SELECT @subplan_id=subplan_id FROM dbo.sysmaintplan_subplans where job_id = @job_id
   DELETE FROM dbo.sysmaintplan_log WHERE subplan_id = @subplan_id
   DELETE FROM dbo.sysmaintplan_subplans WHERE job_id = @job_id
   DELETE FROM dbo.sysjobschedules WHERE job_id= @job_id
   DELETE FROM dbo.sysjobs WHERE job_id = @job_id
COMMIT

Dodaj komentarz:

Autor: Rafał Kraik