web-dev-qa-db-ja.com

SQL Serverメンテナンスプランでタスクを条件付きで指定する方法

毎週、毎晩のSQL Serverエージェントジョブで毎週、毎晩のメンテナンスプランを実行しています。

これらの毎週(日曜日)と毎晩(他の6夜)のメンテナンスプランは、最初のタスクのみが連続する6つのステップと異なります。つまり、毎晩/毎日のメンテナンスプランでは、最初のステップは「Reorganizeすべてのユーザーデータベースのインデックス」であり、毎週/日曜のメンテナンスプランでは、最初のステップは「再構築すべてのユーザーデータベース」。

6日間で最初のステップが1(インデックスの再編成)であり、残りの1週間で最初のステップが1週間であるという条件で、週7日すべての(2つではなく)1つだけのメンテナンスプランを実行することは可能ですか?別(インデックスの再構築)?

Daily Maintenance plan

Windows Server 2008 R2上のSQL Server 2012 R2

4
Fulproof

どれだけ汚いのかわからないが、唯一の方法は、SQL Serverデータツールを開いてSSISパッケージをビルド(または変更)することです。 1つは、SQL Server 2012データツールに保守計画をインポートし、SSISパッケージを変更することです。もう1つは、最初から作成することです。 SSISパッケージを作成するときに、メンテナンスプランと同じオプションがあります。

追加したいのは 式タスク です。これはSQL Server 2012へのすばらしい追加です。 DATEPART SSIS 式を使用して、それが平日かどうかを判断できますまたは週末 システム変数 に基づいて、パッケージの開始時間を示します。今、私は表現が得意ではありませんが、これは私が使用するものです:


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

これは、1から7までの数値を返します。1=日曜日、7 =土曜日です。したがって、そのタスクから、メンテナンスプランの各パスに2つの優先順位制約が適用されます。値が1の場合は、インデックスの再構築タスクに進み、それ以外の場合は、再編成タスクに進みます。

ただし、ここまで詳しく説明すると、メンテナンスプランでのインデックスタスクの使用は中止されます。インデックスの断片化をより効率的に維持するのに実際に役立つT-SQLコードを使用することをお勧めします。 SQL Serverが2012年にインデックスタスクで改善されたかどうかはわかりませんが、私は言います。インデックスの断片化管理に関する最もよく知られているソリューションは、 here 、Ola Hallengrenにあります。

5
user507