SQL维护计划中使用了哪些数据库?

时间:2015-11-22 20:02:40

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

我在用户登录应用程序时添加警报,如果Microsoft SQL数据库维护计划失败,未运行,未实现或从未调度过。我宁愿不添加设置来识别应该检查的维护计划。

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

我可以在此处查看所有维护计划的列表:SELECT * FROM msdb.dbo.sysmaintplan_plans

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

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

1 个答案:

答案 0 :(得分:-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

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