Sql-Server

如何有條件地在 SQL Server 維護計劃中指定任務?

  • October 31, 2013

我有一個每周和每晚的 SQL Server 代理作業,分別執行每周和每晚的維護計劃。

這些每週(週日)和每晚(一周中的其他 6 個晚上)維護計劃僅在第一個任務與總共連續六個步驟不同。也就是說,在夜間/每日維護計劃中,第一步是“在所有使用者數據庫上重新組織索引”,在每週/週日維護計劃中,第一步是“在所有使用者數據庫上重建索引”。

是否有可能以及如何只執行一個(而不是兩個)維護計劃,每週 7 個晚上,條件是在 6 天,第一步是一個(重組索引),而在一周的其餘 1 天,第一步是另一個(重建索引)?

日常維護計劃

Windows Server 2008 R2 上的 SQL Server 2012 R2

我不確定你想在這個上弄到什麼程度,但唯一的方法是打開 SQL Server Data Tools 並建構(或修改)一個 SSIS 包。一種是將維護計劃導入 SQL Server 2012 Data Tools 並修改 SSIS 包。另一種是從頭開始創建它。創建 SSIS 包時,您擁有與維護計劃相同的選項。

您要添加的一件事是Expression Task,這是對 SQL Server 2012 的一個很棒的補充。您可以使用DATEPART SSIS表達式根據包開始時間的系統變數來確定是工作日還是周末。現在我不是最擅長表達的,但這將是我會使用的:


DATEPART("dw",@[System::StartTime])

這將返回一個介於 1 和 7 之間的數字,其中 1 = 星期日,7 = 星期六。因此,從該任務開始,您將有兩個優先約束進入維護計劃的每個路徑。如果值為 1(一),那麼它會執行重建索引任務,如果是其他任何值,它就會執行重組任務。

雖然如果我要深入了解這麼多細節,我會停止使用帶有維護計劃的索引任務。我建議使用實際上可以幫助您更有效地維護索引碎片的 T-SQL 程式碼。我會說雖然我不知道 SQL Server 在 2012 年是否通過索引任務有所改進。可以在此處找到最著名的索引碎片管理解決方案Ola Hallengren。

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