0

J'ai besoin d'aide pour créer une requête SQL par rapport aux 'activations de travail' pour les travaux corrigés 5/10 sur les serveurs SQL diff. Fondamentalement, j'ai besoin de produire une liste comme ci-dessous, économisez-moi aller dans l'activité de travail chaque fois que montre les emplois ci-dessous, tout en commençant par le nom «MAINTENANCE - BACKUP ..» idéalement, puis les colonnes suivantes - Enabled/Status/Last Run résultat/Last Run/Next RunCréation d'une requête SQL pour répertorier les échecs de travail dans un délai de 24 heures

enter image description here

une fois que je peux assitain emplois qui sont activés, ont Réussi etc. Je puis vérifier l'historique de chaque emploi dans le délai de 24 heures, faisant une note du temps de chaque échec et l'erreur/raison pour laquelle. J'ai plusieurs requêtes sur Internet qui me donnent les détails que je recherche, mais je ne sais pas comment réordonner le code/requête et juste choisir ce dont j'ai besoin spécifiquement.

+0

Qu'avez-vous essayé? Pouvez-vous poster du code montrant exactement ce que vous rencontrez des problèmes? –

+0

[link] (http://pastebin.com/Mk4Uv7CN) & [link] (http://pastebin.com/QwiBBMW1) sont les deux jeux de code sur lesquels j'ai joué avec – JChutey

+0

Mettez-vous sur la liste des notifications pour quand le travail échoue. Peasy facile. –

Répondre

1

Vous pouvez créer une vue, à partir de ce code et sélectionnez via les dates:

SELECT Job.instance_id 
    ,SysJobs.job_id 
    ,SysJobs.name as 'JOB_NAME' 
    ,SysJobSteps.step_name as 'STEP_NAME' 
    ,Job.run_status 
    ,Job.sql_message_id 
    ,Job.sql_severity 
    ,Job.message 
    ,Job.exec_date 
    ,Job.run_duration 
    ,Job.server 
    ,SysJobSteps.output_file_name 
FROM (SELECT Instance.instance_id 
    ,DBSysJobHistory.job_id 
    ,DBSysJobHistory.step_id 
    ,DBSysJobHistory.sql_message_id 
    ,DBSysJobHistory.sql_severity 
    ,DBSysJobHistory.message 
    ,(CASE DBSysJobHistory.run_status 
     WHEN 0 THEN 'Failed' 
     WHEN 1 THEN 'Succeeded' 
     WHEN 2 THEN 'Retry' 
     WHEN 3 THEN 'Canceled' 
     WHEN 4 THEN 'In progress' 
    END) as run_status 
    ,((SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 5, 2) + '/' 
    + SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 7, 2) + '/' 
    + SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 1, 4) + ' ' 
    + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time AS varchar))) 
    + CAST(DBSysJobHistory.run_time AS VARCHAR)), 1, 2) + ':' 
    + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time AS VARCHAR))) 
    + CAST(DBSysJobHistory.run_time AS VARCHAR)), 3, 2) + ':' 
    + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time as varchar))) 
    + CAST(DBSysJobHistory.run_time AS VARCHAR)), 5, 2))) AS 'exec_date' 
    ,DBSysJobHistory.run_duration 
    ,DBSysJobHistory.retries_attempted 
    ,DBSysJobHistory.server 
    FROM msdb.dbo.sysjobhistory DBSysJobHistory 
    JOIN (SELECT DBSysJobHistory.job_id 
     ,DBSysJobHistory.step_id 
     ,MAX(DBSysJobHistory.instance_id) as instance_id 
     FROM msdb.dbo.sysjobhistory DBSysJobHistory 
     GROUP BY DBSysJobHistory.job_id 
     ,DBSysJobHistory.step_id 
     ) AS Instance ON DBSysJobHistory.instance_id = Instance.instance_id 
    WHERE DBSysJobHistory.run_status <> 1 
    ) AS Job 
JOIN msdb.dbo.sysjobs SysJobs 
    ON (Job.job_id = SysJobs.job_id) 
JOIN msdb.dbo.sysjobsteps SysJobSteps 
    ON (Job.job_id = SysJobSteps.job_id AND Job.step_id = SysJobSteps.step_id) 
+0

Cette requête semble très bien fonctionner! J'ai enlevé certaines parties qui ne sont pas nécessaires (peut-être un code redondant toujours là). Existe-t-il un moyen de montrer seulement Job avec le nom du travail commençant par 'MAINTENANCE - BACKUP' et aussi ajouter les colonnes supplémentaires - – JChutey

+0

Désolé je n'avais pas fini le commentaire ci-dessus ... Cette question semble fonctionner vraiment bien! Je suis un peu confus cependant, car j'ai besoin idéalement d'une requête pour me montrer le statut actuel de l'activité du travail, puis une autre pour aller dans l'historique des tâches pour chaque activité et vérifier les échecs au cours des dernières 24 heures. Cette requête semble être pour la 2ème partie, ce qui est génial! J'ai enlevé certaines parties qui ne sont pas nécessaires (peut-être un code redondant encore là). Est-il possible de montrer seulement Job avec le nom du travail en commençant par le texte 'MAINTENANCE - BACKUP'. Je n'ai pas besoin de modifier cette partie car elle semble fonctionner correctement – JChutey

+1

Voici un [link] (http://pastebin.com/2AMk3CWy) pour mon code modifié. Merci beaucoup pour ton aide! – JChutey

0

est ici les 24 dernières heures de détails emploi que vous aviez besoin ... ou ça va obtenir votre commencé de toute façon .

select 
    j.name as JobName, 
    j.enabled, 
    j.date_created, 
    a.start_execution_date, 
    a.stop_execution_date, 
    a.next_scheduled_run_date, 
    h.run_date, 
    h.run_time, 
    case 
     when h.run_status = 0 then 'Failed' 
     when h.run_status = 1 then 'Succeeded' 
     when h.run_status = 2 then 'Retry' 
     when h.run_status = 3 then 'Canceled' 
    end as LastRunOutcome 
from 
    msdb.dbo.sysjobs j 
    inner join msdb.dbo.sysjobactivity a on 
    a.job_id = j.job_id 
    inner join msdb.dbo.sysjobhistory h on 
    h.job_id = j.job_id 
    inner join 
    (select job_id, max(run_date) dt 
    from msdb.dbo.sysjobhistory 
    group by job_id) h2 on h2.job_id = h.job_id and h2.dt = h.run_date 
where 
    cast(a.start_execution_date as date) = cast(getdate() as date) 
+0

Cette requête me donne le message; Msg 243, niveau 16, état 1, ligne 1 La date de type n'est pas un type de système défini. Msg 243, niveau 16, état 1, ligne 1 La date de type n'est pas un type de système défini. – JChutey

+0

Vous utilisez le serveur SQL @JChutey? – scsimon

+0

Il est SQL Server, mais j'ai seulement accès à la base de données via le serveur Mgmt Studio – JChutey