C’est une solution à base d’UIM qui permet de gérer des sous fichiers sans écran DDS, en utilisant un panel de groupe et des API pour le manipuler.
Toutes les commandes WRKXXX de votre IBMi sont codées avec cette solution.
Nous allons vous présenter un exemple pour les PF par exemple vous trouverez le code sur github ici https://github.com/Plberthoin/PLB/tree/master/WRKPF
Cet article est inspiré à l’origine d’un article de mcpressonline, j’ai remis le RPG à jour
Vous devrez avoir un PNLGRP avec la structure suivante, pour indiquer les listes
Vous aurez un programme ici en RPG qui va utiliser les API suivantes :
Api Utilisation
QUIOPNDA Ouverture du panel création du Handle QUIPUTV Renseignement variable QUIADDLE Ecriture d’un poste dans la liste QUIDSPP Affichage du panel QUIDLTL Suppression du contenu de la liste QUICLOA Fermeture du panel
Rappel, vous pouvez chercher les APIs disponibles sur votre IBMi avec API-FINDER disponible
C’est une solution standard qui ne nécessite pas de DSPF, mais qui nécessite de connaitre un peu le langage UIM. Avec un squelette de PNL et de programme on peut créer des outils WRKXXX rapidement, idéal pour les outils d’administration par exemple
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-08-08 07:55:242023-08-11 15:55:44Exemple de panel liste
Administration, Non classé, Open source, SecuritéSe connecter à un serveur SSH exécuté sous Windows à partir d’un IBM i (Comment obtenir la log pour débuguer les problèmes éventuels)
Se connecter à un serveur SSH exécuté sous Windows à partir d’un IBM i (Comment obtenir la log pour débuguer les problèmes éventuels)
Mise en place d’OpenSSH Server sur Windows
Pour mettre en place OpenSSH Server sur Windows, la méthode « standard » consiste à passer par les Paramètres > Applications et fonctionnalités > fonctionnalités facultatives :
Il est recommandé de redémarrer Windows une fois la fonctionnalité ajoutée.
Il suffit ensuite de démarrer le serveur via le gestionnaire de Services Windows :
Il est également souhaitable de configurer le démarrage automatique du serveur :
Remarque
Il est également possible d’installer OpenSSH sur Windows via d’autres sources (GitHub par exemple) ce qui permet, entre autres, de choisir plus facilement sa version d’OpenSSH, voir section Détail.
Création d’un jeu de clefs SSH via ssh-keygen
Pour plus de détails sur la création de clefs, vous pouvez vous référer à l’article de Guillaume Gestion des clefs SSH.
Dans cet article je vais tout réaliser sur l’IBM i via QSH :
$ ssh-keygen -t ecdsa -f ~/.ssh/ssh_key
Mise en place de la clef privée et configuration côté IBM i (client)
On a généré la clef privée dans le répertoire .ssh de l’utilisateur, donc elle est déjà bien en place. Il suffit donc de créer un fichier config dans le répertoire .ssh de l’utilisateur afin de simplifier nos commandes pour la suite. Voici un exemple de fichier config :
[~/.ssh/config]
Host windows
Hostname sshd_server.lan
User jl
IdentityFile ~/.ssh/key
StrictHostKeyChecking accept-new
Host
Nom de la configuration, utilisé à la place des différentes informations à la connexion
Hostname
Adresse ou nom du serveur à atteindre
User
Nom de l’utilisateur
IdentityFile
Chemin vers la clef privée
StrictHostKeyChecking accept-new
Permet d’ajouter automatiquement la signature du serveur distant au known_hosts
Mise en place de la clef privée et configuration côté Windows (serveur)
Il faut transférer la clef ssh_key.pub vers Windows et l’ajouter soit au fichier %UserProfile%.ssh\authorized_keys pour un utilisateur lambda, soit au fichier C:\ProgramData\ssh\administrators_authorized_keys pour un utilisateur ayant des droits d’administrateur local.
Attention à ce niveau, les droits des fichiers sont un peu particulières, il faut comme toujours avec le SSH réduire au maximum les utilisateurs ayant accès au fichier et, particularité de Windows, ajouter le droit de lecture au profil de service local Système :
Activation du fichier de log – Configuration sshd_config
Afin de pouvoir analyser d’éventuels problèmes ou simplement vouloir observer un peu plus en détail les différentes étapes de la mise en relation d’un flux ssh il est possible d’activer la log du serveur.
Par défaut celle-ci est redirigée vers les journaux d’évènements Windows et est seulement en « info ». On les retrouver via l’Observateur d’événements Windows :
Le mieux à mon avis est de repasser par un système plus standard, soit un vrai fichier de logs.
Pour ce faire, il faut aller modifier le fichier de configuration du serveur SSH, généralement il se trouve ici :
C:\ProgramData\ssh\sshd_config
ou
%ProgramData%\ssh\sshd_config
Il faut rechercher les lignes suivantes :
[sshd_config]
# Logging
#SyslogFacility AUTH
#LogLevel INFO
Les décommenter et indiquer les valeurs suivantes :
Une fois la configuration modifiée et le serveur redémarré, il suffit de retenter une connexion puis d’aller consulter le fichier de log :
C:\ProgramData\ssh\logs\sshd.log
ou
%ProgramData%\ssh\logs\sshd.log
Remarque
Les problèmes courants se passent généralement autour des lignes liées au fichier authorized_keys ou administrators_authorized_keys, problèmes de droits ou chemin du fichier utilisé…
Test de SSH IBM i vers Windows
On peut maintenant tester le tout via QSH ou CALL QP2TERM. Grâce au fichier config la commande est simple : (l’option -T permet de désactiver l’allocation d’un pseudo terminal)
$ ssh -T windows
Microsoft Windows [version 10.0.19045.3208]
(c) Microsoft Corporation. Tous droits r
Il est maintenant possible d’exécuter des commandes Shell Windows à partir de cette connexion.
Si on voulait obtenir les mêmes niveaux de log côté client (IBM i) que l’on a activé côté Windows, on pourrait utiliser la commande suivante :
$ ssh -T -vvv windows
OpenSSH_8.0p1, OpenSSL 1.1.1t 7 Feb 2023
debug1: Reading configuration data /home/jl/.ssh/config
debug1: /home/jl/.ssh/config line 1: Applying options for *
debug1: /home/jl/.ssh/config line 4: Applying options for laptop
debug1: Reading configuration data /QOpenSys/QIBM/ProdData/SC1/OpenSSH/etc/ssh_config
...
Microsoft Windows [version 10.0.19045.3208]
(c) Microsoft Corporation. Tous droits r
https://www.gaia.fr/wp-content/uploads/2023/08/Openssh.gif191194Julien/wp-content/uploads/2017/05/logogaia.pngJulien2023-08-02 19:21:092023-08-11 16:00:34Se connecter à un serveur SSH exécuté sous Windows à partir d’un IBM i (Comment obtenir la log pour débuguer les problèmes éventuels)
En sélectionnant la bibliothèque et le fichier, vous pouvez soit utiliser le résultat dans un programme CLLE. Ou directement dans un select avec la fonctions SQL QCMDEXC
3) Sans générer de fichier
Cette méthode est moins connue, mais elle permet de traiter tous les membres d’un fichier sans générer de fichier intermédiaire
Vous allez avoir un programme CLLE, qui aura cette logique
Vous allez récupérer le premier membre RTVMBRD FILE(LIB/FIL) MBR(*FIRSTMBR) RTNMBR(&MBR) MONMSG MSGID(CPF0000) EXEC(do) ENDDO
Vous allez ensuite boucler sur les suivants RTVMBRD FILE(LIB/&FIL) MBR(&MBR *NEXT) RTNMBR(&MBR) MONMSG MSGID(CPF3049) EXEC(leave)
Vous allez ainsi lire tous vos membres de votre fichier.
Vous pouvez également utiliser cette méthode pour traiter des membres de transfert qui arriveraient dans votre fichier.
Conclusion :
Vous avez 3 solutions pour les traiter les membres d’un fichier, à vous de choisir la méthode la plus adapter à votre traitement
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-07-25 12:10:102023-08-11 16:02:47Traiter les membres d’un fichier
Sécurisez vos services IBM i ! Nous ne le répéterons jamais suffisamment : vous devez crypter les accès au telnet 5250, au serveur de base de données etc … Bref partout où transitent aussi bien vos profils/mots de passe que vos informations métier.
Nous prenons ici l’exemple de telnet, le plus visuel.
Pour crypter vos connexions telnet : https://www.ibm.com/docs/en/i/7.5?topic=server-assigning-certificate-telnet
En synthèse :
Importer ou créer un certificat dans DCM (Digital Certificate Manager)
Associer ce certificat aux services à sécuriser : TELNET ici mais aussi CENTRAL, SIGNON, DATABASE …
Ne pas oublier de permettre la connexion sécurisée à telnet :
Permettre l'accès non sécurisé et sécurisé (ports 23 et 992) :
CHGTELNA ALWSSL(*YES)
Permettre l'accès sécurisé uniquement (port 992 uniquement) :
CHGTELNA ALWSSL(*ONLY)
Dès lors vous pouvez vous connecter avec ACS en mode sécurisé. Soit en indiquant au niveau de la configuration dans l’émulateur 5250 (menu Communication puis Configuration) :
Soit au niveau de la connexion système dans sa globalité :
A la prochaine connexion vous obtenez :
Mais comment ces certificats sont-ils gérés par ACS ?
Principe d’un certificat, chaîne de certification
Un certificat est une clé de cryptage permettant de chiffrer les données entre un serveur et un client.
La question est de savoir comment faire confiance à un certificat (celui de votre banque par exemple ?).
Un certificat est lui-même signé, c’est à dire validé, par une autorité de certification à laquelle nous faisons confiance.
Exemple avec les informations issues d’un navigateur :
Le navigateur fait confiance à www.volubis.fr car le certificat est lui-même signé par « Gandi Standard SSL CA 2 » et « USERTrust RSA Certification Authority » qui sont eux connus du navigateur :
D’autres critères entrent en compte comme la durée de validité par exemple
Pour un certificat non reconnu par votre navigateur, vous avez :
Validation par Access Client Solutions
ACS va utiliser la même mécanique : si l’autorité de certification est connue de ACS, alors le certificat est validé.
Si l’autorité n’est pas connue : demande à l’utilisateur de valider ou non l’accès.
Access Client Solutions utilise plusieurs magasins de certificats pour stocker les autorités :
le magasin lié à votre JVM qui exécute ACS
un magasin propre à ACS en complément
Magasin lié à la JVM
Pour trouver la JVM utilisée par ACS :
Java utilise par défaut un magasin de certificats JAVA_HOME\lib\security\cacerts. Ce magasin est protégé par un mot de passe (défaut = changeit)
Remarque :
Cette configuration par défaut peut être modifiée par fichier de configuration ou arguments de démarrage de la JVM.
Nous retrouvons bien notre autorité primaire « USERTrust RSA Certification Authority » :
Magasins liés à ACS
Par défaut, chaque utilisateur d’ACS dispose de son propre magasin de certificat (complémentaire à celui de l’environnement Java ci-dessus).
Dans les préférences vous retrouvez l’emplacement des configurations :
Access Client Solutions dispose également d’un outil de gestion des certificats pour son propre magasin uniquement : menu « Outils » puis « Gestion des clés » :
Cela vous permet d’importer, supprimer, voir vos certificats.
Remarque :
Cette configuration par défaut peut être modifiée par fichier de configuration AcsConfig.properties : permet d’indiquer l’emplacement du magasin de certificats.
Cas d’un certificat « internet »
Si vous avez acheté votre certificat auprès d’un organisme certificateur (Gandi pour nous, mais aussi OVH, Sectigo … Let’s encrypt gratuit), Access Client Solutions ne devrait rien vous demander et accepter directement le certificat : les autorités présentes dans le magasin associé à votre JVM permettent la validation.
Vous pouvez rencontrer des problèmes avec d’anciennes installations de Java non mises à jour : les nouvelles autorités de certification ne seront pas présentes. Bien sûr cela n’arrive jamais.
Cas d’un certificat « local »
Pour un certificat que vous avez généré sur votre IBM i, ou autre plateforme dans votre SI, si vous disposez de vos propres autorités de certification internes (fréquent dans les sociétés de grande taille) : Access Client Solutions ne dispose pas des autorités permettant la validation !
Remarque :
Si vos équipes de déploiement des postes client livrent les autorités de certification dans le magasin de la JVM, vous revenez dans le cas précédent.
A la première connexion, vous avez ce message :
Non : vous refusez la connexion
Oui : l’autorité de certification est ajoutée au magasin de certificats d’ACS.
Après avoir répondu « Oui » :
Aucun message affiché lors des prochaines connexions.
Changement de certificat
Comment faire en sorte que la sécurisation de vos services ou un changement de certificat soit transparent pour vos utilisateurs ?
Nous savons que demander à des centaines d’utilisateurs de répondre « Oui » peut générer un support très important aux équipes et être anxiogène.
Mise en place
Au-delà du certificat, il faut procéder aux changements de configurations : au niveau de la définition du système et/ou de la session 5250.
Pour le certificat, plusieurs solutions :
Vous disposez d’un poste modèle sur lequel vous avez installé ACS, et importez manuellement l’autorité de certification. Il vous suffit alors de déployer le fichier cacerts de ACS sur les différents postes.
Ce dernier est ici : "C:\Users\{USER}\Documents\IBM\iAccessClient\Private\{USER}\cacerts"
Dans le fichier de configuration AcsConfig.properties : vous pouvez indiquer un fichier cacerts mutualisé sur un lecteur réseau par exemple :
Injection du certificat en mode commande
ACS dispose de commande, avec option silencieuse :
/PLUGIN=certdl => demande à downloader l’autorité de certification et l’importer dans le magasin
/SYSTEM=nom système configuré => depuis le système en question
A intégrer dans vos outils de déploiement pour exécution sur chaque poste client ! Le certificat est ensuite visible dans le menu « Outils » puis « Gestion des clés ».
Renouvellement
Le certificat est issu de la même autorité de certification que le précédent : rien à faire ! C’est l’autorité qui est stockée, pas le certificat lui-même
Le certificat est issu d’une autre autorité (autre fournisseur, autorité précédente périmée ou invalidée) : il faut injecter l’autorité dans le magasin de certificat (cf Mise en place)
En synthèse : pas de difficulté, plusieurs solutions en fonction de votre organisation et outillage !
N’oubliez pas de renouveler vos certificats avant la date d’expiration …
La commande STRDBMON vous permet de lancer des moniteurs de base de données, si vous lancez un moniteur privé (sur le travail en cours), il prendra fin quand le job se terminera.
Mais si vous lancez un moniteur public pour tous les travaux par exemple, comment l’arrêter, vous pouvez vouloir un moniteur tous les jour de 14h à 18h pour analyser les JOB ODBC ou autres.
Nous proposons un petit code que vous pourrez améliorer qui fera cette opération :
PGM parm(&fil &lib &dly)
/* Ce programme démarre un moniteur base de données */
/* pour les jobs ODBC , Pendant x secondes */
/* ce job doit être soumis dans QSYSNOMAX */
/* par exemple */
/* Paramètres */
DCL VAR(&FIL ) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB ) TYPE(*CHAR) LEN(10)
DCL VAR(&DLY ) TYPE(*CHAR) LEN(06)
/* Variables de travail */
DCL &MSGID *CHAR LEN(7)
DCL &DATA *CHAR LEN(100)
DCL &ID *CHAR LEN(10)
/* Contrôle des paramètres */
chkobj &lib *lib
monmsg cpf9801 exec(do)
SNDUSRMSG MSG('Bibliothèque,' *BCAT &LIB *BCAT +
'inexistante') MSGTYPE(*INFO)
return
enddo
chkobj &lib/&fil *file
monmsg cpf9801 exec(do)
goto suite
enddo
SNDUSRMSG MSG('Monitor,' *BCAT &fil *BCAT +
'déjà existant') MSGTYPE(*INFO)
return
suite:
/* démarrage */
STRDBMON OUTFILE(&LIB/&FIL) +
JOB(*ALL/QUSER/QZDASOINIT) +
HOSTVAR(*SECURE) COMMENT('ODBC JOBS')
/* Lecture de l'id du moniteur */
/* message CPI436A */
DOUNTIL COND(&MSGID = 'CPI436A')
RCVMSG MSGQ(*PGMQ) MSGDTA(&DATA) +
MSGID(&MSGID)
enddo
CHGVAR VAR(&ID) VALUE(%SST(&DATA 29 10))
SNDUSRMSG MSG('Moniteur, ' *BCAT &ID *BCAT 'démarré') +
MSGTYPE(*INFO)
/* Retardement de l'arrêt en secondes */
DLYJOB DLY(&dly)
ENDDBMON JOB(*ALL) MONID(&ID)
SNDUSRMSG MSG('Moniteur, ' *BCAT &ID *BCAT 'arrêté') +
MSGTYPE(*INFO)
ENDPGM
Vous pouvez indiquer la bibliothèque et le fichier de sortie pour le monitor et le temps d’exécution en secondes
Vous pouvez changer les filtres au niveau du STRDBMON en précisant ce que vous voulez analyser
vous pouvez faire une commande comme ceci pour lancer plus facilement votre programme !
Vous pouvez le planifier dans votre Scheduler et indiquer par exemple un nom de fichier DBMAAMMJJ pour chaque jour, vous pourrez ainsi comparer au fil du temps ce qui ce passe sur cette période dans votre base de données.
Attention à bien le soumettre dans une file qui ne bloquera pas vos traitements, par exemple QSYSNOMAX ou QUSRNOMAX
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-07-14 11:50:412023-08-11 16:04:43Un moniteur DB limité dans le temps
Il existe 2 solutions pour gérer vos spools sans passer par un écran 5250, je vais vous les présenter.
La première solution est ACS
Vous devez avoir le java bundle sur votre PC.
Vous cliquez sur Sortie imprimante
Vous avez une grande possibilité de filtres par défaut vous voyez les spools de votre utilisateur.
En faisant un clic droit vous avez un menu qui va vous permettre de gérer vos spools, vous pouvez facilement
télécharger votre spool , il sera converti au format PDF.
La deuxième solution est Navigator for i
Se service d’administration doit être démarré
Vous devez choisir « Mes sorties imprimante »
Vous arrivez sur les spools de votre utilisateurs
Vous pouvez Convertir en PDF Si vous choisissez exporter, le fichier obtenu sera au format TXT en choisissant avancé, vous pouvez gérer votre imprimante
Conclusion :
Les principales différences sont ACS Plus de filtres NFI Possibilité de convertir en txt Possibilité de gérer l’imprimante
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-07-10 10:40:002023-08-11 16:34:52Gérer vos SPOOLS graphiquement
Administration, Securité, SQL_DB2Comment tracer immédiatement la création d’un PF ou d’une table dans une bibliothèque ?
Vous voulez savoir immédiatement quand un fichier PF ou table est créé dans votre bibliothèque
4 principales techniques sont à votre disposition,
La première, les programmes d’exit
QIBM_QCA_CHG_COMMAND pour
CRTPF CRTDUPOBJ CPYF MOVOBJ RSTOBJ
QIBM_QZDA_SQL1 ou QIBM_QZDA_SQL2 Pour les create table SQL Attention sera appelé pour chaque requête SQL sur votre système et la syntaxe peut être compliqué
La deuxième technique consiste à utiliser la journalisation
Si votre bibliothèque est journalisée
— Mise en plage des règles d’héritages — pour avoir tous les événnements, ce qui n’est pas le cas par défaut
MOVOBJ OBJ(GAIA/APF3) OBJTYPE(*FILE) TOLIB(GDATA) Pas de poste est le fichier n’est pas journalisé
CPYF code D type CT
RSTOBJ Pas de poste et le fichier n’est pas journalisé il est journalisé que si c’est une restauration de lui même, paramètre du RSTOBJ … STRJRN(*YES)
vous pourrez faire un programme d’exit sur le journal pour les code D type CT mais attention donc donc pas de poste pour les MOVOBJ et les RSTOBJ
La troisième technique est d’utiliser le journal d’audit
s’il est démarré et qu’il a la valeur *CREATE, vous allez avoir des postes code T type CO pour les créations et OR, RA, RO pour les restaurations
Vous pourrez faire un programme d’exit sur le journal d’audit pour les postes vues ci dessous, remarque les outils de replication logiciel utilise cette techno.
La quatrième, le journal du catalogue DB2
Le catalogue bénéficie de son propre journal, QDBJRNFILE de la Bibliothèque QRECOVERY
Quand vous créez une table ou un PF, vous avez un poste code R type PT ou PX qui sont générés
Vous pouvez mettre en place un programme d’exit journal sur celui ci
C’est une solution simple et efficace
Conclusion
Pas de solution miracle si votre base est journalisée utiliser la solution 2 semble la plus simple surtout que dans certain cas on ne voudra pas tracer les MOVOBJ et les RSTOBJ
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-06-30 17:59:152023-07-10 11:12:31Comment tracer immédiatement la création d’un PF ou d’une table dans une bibliothèque ?
Dans la dernière TR est apparue une nouveauté très intéressante « API RSE », c’est un ensemble d’API REST fournies avec votre système d’exploitation au travers du serveur ADMIN5.
Ces APIs sont utilisables depuis le web et permettent de lancer des commandes, accéder à l’IFS, de lancer de requêtes SQL…
Ce service ne fonctionne qu’en TLS vous devrez donc le sécuriser par l’administration http ://Votre_systeme:2001/HTTPAdmin
Vous devez ensuite le démarrer s’il ne l’est pas c’est le serveur ADMIN5
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-06-27 07:16:592023-06-27 07:17:00Débuter avec API RSE
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-06-18 09:58:322023-06-20 13:43:02Offrez une indexation à votre IBMi avec OMNIFIND
Vous allez devoir comparer les niveaux installés sur les 2 systèmes. Voici comment le faire simplement :
Vous devrez faire une extraction des éléments sur le système à comparer par exemple
create table gaia.remote_ptf as ( select * from QSYS2.GROUP_PTF_INFO ) with data
Vous envoyez le fichier sur la machine cible
select a.PTF_GROUP_NAME, a.PTF_GROUP_LEVEL, b.PTF_GROUP_LEVEL from QSYS2.GROUP_PTF_INFO a join gaia.remote_ptf b on A.PTF_GROUP_NAME = B.PTF_GROUP_NAME
pour n’avoir que les différences
select distinct substr(a.PTF_GROUP_NAME, 1, 30) , a.PTF_GROUP_LEVEL, b.PTF_GROUP_LEVEL from QSYS2.GROUP_PTF_INFO a join gaia.remote_ptf b on A.PTF_GROUP_NAME = B.PTF_GROUP_NAME where a.PTF_GROUP_LEVEL <> b.PTF_GROUP_LEVEL
Attention vous avez 2 niveaux de groupe dans le fichier, il faudrait améliorer le script en prenant un max pour avoir le plus haut sur les 2 systèmes
Exemple :
with LCL (PTF_GROUP_NAME, PTF_GROUP_LEVEL) as ( SELECT substr(PTF_GROUP_NAME, 1, 20), max(PTF_GROUP_LEVEL) FROM QSYS2.GROUP_PTF_INFO GROUP BY PTF_GROUP_NAME ), RMT (PTF_GROUP_NAME, PTF_GROUP_LEVEL) as ( SELECT substr(PTF_GROUP_NAME, 1, 20), max(PTF_GROUP_LEVEL) FROM gaia.remote_ptf GROUP BY PTF_GROUP_NAME ) select A.PTF_GROUP_NAME, A.PTF_GROUP_LEVEL, B.PTF_GROUP_LEVEL from LCL A join RMT B on A.PTF_GROUP_NAME = B.PTF_GROUP_NAME
Pour les PTF unitaires
Vous avez la vue QSYS2.PTF_INFO, vous pouvez également utiliser un DSPPTF en OUTFILE
Vous allez devoir trouver les PTF manquantes
Vous devrez faire une extraction des éléments sur le système à comparer par exemple
create table gaia.remote_ptf1 as ( select * from QSYS2.PTF_INFO ) with data
Vous envoyez le fichier sur la machine cible
Pour avoir les PTF qui manquent sur le remote :
SELECT a.PTF_PRODUCT_ID, a.PTF_IDENTIFIER FROM QSYS2.PTF_INFO a exception join gaia.remote_ptf1 b on a.PTF_PRODUCT_ID = b.PTF_PRODUCT_ID and a.PTF_IDENTIFIER = b.PTF_IDENTIFIER
Si voulez les PTF qui manquent sur la source, le plus simple est de changer l’ordre des fichiers :
SELECT a.PTF_PRODUCT_ID, a.PTF_IDENTIFIER FROM gaia.remote_ptf1 a exception join QSYS2.PTF_INFO b on a.PTF_PRODUCT_ID = b.PTF_PRODUCT_ID and a.PTF_IDENTIFIER = b.PTF_IDENTIFIER
Remarque :
Vous pourriez utiliser une connexion DRDA pour comparer vos fichiers sans les envoyer, si c’est paramétré chez vous exemple : select distinct substr(a.PTF_GROUP_NAME, 1, 30) , a.PTF_GROUP_LEVEL, b.PTF_GROUP_LEVEL from QSYS2.GROUP_PTF_INFO a join Votresystéme.QSYS2.GROUP_PTF_INFO b on A.PTF_GROUP_NAME = B.PTF_GROUP_NAME where a.PTF_GROUP_LEVEL <> b.PTF_GROUP_LEVEL
Mai ca ne marche pas vous ne pouvez pas joindre un système avec un distant vous devrez créer une table local
exemple :
create table qtemp/votre bib as (
select * from Votresystéme.QSYS2.GROUP_PTF_INFO
) With Data
Vous avez des outils comme ARE qui permettent également de faire ce type d’opération
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-06-06 07:37:372024-09-10 08:42:47Comparer les PTF de 2 systèmes