SQL Server刪除Agent Job時發生錯誤547
某日刪除一些已不存在的維護計畫留在Agent中的Job,結果產生下面的錯誤訊息。
錯誤訊息顯示如下圖,從訊息看來應該是要刪除資料時由於資料有被關聯,導致刪
除失敗。
我們來重現一下問題,如下圖所示,我們建立一個維護計畫,用來備份Northwind資料庫
建立完成後,如下圖所示我們可以看見剛剛建立的維護計畫。
此時我們在該維護計畫上點選右鍵並選擇刪除,如下圖所示。
在跳出的視窗裡,我們點選如下圖紅色圈選處,讓SSMS產出刪除維護計畫的Script,
我們並沒有要真的刪除,只是要讓SSMS產生語法而已。
上一個步驟產出刪除Script後,我們如下圖紅色圈選處,按下取消鈕。
請大家記住這一個步驟,我們是按下取消按鈕而非確定歐。
此時查詢視窗會有我們剛剛SSMS產出刪除維護計畫的Script。我們可以看見SQL是呼叫
msdb.dbo.sp_maintplan_delete_plan刪除維護計畫。
這時我們點選維護計畫,並點選右鍵選擇重新整理。完成這一個動作後我們會見到
一個有趣的現象。
上一步驟執行後。如下圖所示,我們在維護計畫中居然看不到剛剛建立的維護計畫了。
剛剛我明明只有用UI產生刪除的Script後就按下取消鈕啊,並沒真的刪除該執行計畫
。為何剛剛的維護計畫會消失呢? 這我也不曉得,我就是吃了這虧才會發這篇文啊。
執行計畫莫名消失,但Agent中該維護計畫的Job居然還在。此時我們試著刪除它,
如下圖所示。
Oh No ! 刪除Job居然發生錯誤。
由上述錯誤訊息看來,SQL要刪除Job相關資料表時會因為資料表已被dbo.sysmaintplan_subplans
這一張資料表關聯而導致刪除失敗。而dbo.sysmaintplan_subplans裡的資料本該在刪除執行計畫時
就被刪除。但如果發生剛剛那種奇怪的情況,執行計畫不見了。我們該如何解決呢?
我們透過刪除維護計畫的msdb.dbo.sp_maintplan_delete_plan及
msdb.dbo.sp_maintplan_delete_subplan預存程序,可以看見在'
刪除維護計畫時會去刪掉dbo.sysmaintplan_subplans內的資料
(如下圖紅色圈選處)。
我們可以透過下圖語法來刪掉dbo.sysmaintplan_subplans中關聯Job資料表的相關資料
刪掉dbo.sysmaintplan_subplans中的資料後,我們再嘗試刪除Job看看。
如下圖所示,我們可以看見該Job已經順利刪除了。
結語 : 利用SSMS的UI產生刪除維護計畫的Script後,居然也會導致該執行計畫在UI中消失。
不曉得是不是一個BUG(個人覺得應該是BUG,因為這一個動作會刪除dbo.sysmaintplan_plans
中的資料也會刪除SSIS中該維護計畫的封裝檔,卻沒刪除dbo.sysmaintplan_subplans資料表
的資料)。
我是ROCK
rockchang@mails.fju.edu.tw