在 Linux 上创建和运行 SQL Server 代理作业

适用于:SQL Server - Linux

SQL Server 作业用于在 SQL Server 数据库中定期执行相同的命令序列。 本教程提供使用 Transact-SQL 和 SQL Server Management Studio (SSMS) 在 Linux 上创建 SQL Server 代理作业的示例。

  • 在 Linux 上安装 SQL Server 代理
  • 创建新作业以执行每日数据库备份
  • 计划并运行作业
  • 在 SSMS 中执行相同的步骤(可选)

有关 Linux 上的 SQL Server 代理的已知问题,请参阅 Linux 上的 SQL Server 2017 发行说明

先决条件

若要完成本教程,需满足以下先决条件:

以下先决条件是可选的:

启用 SQL Server 代理

若要在 Linux 上使用 SQL Server 代理,必须先在安装了 SQL Server 的计算机上启用 SQL Server 代理。

  1. 若要启用 SQL Server 代理,请执行以下步骤。

    sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
    
  2. 使用以下命令重新启动 SQL Server:

    sudo systemctl restart mssql-server
    

注意

从 SQL Server 2017 (14.x) CU4 开始,SQL Server 代理包含在包 mssql-server 中,默认情况下处于禁用状态。 有关 CU 4 之前的代理设置,请参阅 在 Linux 上安装 SQL Server 代理

创建示例数据库

使用以下步骤创建名为 SampleDB 的示例数据库。 此数据库用于每日备份作业。

  1. 在 Linux 计算机上,打开 bash 终端会话。

  2. 使用 sqlcmd 运行 Transact-SQL CREATE DATABASE 命令。

    /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -Q 'CREATE DATABASE SampleDB'
    
  3. 通过列出服务器上的数据库来验证是否已创建该数据库。

    /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -Q 'SELECT name FROM sys.databases'
    

使用 Transact-SQL 创建作业

以下步骤使用 Transact-SQL 命令在 Linux 上创建 SQL Server 代理作业。 该作业运行示例数据库 SampleDB 的每日备份。

提示

可以使用任何 T-SQL 客户端运行这些命令。 例如,在 Linux 上,你可以使用安装 SQL Server 命令行工具 sqlcmd 和 bcp适用于 Visual Studio Code 的 SQL Server 扩展。 在远程 Windows Server 中,还可以在 SQL Server Management Studio (SSMS) 中运行查询,或使用 UI 界面进行作业管理,下一部分将对此进行说明。

  1. 使用sp_add_job创建名为Daily SampleDB Backup的作业。

    -- Adds a new job executed by the SQLServerAgent service
    -- called 'Daily SampleDB Backup'
    USE msdb;
    GO
    
    EXECUTE dbo.sp_add_job @job_name = N'Daily SampleDB Backup';
    GO
    
  2. 调用 sp_add_jobstep 来创建 SampleDB 数据库的备份。

    EXECUTE sp_add_jobstep
        @job_name = N'Daily SampleDB Backup',
        @step_name = N'Backup database',
        @subsystem = N'TSQL',
        @command = N'BACKUP DATABASE SampleDB TO DISK = \
                         N''/var/opt/mssql/data/SampleDB.bak'' WITH NOFORMAT, NOINIT, \
                         NAME = ''SampleDB-full'', SKIP, NOREWIND, NOUNLOAD, STATS = 10', @retry_attempts = 5, @retry_interval = 5;
    GO
    
  3. 然后使用 sp_add_schedule为作业创建每日计划。

    -- Creates a schedule called 'Daily'
    EXECUTE dbo.sp_add_schedule
        @schedule_name = N'Daily SampleDB',
        @freq_type = 4,
        @freq_interval = 1,
        @active_start_time = 233000;
    
    USE msdb;
    GO
    
  4. 使用 sp_attach_schedule将作业计划附加到作业。

    -- Sets the 'Daily' schedule to the 'Daily SampleDB Backup' Job
    EXECUTE sp_attach_schedule
        @job_name = N'Daily SampleDB Backup',
        @schedule_name = N'Daily SampleDB';
    GO
    
  5. 使用 sp_add_jobserver 将作业分配给目标服务器。 此示例中的目标是本地服务器。

    EXECUTE dbo.sp_add_jobserver
        @job_name = N'Daily SampleDB Backup',
        @server_name = N'(local)';
    GO
    
  6. 使用 sp_start_job启动作业。

    EXECUTE dbo.sp_start_job N' Daily SampleDB Backup';
    GO
    

使用 SSMS 创建作业

还可以在 Windows 上使用 SQL Server Management Studio (SSMS) 远程创建和管理作业。

  1. 在 Windows 上启动 SSMS 并连接到 Linux SQL Server 实例。 有关详细信息,请参阅 在 Windows 上使用 SQL Server Management Studio 管理 Linux 上的 SQL Server

  2. 验证是否已创建名为 SampleDB 的示例数据库。

    创建 SampleDB 数据库
  3. 验证 SQL 代理是否已 在 Linux 上安装 SQL Server 代理 并正确配置。 在对象资源管理器中,找到 SQL Server 代理旁边的加号。 如果未启用 SQL Server 代理,请尝试在 Linux 上重启 mssql-server 服务。

    显示如何验证是否已安装 SQL Server 代理的屏幕截图。

  4. 创建新作业。

    显示如何创建新作业的屏幕截图。

  5. 指定作业名称并创建作业步骤。

    显示如何创建作业步骤的屏幕截图。

  6. 指定要使用的子系统以及作业步骤应执行的操作。

    显示工作子系统的屏幕截图。

    显示作业步骤操作的屏幕截图。

  7. 创建新的作业计划。

    “新建作业”对话框的屏幕截图,其中突出显示了“计划”选项,并突出显示了“新建”选项。

    “新建作业”对话框的屏幕截图,其中已调出“确定”选项。

  8. 启动作业。

    显示如何启动 SQL Server 代理作业的屏幕截图。

下一步

在本教程中,你了解了如何执行以下操作:

  • 在 Linux 上安装 SQL Server 代理
  • 使用 Transact-SQL 和系统存储过程来创建作业
  • 创建用于执行每日数据库备份的作业
  • 使用 SSMS UI 创建和管理作业

接下来,探索用于创建和管理作业的其他功能: