Sql Agent altında anlamsız olan genel rutin jobları silinmesi işleminde aşağıdaki hata mesajıyla karşılaşılmıştır. Bu hatanın neden kaynaklandığını detaylı bir şekilde inceleyelim..

Yukarıdaki resimde bulunan hata mesajı:
The DELETE statement conflicted with the REFERENCE constraint “FK_syspolicy_policies_sysjobs”. The conflict occurred in database “msdb”, table “dbo.syspolicy_policies_internal”, column ‘job_id’. The statement has been terminated. (Microsoft SQL Server, Error: 547)
SQL Server’daki bir job’u silmeye çalışırken, o job’ın Policy-Based Management (PBM) sistemiyle ilişkili olduğunu söylüyor.
Yani, o job bir Policy (syspolicy) tarafından kullanılıyor. Bu nedenle doğrudan silemiyorsun.
The DELETE statement conflicted with the REFERENCE constraint “FK_syspolicy_policies_sysjobs”.
Bu şu anlama geliyor:
• msdb.dbo.syspolicy_policies_internal tablosunda job_id sütunu, sysjobs.job_id değerine foreign key ile bağlı.
• Yani, o job şu anda bir policy’nin otomatik olarak çalışmasını sağlayan job konumunda.
• SQL Server, bu ilişkiyi korumak için silme işlemini engelliyor.
İlgili jobımızın hangi policy’e bağlı olduğunu bulmak için aşağıdaki komutla görebiliriz.
USE msdb;
GO
SELECT
p.name AS PolicyName,
p.policy_id,
p.job_id,
j.name AS JobName
FROM dbo.syspolicy_policies_internal p
JOIN dbo.sysjobs j ON p.job_id = j.job_id;

Bu sorgu, hangi policy’nin hangi job’a bağlı olduğunu gösterecektir. Job’ı silmek istiyorsan önce bu policy ilişkisini kaldırman gerekir.

Yukarıdaki resimde ilgili Policy’e sağ tıklayıp silebildiğimiz gibi aşağıdaki komut yardımıyla da silebiliriz.
USE msdb;
GO
DELETE FROM dbo.syspolicy_policies_internal
WHERE job_id = (
SELECT job_id FROM dbo.sysjobs WHERE name = 'Jobımızın_Adı'
);

Yukarıdaki komutu çalıştırdıktan sonra jobımızla birlikte önceden oluşturulan policy yapısınında silindiğini görmüş oluyoruz.

Belirtilen policy based management yapısına bağlı olarak job oluştuğu için ilgili policy silmemizle birlikte jobımız’da silinmiştir.
Özetle
• Hata, Policy-Based Management (PBM) tarafından oluşturulan bir ilişki yüzünden çıkıyor.
• Önce policy-job bağlantısını kaldır, sonra job’ı sil.
• İlgili policy’yi SSMS arayüzünden veya T-SQL ile silebilirsin.
Bu makalede bir job silerken karşılaşılan bir hataya değinmiş olduk. Başka makalede görüşmek dileğiyle..
Ey iman edenler, sabırla ve namazla yardım dileyin. Gerçekten Allah, sabredenlerle beraberdir. Bakara Suresi, 153. Ayet