【问题标题】:Which databases are used within a SQL maintenance plan?SQL 维护计划中使用了哪些数据库?
【发布时间】:2015-11-22 20:02:39
【问题描述】:

当用户登录应用程序时,如果 Microsoft SQL 数据库维护计划失败、未运行、未实施或从未计划过,我将添加警报。我不希望添加设置来标识应检查的维护计划。

如何获取对当前数据库“SELECT db_name()”执行任何操作的维护计划列表?

我可以在这里看到所有维护计划的列表:SELECT * FROM msdb.dbo.sysmaintplan_plans

我猜我需要查询计划步骤并检查是否有任何包含我的数据库。

如果能够识别每个步骤的类型,那就太好了,即:完整性检查、索引重建、统计更新或备份等...然后我可以确保完成所有必需的步骤。

【问题讨论】:

    标签: sql sql-server-2008 sql-server-2012 maintenance-plan


    【解决方案1】:

    通过使用 SQL 分析器,我收集了几个查询并将这个单一的 SQL 放在一起,这将显示包含当前数据库的任何维护计划的日志历史记录。它会显示每个步骤以及是否成功。

    SELECT
        ld.server_name,
        mp.name AS [MTX Plan Name],
        msp.subplan_name AS [Sub Plan Name],    
        mpl.start_time AS [JobStart],
        mpl.end_time AS [JobEnd],
        mpl.succeeded AS [JobSucceeded],
        ld.start_time AS [StepStart],
        ld.end_time AS [StepEnd],
        ld.succeeded  AS [StepSucceeded],
        ld.line1,
        ld.line2,
        ld.line3,
        ld.line4,
        ld.line5,
        ld.command
    FROM
        msdb.dbo.sysmaintplan_plans mp
        INNER JOIN msdb.dbo.sysmaintplan_subplans msp ON mp.id = msp.plan_id
        INNER JOIN msdb.dbo.sysmaintplan_log mpl ON msp.subplan_id = mpl.subplan_id
        INNER JOIN msdb.dbo.sysmaintplan_logdetail ld ON mpl.task_detail_id = ld.task_detail_id
            AND ld.command LIKE ('%['+db_name()+']%')
    ORDER BY
        mpl.start_time DESC
    

    这最适用于向导生成的维护计划。 Ad-hoc 计划并不总是包含用于过滤的命令列。 但表格链接仍然有效。

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多