メンテナンス プランを作成する

適用対象: SQL Server

この記事では、SQL Server Management Studio または Transact-SQL を使用して、SQL Server で単一サーバーまたはマルチサーバーのメンテナンス プランを作成する方法について説明します。 Management Studio でメンテナンス プランを作成するには、メンテナンス プラン ウィザードを使用するか、デザイン画面を使用するかの 2 つの方法があります。 基本的なメンテナンス プランを作成する場合は、ウィザードが最適です。それに対して、デザイン画面を使用してプランを作成すると、高度なワークフローを利用できます。

制限事項と制約事項

マルチサーバー メンテナンス プランを作成するには、1 台のマスター サーバーと 1 台以上のターゲット サーバーを含むマルチサーバー環境を構成する必要があります。 マルチサーバー メンテナンス プランは、マスター サーバー上で作成および管理する必要があります。 このプランはターゲット サーバー上でも表示できますが、ターゲット サーバーでは管理できません。

前提条件

Agent XP サーバー構成オプション を有効にする必要があります。

アクセス許可

メンテナンス プランを作成または管理するには、 sysadmin 固定サーバー ロールのメンバーである必要があります。

SQL Server Management Studio を使用します。

メンテナンス プラン ウィザードを使用してメンテナンス プランを作成する

  1. オブジェクト エクスプローラーで、プラス記号をクリックして、メンテナンス プランを作成するサーバーを展開します。

  2. プラス記号を選択して [管理] フォルダーを展開します。

  3. [メンテナンス プラン] フォルダーを右クリックし、 [メンテナンス プラン ウィザード]をクリックします。

  4. ウィザードの手順に従って、メンテナンス プランを作成します。 詳細については、「 Use the Maintenance Plan Wizard」をご覧ください。

デザイン画面を使用してメンテナンス プランを作成する

  1. オブジェクト エクスプローラーで、プラス記号をクリックして、メンテナンス プランを作成するサーバーを展開します。

  2. プラス記号を選択して [管理] フォルダーを展開します。

  3. [メンテナンス プラン] フォルダーを右クリックし、 [新しいメンテナンス プラン]をクリックします。

  4. メンテナンス プランの作成 (メンテナンス プラン デザイン画面)」の手順に従って、メンテナンス プランを作成します。

Transact-SQL の使用

メンテナンス プランを作成する

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. 標準バーで、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。

    この例では、コードが 23:30 (午後 11:30) に毎日実行してHumanResources.Employee データベースの AdventureWorks2022 テーブルのすべてのインデックスを再編成する SQL Agent ジョブを作成します。

    USE [msdb];
    GO
    --  Adds a new job, executed by the SQL Server Agent service, called "HistoryCleanupTask_1".
    EXEC [dbo].[sp_add_job] @job_name = N'HistoryCleanupTask_1',
                            @enabled = 1,
                            @description = N'Clean up old task history';
    GO
    -- Adds a job step for reorganizing all of the indexes in the HumanResources.Employee table to the HistoryCleanupTask_1 job.
    EXEC [dbo].[sp_add_jobstep] @job_name = N'HistoryCleanupTask_1',
                                @step_name = N'Reorganize all indexes on HumanResources.Employee table',
                                @subsystem = N'TSQL',
                                @command = N'USE [AdventureWorks2022];
    GO
    ALTER INDEX [AK_Employee_LoginID]
    ON [HumanResources].[Employee]
    REORGANIZE
    WITH (LOB_COMPACTION = ON);
    GO
    USE [AdventureWorks2022];
    GO
    ALTER INDEX [AK_Employee_NationalIDNumber]
    ON [HumanResources].[Employee]
    REORGANIZE
    WITH (LOB_COMPACTION = ON);
    GO
    USE [AdventureWorks2022];
    GO
    ALTER INDEX [AK_Employee_rowguid]
    ON [HumanResources].[Employee]
    REORGANIZE
    WITH (LOB_COMPACTION = ON);
    GO
    USE [AdventureWorks2022];
    GO
    ALTER INDEX [IX_Employee_OrganizationLevel_OrganizationNode]
    ON [HumanResources].[Employee]
    REORGANIZE
    WITH (LOB_COMPACTION = ON);
    GO
    USE [AdventureWorks2022];
    GO
    ALTER INDEX [IX_Employee_OrganizationNode]
    ON [HumanResources].[Employee]
    REORGANIZE
    WITH (LOB_COMPACTION = ON);
    GO
    USE [AdventureWorks2022];
    GO
    ALTER INDEX [PK_Employee_BusinessEntityID]
    ON [HumanResources].[Employee]
    REORGANIZE
    WITH (LOB_COMPACTION = ON);
    GO',
                                @retry_attempts = 5,
                                @retry_interval = 5;
    GO
    -- Creates a schedule named RunOnce that executes every day when the time on the server is 23:30.
    EXEC [dbo].[sp_add_schedule] @schedule_name = N'RunOnce',
                                 @freq_type = 4,
                                 @freq_interval = 1,
                                 @active_start_time = 233000;
    GO
    -- Attaches the RunOnce schedule to the job HistoryCleanupTask_1.
    EXEC [dbo].[sp_attach_schedule] @job_name = N'HistoryCleanupTask_1',
                                    @schedule_name = N'RunOnce';
    GO
    

次のステップ