C-Sharp

使用 SQL Server 2008 和儲存過程進行日常數據庫維護

  • December 10, 2019

通過SQL Server 2005 的連結,我已經使用嚮導創建了一個數據庫維護計劃。

我已經為 SQL Server 2008 創建了一個維護計劃,它執行良好。

現在我需要為我的桌面應用程序使用儲存過程來完成相同的任務。

我已經為此嘗試過這個儲存過程,但它對我不起作用。

儲存過程執行成功,我也可以在系統數據庫的表sysdbmaintplans中 看到輸入的值,msdb但創建的維護計劃不顯示對象資源管理器(SQL Server Management Studio)的樹下(管理=>維護計劃)。

請幫忙…

下面是我嘗試過的程式碼片段。

//   sp_add_maintenance_plan [ @plan_name = ] 'plan_name' , 
//@plan_id = 'plan_id' OUTPUT

String planid = "";

string maintenancePlan = "MyMaintenance";

string SQLstr = "DECLARE @plan_id as Varchar(50)";
SQLstr += " EXEC sp_add_maintenance_plan ";
SQLstr += " @plan_name='" + maintenancePlan + "',";
SQLstr += " @plan_id= @plan_id OUTPUT";
SQLstr += " SELECT @plan_id";

SqlConnection cnn = new SqlConnection(MSDBconnStr);
SqlCommand cmd = new SqlCommand(SQLstr, cnn);

cnn.Open();
planid = (string)cmd.ExecuteScalar();
cnn.Close();

//   sp_add_maintenance_plan_db [ @plan_id = ] 'plan_id' , 
//[ @db_name = ] 'database_name'

string maintenancePlanDataBase = "MyDataBase";
string SQLstr1 = " EXEC sp_add_maintenance_plan_db ";
SQLstr1 += " @plan_id='" + planid + "',";
SQLstr1 += " @db_name='" + maintenancePlanDataBase + "'";

SqlConnection cnn1 = new SqlConnection(MSDBconnStr);
SqlCommand cmd1 = new SqlCommand(SQLstr1, cnn1);

cnn1.Open();
cmd1.ExecuteNonQuery();
cnn1.Close();

不要使用維護計劃,而是查看Ola Hallengren 的免費維護儲存過程。它們比維護計劃更強大,並且不需要 SSMS(根據您的要求)來實施。您可以使用任何 T-SQL 連接來設置它們。

專門解決你的問題。聽起來您的桌面版本大於 SQL 2008,並且該計劃很可能隱藏在 SSIS 結構中。(並且 sp_add_maintenance_plan_db 可能已被棄用)。我將使用您的計劃 ID 嘗試以下操作,以在您的 SQL Server 的較新版本中公開該計劃。(請讓我們知道您桌面上的 SQL Server 版本)。

EXECUTE   sp_add_maintenance_plan N'Myplan',@plan_id=@myplan_id OUTPUT  

參考: https ://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-add-maintenance-plan-transact-sql?view=sql-server-ver15

引用自:https://dba.stackexchange.com/questions/20192