Aller au contenu

Recette SQL IBM i (AS/400) · Travaux

Trouver les travaux bloqués en attente de message (MSGW)

Une requête SQL qui liste les travaux en état MSGW, ceux qui attendent qu'on réponde à un message : le premier contrôle à faire quand une chaîne batch n'avance plus.

Le besoin

Un travail en MSGW est arrêté : il a posé une question (un message d'interrogation) et attend une réponse. Tant que personne ne répond, la chaîne qui le suit ne démarre pas. Dans WRKACTJOB, il faut parcourir les sous-systèmes un par un pour les repérer ; en SQL, une seule requête les trouve tous.

La requête

SELECT JOB_NAME, SUBSYSTEM, AUTHORIZATION_NAME, JOB_STATUS, FUNCTION_TYPE, FUNCTION
FROM TABLE(QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO => 'NONE')) J
WHERE JOB_STATUS = 'MSGW'
ORDER BY SUBSYSTEM, JOB_NAME

QSYS2.ACTIVE_JOB_INFO renvoie une ligne par travail actif. DETAILED_INFO => 'NONE' évite de calculer les colonnes détaillées (SQL en cours, fichiers ouverts…), ce qui rend la requête bien plus rapide. Le filtre JOB_STATUS = 'MSGW' ne garde que les travaux bloqués.

Le résultat sur un IBM i 7.5

La requête n'a renvoyé aucune ligne.

Aucune ligne sur notre IBM i de test : aucun travail n'était bloqué au moment de l'exécution. C'est le résultat attendu sur un système en bonne santé.

Données anonymisées : les noms de système, de profils, de bibliothèques, de postes et les adresses IP ont été remplacés.

L'adapter à votre système

Pour lire le message qui bloque, ajoutez la dernière ligne de l'historique du travail avec QSYS2.JOBLOG_INFO(JOB_NAME), ou regardez la file QSYSOPR (recette suivante). Planifiée toutes les 10 minutes, la requête peut alimenter une alerte.