11
votes

Obtenir la date de la dernière course réussie?

J'ai un travail unique qui exécute une procédure stockée. Je voudrais obtenir la date du dernier temps d'exécution du travail réussi afin que je puisse simplement mettre à jour un delta au lieu de l'ensemble des données.

En ce moment, j'ai la configuration de travail pour exécuter une fois tous les jours, j'ai donc un paramètre par défaut que si c'est Null, je l'ai défini sur GetDate () - 1 Donc, je suis toujours à jour un delta mais que je voudrais toujours Faire la date à la dernière exécution réussie du travail. P>

CREATE PROCEDURE dbo.usp_UpdateFrom
    @FromDate datetime = NULL --would like to pass last successful execution time of the job
AS
    IF @FromDate IS NULL
        SET @FromDate = GETDATE() - 1

    -- do stuff
END


0 commentaires

5 Réponses :


2
votes

regarder Cet article , il peut vous indiquer dans la bonne direction. Malheureusement, je n'ai pas de serveur SQL sur ma machine à domicile, je ne peux donc pas le tester pour vous!

Vous devez essentiellement interroger la table de sysjobactivité et obtenir les valeurs de start_execution_date et stop_execution_date. Vous aurez besoin de la tâche_id, mais je ne suis pas sûr de l'endroit où vous obtiendrez cela.

J'espère que cela aide.

edit OK, j'ai encore fait des recherches supplémentaires et trouva l'extrait de code suivant xxx


0 commentaires

19
votes

Les tables que vous voulez sont sysjobs et sysjobhistory dans msdb code>. Bien que soyez averti! SQL Server conserve uniquement un certain nombre d'enregistrements, donc s'il y a trop d'emplois et que l'historique n'est pas assez grand, vous vous retrouverez sans historique.

Le code suivant récupère le job_id code> pour le nom de travail donné et interroge la table d'historique pour la dernière exécution terminée avec succès (i.e. étape 0, état 1). Comme vous pouvez le constater, vous devez convertir le temps d'exécution à une date, car SQL Server le stocke dans deux colonnes INT: P>

DECLARE @job_id binary(16)
SELECT @job_id = job_id FROM msdb.dbo.sysjobs WHERE (name = N'YourJobName')

SELECT TOP 1
    CONVERT(DATETIME, RTRIM(run_date))
    + ((run_time / 10000 * 3600) 
    + ((run_time % 10000) / 100 * 60) 
    + (run_time % 10000) % 100) / (86399.9964) AS run_datetime
    , *
FROM
    msdb..sysjobhistory sjh
WHERE
    sjh.step_id = 0 
    AND sjh.run_status = 1 
    AND sjh.job_id = @job_id
ORDER BY
    run_datetime DESC


7 commentaires

Merci pour les informations sur Sysjobhistoire, j'ai bien peur d'être dépendant du nom du travail.


pensé que cela peut avoir été plus facile pour vous. C'est encore plus simple sans le nom de travail!


ouais, mais j'ai encore besoin d'obtenir le travail_id


Hmmm .. Vous pouvez obtenir cela manuellement en regardant msdb..sysjobs et le codé dans votre script ?. Le job_id ne change peut-être que si vous ne le supprimez pas. Si vous ne savez pas ce que le job_id est &, il peut changer, coller avec le nom de travail


La réponse que j'ai fournie montre comment obtenir le travail_id sans s'appuyer sur le nom du poste.


Oh. Tricky, j'aime ça! ne travaillera évidemment que si elle est courante à l'intérieur du travail


J'essaie quelque chose de similaire, mais j'ai deux problèmes: 1) est le run_date et run_time en UTC ou heure locale? Si c'est une heure locale, je dois rendre compte d'un changement de zone temporelle. 2) Quelle est la meilleure façon de changer ces deux éléments de chaînes numériques à une date javascript () ou de moment.js moment ()?



0
votes

Utilisation des informations des threads suivants:

http: // www .sqlteam.com / forums / topic.asp? topic_id = 112427 http://www.sqlservercenter.com/forums/topic542581-145-1. ASPX

C'est ce que je suis venu avec ... xxx

Je ne suis pas particulièrement à l'aise avec cela, mais je préfère ceci Méthode d'obtention du mode Job_ID en fonction du nom du travail.


0 commentaires

4
votes

Etant donné que sysjobhistory code> n'entre qu'un certain nombre d'enregistrements, je recommande d'utiliser sysjobactivité code>, qui conserve la dernière exécution "Historique" de chaque travail et session.

SELECT TOP 1 start_execution_date
FROM msdb.dbo.sysjobactivity
WHERE run_requested_date IS NOT NULL
AND job_id = @job_id
ORDER BY session_id DESC;


0 commentaires

1
votes

Pour obtenir la dernière exécution avec succès Emplois: xxx


0 commentaires