SQL Server刪除Agent Job時發生錯誤547

SQL Server刪除Agent Job時發生錯誤547

 

某日刪除一些已不存在的維護計畫留在Agent中的Job,結果產生下面的錯誤訊息。

錯誤訊息顯示如下圖,從訊息看來應該是要刪除資料時由於資料有被關聯,導致刪

除失敗。

clip_image002

 

 

 

我們來重現一下問題,如下圖所示,我們建立一個維護計畫,用來備份Northwind資料庫

clip_image004

 

 

 

建立完成後,如下圖所示我們可以看見剛剛建立的維護計畫。

clip_image006

 

 

此時我們在該維護計畫上點選右鍵並選擇刪除,如下圖所示。

clip_image008

 

 

 

在跳出的視窗裡,我們點選如下圖紅色圈選處,讓SSMS產出刪除維護計畫的Script,

我們並沒有要真的刪除,只是要讓SSMS產生語法而已

clip_image010

 

 

 

上一個步驟產出刪除Script後,我們如下圖紅色圈選處,按下取消鈕。

請大家記住這一個步驟,我們是按下取消按鈕而非確定歐。

clip_image012

 

 

 

此時查詢視窗會有我們剛剛SSMS產出刪除維護計畫的Script。我們可以看見SQL是呼叫

msdb.dbo.sp_maintplan_delete_plan刪除維護計畫。

clip_image014

 

 

 

 這時我們點選維護計畫,並點選右鍵選擇重新整理。完成這一個動作後我們會見到

一個有趣的現象。

clip_image016

 

 

 

 

上一步驟執行後。如下圖所示,我們在維護計畫中居然看不到剛剛建立的維護計畫了。

剛剛我明明只有用UI產生刪除的Script後就按下取消鈕啊,並沒真的刪除該執行計畫

。為何剛剛的維護計畫會消失呢? 這我也不曉得,我就是吃了這虧才會發這篇文啊

clip_image018

 

 

 

執行計畫莫名消失,但Agent中該維護計畫的Job居然還在。此時我們試著刪除它,

如下圖所示。

clip_image020

 

 

 

Oh No ! 刪除Job居然發生錯誤。

clip_image022

clip_image024

 

 

 

由上述錯誤訊息看來,SQL要刪除Job相關資料表時會因為資料表已被dbo.sysmaintplan_subplans

這一張資料表關聯而導致刪除失敗。而dbo.sysmaintplan_subplans裡的資料本該在刪除執行計畫時

就被刪除。但如果發生剛剛那種奇怪的情況,執行計畫不見了。我們該如何解決呢?

 

 

我們透過刪除維護計畫的msdb.dbo.sp_maintplan_delete_plan

msdb.dbo.sp_maintplan_delete_subplan預存程序,可以看見在'

刪除維護計畫時會去刪掉dbo.sysmaintplan_subplans內的資料

(如下圖紅色圈選處)

clip_image026

 

 

我們可以透過下圖語法來刪掉dbo.sysmaintplan_subplans中關聯Job資料表的相關資料

clip_image028

 

 

 

 刪掉dbo.sysmaintplan_subplans中的資料後,我們再嘗試刪除Job看看。

clip_image030

 

 

 

 

如下圖所示,我們可以看見該Job已經順利刪除了。

clip_image032

 

 

 

結語 : 利用SSMS的UI產生刪除維護計畫的Script後,居然也會導致該執行計畫在UI中消失。

 

不曉得是不是一個BUG(個人覺得應該是BUG,因為這一個動作會刪除dbo.sysmaintplan_plans

 

中的資料也會刪除SSIS中該維護計畫的封裝檔,卻沒刪除dbo.sysmaintplan_subplans資料表

 

的資料)。

 

我是ROCK

rockchang@mails.fju.edu.tw