1. 程式人生 > >SQLSERVER 維護計劃無法刪除

SQLSERVER 維護計劃無法刪除

資料對網站運營或者企業運營是至關重要的,所以,我們在使用資料庫的時候,為了保證資料的安全可靠性,都會做資料庫備份,很顯然,這個備份,我們不可能每天都去手動備份,SQLServer 資料庫就可以提供資料庫定時備份的任務,你可以設定按照天、周、月、年等不同設定不同的備份週期,這裡我就不在介紹自動備份的設定了,百度教程可以找到一大波,最重要的一點就是,一定要開啟Sqlserver 代理服務,否則自動備份就無法執行了。

設定好了,資料庫會在【管理】-【維護計劃】中建立一條記錄,同時,也會在【Sql server 代理】-【作業】中建立一條作業記錄;如下圖:

 

 

然後,一段時間過去了……

我們的自動備份失效了,或者自動備份不需要了,我們需要刪除;

正常情況下,只要在【管理】-【維護計劃】中,找到不需要的維護計劃,滑鼠右鍵-刪除就可以了,同時,資料庫也會把【Sql server代理】中的記錄也會刪除;

 

非正常情況下,就是滑鼠右鍵無法刪除的情況了,我們則需要通過SQL程式碼來刪除;

刪除需要分兩部分:

一:刪除【管理】中的維護計劃;

USE [msdb]
SELECT * FROM sysmaintplan_plans	       --檢視資料庫中所有的維護計劃
DELETE sysmaintplan_plans WHERE name=''	        --刪除具體名稱的維護計劃

二:刪除【Sql server代理】中的作業;

USE [msdb]
Declare @job_name varchar(100)
SET @job_name = N'jobName'
--注:jobName為維護計劃對應的jobName

--刪除在計劃裡面的日誌
DELETE sysmaintplan_log 
FROM sysmaintplan_subplans as subplans
INNER JOIN sysjobs_view as syjobs on subplans.job_id = syjobs.job_id
INNER JOIN sysmaintplan_log on subplans.subplan_id =sysmaintplan_log.subplan_id
WHERE (syjobs.name = @job_name)

--刪除代理的作業
DELETE sysjobschedules 
FROM sysjobs_view v
INNER JOIN sysjobschedules o on v.job_id=o.job_id 
WHERE 
[email protected]
_name --刪除子計劃 DELETE sysmaintplan_subplans FROM sysmaintplan_subplans as subplans INNER JOIN sysjobs_view as syjobs ON subplans.job_id = syjobs.job_id WHERE (syjobs.name = @job_name) --刪除作業 DELETE FROM msdb.dbo.sysjobs_view WHERE name = @job_name