Aller au contenu

Recette SQL IBM i (AS/400) · Journaux

Qui a modifié une table, et quand : lire le journal

Lire le journal en SQL pour savoir qui a ajouté, modifié ou supprimé des lignes dans une table, quand, et depuis quel programme.

Le besoin

« Qui a modifié ce client ? » Si la table est journalisée, la réponse est dans le journal : chaque ajout, modification ou suppression y laisse une entrée avec l'heure, le travail et le programme.

La requête

SELECT ENTRY_TIMESTAMP, JOURNAL_ENTRY_TYPE, OBJECT, JOB_NAME, PROGRAM_NAME, SEQUENCE_NUMBER
FROM TABLE(QSYS2.DISPLAY_JOURNAL('JOBISQL', 'QSQJRN',
           STARTING_RECEIVER_NAME => '*CURAVLCHN',
           JOURNAL_CODES => 'R', JOURNAL_ENTRY_TYPES => 'PT,PX,UP,DL')) J
WHERE OBJECT LIKE '%CLIENT%'
ORDER BY ENTRY_TIMESTAMP DESC
FETCH FIRST 10 ROWS ONLY

QSYS2.DISPLAY_JOURNAL lit un journal. JOURNAL_CODES => 'R' garde les opérations sur les enregistrements ; les types PT/PX sont des ajouts, UP une modification, DL une suppression. *CURAVLCHN lit toute la chaîne de récepteurs disponible.

Le résultat sur un IBM i 7.5

Ce que l'IBM i a renvoyé le 01/10/2026 (5 lignes au plus) :

ENTRY_TIMESTAMP Horodatage de l'entrée JOURNAL_ENTRY_TYPE Type d'écriture de journal OBJECT Objet JOB_NAME Nom du travail PROGRAM_NAME Nom du programme SEQUENCE_NUMBER Numéro de séquence
2026-10-01 09:22:16.206592 PT CLIENTNEW JOBISQL CLIENTNEW QZDASOINIT QZDASOINIT 157
2026-10-01 09:05:29.641328 UP CLIENT2 JOBISQL CLIENT2 QZDASOINIT QZDASOINIT 37
2026-10-01 09:05:29.553824 PT CLIENT2 JOBISQL CLIENT2 QZDASOINIT QZDASOINIT 32
2026-10-01 09:05:29.553824 PT CLIENT2 JOBISQL CLIENT2 QZDASOINIT QZDASOINIT 33
2026-10-01 09:05:29.553824 PT CLIENT2 JOBISQL CLIENT2 QZDASOINIT QZDASOINIT 34

Sur nos tables de démonstration, on voit les ajouts et la modification faits lors de la création du bac à sable, avec le travail serveur SQL qui les a passés.

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 voir les valeurs, la colonne ENTRY_DATA contient l'image de l'enregistrement. Limitez toujours la période avec STARTING_TIMESTAMP sur un journal de production.