创建维护计划

适用于:SQL Server

本文介绍了如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中创建单服务器或多服务器维护计划。 通过使用 Management Studio,可以通过以下两种方式创建维护计划:使用维护计划向导或设计图面。 向导是创建基本维护计划的最佳方法,而使用设计图面创建计划允许您使用增强的工作流。

限制和约束

若要创建多服务器维护计划,必须配置包含一个主服务器和一个(或多个)目标服务器的多服务器环境。 必须在主服务器上创建和维护多服务器维护计划。 在目标服务器上可以查看这些计划,但不能进行维护。

先决条件

必须启用 “代理 XP”服务器配置选项

权限

若要创建或管理维护计划,您必须是 sysadmin 固定服务器角色的成员。

使用 SQL Server Management Studio

使用维护计划向导创建维护计划

  1. 在对象资源管理器中,选择加号以展开要创建维护计划的服务器。

  2. 选择加号以展开“管理”文件夹。

  3. 右键单击“维护计划”文件夹,然后选择“维护计划向导”

  4. 按照向导中显示的步骤创建维护计划。 有关详细信息,请参阅 Use the Maintenance Plan Wizard

使用设计图面创建维护计划

  1. 在对象资源管理器中,选择加号以展开要创建维护计划的服务器。

  2. 选择加号以展开“管理”文件夹。

  3. 右键单击“维护计划” 文件夹,然后选择“新建维护计划”

  4. 按照 创建维护计划(维护计划设计图面) 中的步骤创建维护计划。

使用 Transact-SQL

创建维护计划

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    在此例中,该代码会创建一个每日 SQL 代理作业,该作业在 23:30(晚上 11:30)运行,以重新组织 HumanResources.Employee 数据库中 AdventureWorks2022 表的所有索引。

    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
    

后续步骤