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.