Quand vous faites une analyse d’impact pour modifier un ou plusieurs programmes, vous avez besoin de connaitre ceux qui sont utilisés dans le Scheduler de votre IBMi.
Il y a une vue qui vous permet de connaitre la liste des travaux planifiés c’est la vue SCHEDULED_JOB_NAME
Exemple pour savoir si le programme NOM_PGM est utilisé vous pouvez exécuter la requête suivante
SELECT SCHEDULED_JOB_NAME, UPPER(COMMAND_STRING), ifnull(DESCRIPTION, ‘*NONE’) FROM SCHEDULED_JOB_INFO WHERE STATUS <> ‘HELD’ and upper(COMMAND_STRING) like(‘%NOM_PGM%’)
Cette requête va bien pour un programme, mais pour une analyse plus complète ca peut être fastidieux.
Voici comment améliorer la chose, quand vous faites une analyse d’une manière ou d’une autre vous utilisez un fichier qui est le resultat en OUTFILE de la commande DSPPGMREF.
La solution est donc d’ajouter un poste dans ce fichier avec comme type *JOBSCDE et comme programme appelant le nom du travail.
Vous lancerez cet outil (commande REFJOBSCDE) à chaque fois que vous mettrez à jour votre fichier de références par DSPPGMREF
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-30 16:43:202022-04-13 14:24:45Connaitre les PGMs référencés dans WRKJOBSCDE
Tout le monde connait ACS en tant que client sur un poste Windows, Mac ou Linux.
Je rappelle que la principale différence avec ses prédécesseurs c’est qu’ACS et un client léger et que l’exécutable Java acsbundle.exe suffit pour exécuter une requête.
Vous pouvez l’installer sur votre IBM i, pour les 3 raisons suivantes.
1) La mise à disposition et la mise à jour peut désormais se faire par PTF
Déploiement disponible par PTF V7.3 PTF 5770SS1-SI71934 et après mise à jour de l’exécutable, pratiquement plus d’administration à faire.
2) Le partager avec vos utilisateurs
Vous montez un partage sur le répertoire où vous l’avez installé et vous exécutez acsbundle.exe à partir de ce ce dernier. Ca marche très bien, vous pouvez faire la mise à jour de tous vos postes en changeant l’exécutable de votre répertoire. C’est à déconseiller, si vous avez des accès réseaux peut efficaces ou si vous avez des populations nomades qui accèdent à plusieurs IBM i.
3) Pour exécuter des requêtes ACS directement sur l’IBM i
C’est du Java et votre partition sait faire du Java, et vous pouvez lancer des commandes Unix par STRQSH .
La première chose à vérifier c’est que le produit est bien installé sur votre partition.
Par défaut, il se trouve dans le répertoire QIBM/ProdData/Access/ACS/Base/, mais il peut se trouver ailleurs, par exemple dans /home/ qui est souvent monté par NetServer.
Si vous ne l’avez pas utilisé depuis longtemps, il est conseillé de mettre une version ACSBUNDLE.EXE plus récente
En fonction de ce que vous voulez utiliser dans ACS, on parle de plugin
Dans notre exemple on veut créer un fichier xls à partir d’une requête SQL c’est le plugin cldownload
Dans le plugin cldownload vous avez des options, par exemple, pour ajouter des entêtes de colonne, /colheadings=1 , etc … il existe d’autres plugins dans ACS pour exécuter des commandes, exécuter des transferts etc …
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-24 14:57:452022-04-13 14:38:51Utiliser ACS depuis votre IBM i ?
Non classéLancer une commande Windows à partir de votre IBMi en session 5250
Vous pouvez exécuter une commande Windows à partir de votre IBMi en session 5250
Pour cela vous devez d’abord démarrer l’intégrateur, c’est la commande STRPCO
STRPCO monmsg IWS4010 /* si déjà actif */
Ensuite vous demandez l’exécution de la commande comme si vous étiez sous CMD, par la commande STRPCCMD
par exemple pour tester le bloc note
STRPCCMD PCCMD(‘%windir%\system32\notepad.exe’)
La commande doit être entre quotes
Conseil :
Préférez l’utilisation de la commande START qui associera automatiquement l’extension avec l’exécutable voulu.
Exemple pour un pdf
STRPCCMD PCCMD(‘START votrepdf.pdf’) et non ‘C:\Program Files\PDFCreator\PDFCreator.exe votrepdfs.pdf’
STRPCCMD (‘calc.exe’) pour la calculatrice
Remarque :
Vous reprendrez la main quand vous aurez terminé votre session DOS Vous ne pouvez pas intercepter de message d’erreur sur la commande STRPCCMD La limitation de chaine de caractères est de 1023 de puis la V7R2, avant vous étiez limité à 123. Vous pouvez monter des partages, avec NetServer c’est la commande dos net use, vous pouvez aussi demander à exécuter des fonctions ACS transfert de fichier par exemple Le paramètre PAUSE(*YES ou *NO) vous affichera une fenêtre dos par exemple sur un .bat , mais ne change rien sur un exécutable Windows (calc.exe, notepad.exe)
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-22 17:14:572022-04-13 14:41:27Lancer une commande Windows à partir de votre IBMi en session 5250
En utilisant l’IBM i, vous avez sans doute remarqué que des commandes manquent, voici une liste de commandes qui pourraient vous rendre service.
DSPDTAQ
Cette commande permet de voir le contenu d’une DTAQ, sans cette commande vous devez faire un dmpobj et le lire, merci Thierry pour le coup de main.
WRKSAVF
Cette commande permet gérer les SAVFs de votre partition en voyant toutes les bibliothèques, un peu comme wrkjrnrcv allusr/all pour les recepteurs. Attention les savf q* dans qgpl sont des PTFs.
CHGUSRPWD
Permet de changer le mot de passe d’un autre utilisateur sans être *secadm, l’objet doit être compiler en adoption de droit
CHGNETBIOS
Permet de changer le nom Netbios celui qui est utilisé par NetServer, vous pouvez le voir dans Navigator for i
INIUSRNET
Réinitialisation d’un profil réseau utilisé par NetServer pour les partages
Vous retrouverez les sources de ces outils sur github à l’adresse suivante :
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-16 08:36:382022-04-13 14:43:535 commandes qui manquent à l’ibmi
Vous pourrez améliorer ce script en utilisant un mot de passe que vous récupérez à l’exécution, pensez bien à supprimer le fichier script FTP même dans QTEMP.
Vous pouvez également demander la log, en re-routant le stdout
Si vous utilisez le mail, l’utilisateur doit être inscrit à smtp.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-11 11:30:252022-04-13 18:35:39Utiliser un script SQL pour faire du FTP
*JOBEND L’historique du travail sera généré par le travail lui-même. Si l’historique du travail ne peut pas générer son propre historique du travail, celui-ci sera généré par un serveur d’historique du travail.
*JOBLOGSVR L’historique du travail sera généré par un serveur d’historique du travail.
*JOBEND est la valeur historique, cette valeur est beaucoup moins performante sur les nouveaux systèmes que *JOBLOGSVR.
Il est donc conseillé de mettre en place la valeur *JOBLOGSVR.
la deuxième valeur système est QJOBMSGQFL *NOWRAP La file d’attente de messages du travail ne fait pas l’objet d’un bouclage.
*WRAP La file d’attente de messages du travail fait l’objet d’un bouclage.
*PRTWRAP La file d’attente de messages du travail fait l’objet d’un bouclage et les messages écrasés sont imprimés.
il est conseillé pour éviter d’avoir des messages bloquants de mettre *WRAP, ce qui permettra d’avoir les dernières informations loguées.
2) Choisir le niveau de log adapté
C’est les paramètres LOG() LOGCLPGM() du travail. ils sont fixés par JOBD ou par les paramètres de la commande SBMJOB.
On divise généralement en trois les types les travaux de votre IBM i :
Les travaux sensibles qui devront avoir le niveau de log maximum
LOG(4 00 SECLVL) LOGCLPGM(YES)
Les travaux communs , batchs traditionnels sessions interactives
LOG(3 00 SECLVL) LOGCLPGM(NO)
Les travaux qui ne doivent pas avoir de log, pour des questions de sécurité, ou des travaux trop nombreux et souvent très courts
LOG(0 99 NOLIST) LOGCLPGM(NO)
le niveau peut être ajusté par programme, CHGJOB LOG( ) LOGCLPGM( )
3) Choix du mode d’épuration
La meilleur solution est d’utiliser le cleanup standard de la machine.
Vous pouvez voir les paramètres par la commande ==> go cleanup
par l’option 1 vous voyez le paramétrage si le ménage est possible, l’heure de démarrage et la durée. Le plus souvent on est réglé à 30 jours.
Pour démarrer le ménage c’est la commande STRCLNUP , il est conseillé de la mettre dans le programme STRUP de votre partition.
Les spools de log sont placés dans l’outq QEZJOBLOG, vous pouvez éventuellement épurer des spools particuliers, le mieux étant de ne pas les produire.
4) Nouveautés de SQL AS A Service
Il y a plusieurs vues, et fonction table qui peuvent, vous aidez, voici les 2 principales :
La fonction table QSYS2.JOBLOG_INFO() permet de voir le contenu d’une joblog.
Exemple :
SELECT * FROM TABLE(QSYS2.JOBLOG_INFO(‘378809/QUSER/QZDASOINIT’)) A
pour voir la log du job identifié
La vue QSYS2.OUTPUT_QUEUE_ENTRIES permet de voir la liste des spools d’une OUTQ.
Exemple
select * from QSYS2.OUTPUT_QUEUE_ENTRIES where OUTPUT_QUEUE_NAME = ‘QEZJOBLOG’
pour voir les spools de l’outq des joblogs
5) Remarques générales
Il est souvent inutile de sauvegarder des spools de log, sauf à avoir une réelle raison … et un moyen de suivi !
Un surveillance quotidienne est plus efficace qu’une recherche hypothétique dans un spool de 10 mois
Attention, un spool qui reste est une place de travail occupé dans la table des travaux.
Vous pouvez décorréler les spools des travaux mais ce n’est pas culturel et ça peut compliquer vos recherches futures.
Attention au programme en mode debug avec du SQL, l’optimiseur rempliera rapidement la log.
L’ILE produit plus de log que l’OPM, c’est normal vous avez un niveau de plus à gérer, ca peut doubler les lignes écrites !!!
Pour avoir une vue de des spools de log, pensez à la commande, WRKJOBLOG
Un travail n’a pas forcément de log , la seule qu’il laisse dans tous les cas c’est un message CPF1124 pour son démarrage et un message CPF1164 pour indiquer sa fin.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-06 19:08:052022-04-14 09:33:085 choses à savoir sur les logs de votre IBMi
Administration5 opérations à prévoir pour renommer une partition IBMi
Si vous voulez changer le nom de votre partition, attention il y a plusieurs noms à changer.
1) Les attributs réseaux
Attention, on parle ici plutôt du réseau SNA, c’est le nom que vous avez sur la mire d’ouverture 5250. Même si SNA est de moins en moins utilisé, le système l’utilise toujours. Vous pouvez voir cette information par la commande DSPNETA et l’extraire dans un programme CLLE par l’autre commande RTVNETA. C’est la commande CHGNETA qui permet de modifier Exemple :
CHGNETA SYSNAME(VOTRESYS) Pour que la modification soit prise en compte vous devez faire un IPL.
Vous devez ensuite modifier les inscriptions dans la directory SNA, vous pouvez les voir par la commande WRKDIRE. on ne peut pas changer l’identification SNA, vous devrez faire un ADDDIRE, et un RMVDIRE. Vous pouvez avoir la liste des inscriptions par la table QAOKP01A .
Exemple :
SELECT WOS1DDEN As Id_utilisateur, WOS1DDGN as adresse , WOS1USRP as Profil_util FROM QAOKP01A
Les valeurs peuvent apparaitre en hexadécimal lors de l’utilisation d’un script SQL ACS; on pourra faire un cast(nomzone as char(20) ccsid 37) pour les rendre lisibles.
2) Le nom de la base de données
Ce nom est utilisé par SQL, vous le voyez quand vous faites un connect (parfois implicite). Si vous faites un STRSQL , vous avez ce message , Connexion en cours : base de données relationnelle NEPTUNE. Pour voir les bases de données définies vous avez la commande WRKRDBDIRE, vous avez une seule Base de données locale. Vous pouvez voir la liste des bd par la table SQL QADBXRDBD
Exemple :
SELECT DBXRDBN nom_db FROM QADBXRDBD where DBXRMTN = ‘*LOCAL’
remarque :
Pour changer le nom de votre BD, vous devez la supprimer et la recréer ADDRDBDIRE et RMVRDBDIRE. attention sur la commande vous aurez un message (CPA3E01), à ignorer en répondant ‘G’ et il faut également reprendre les attributs de sécurité existants Vous devrez arrêter le service base de données pour que cela soit pris en compte
3) Le nom TCP/IP
C’est le nom utilisé par le réseau TCPIP, pour voir ces attributs, vous devez utiliser Navigator for i, vous pouvez le voir également par la vue QSYS2.TCPIP_INFO. exemple : SELECT substr(LOCAL_HOST_NAME, 1, (locate(‘.’, LOCAL_HOST_NAME)-1) ) FROM QSYS2.TCPIP_INFO
Pour le modifier c’est la commande CHGTCPDMN vous allez également indiquer un nom de domaine,
exemple: CHGTCPDMN HOSTNAME(‘votrenom’) …
Vous devrez arrêter TCPIP que cela soit pris en compte
remarque :
Ce nom peut être important pour certaines applications externes, surtout si vous mettez en place du SSO par exemple, le nom doit matcher avec celui qui est publié dans votre DNS
4) Le nom NETBIOS
C’est le nom utilisé par NetServer , vous pouvez le voir dans les propriétés de Navigator for i
pour le modifier vous devez utiliser par l’interface Navigator for i ou par l’api QZLSCHSN. exemple CALL QZLSCHSN PARM(‘nom_server’ ‘window’ ‘Description’ ‘ ‘) pour que la modification soit prise en compte vous devez arrêter et redémarrer NetServer
remarque :
Attention, si vous avez deux machines avec le même nom sur votre réseau, seule la première pourra démarrer Netserver
5) Sur la HMC
Vous devez ouvrir votre HMC Dans les propriétés de la partition vous pouvez changer le nom Il existe des commandes SSH pour connaitre un nom de partition, voire le changer , mais c’est un peu plus compliqué à automatiser.
Conseils :
Si vous faites une bascule de machine attention à n’avoir qu’une inscription dans votre DNS. Il est conseillé de mettre le même nom partout attention 8 caractères maximum, sinon vous devez avoir un transposition facile à faire. Le plus simple et de faire les modifications et un IPL dans la foulée pour tout mettre à jour.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2020-09-02 11:05:422022-04-14 10:02:105 opérations à prévoir pour renommer une partition IBMi
Jusqu’en version 7.3, on utilisait une dtaara QFDTJRN qui indiquait comment journaliser les objets de la bibliothèque.
En version 7.4, les informations de journalisation sont inclues dans la description de la bibliothèque et la dtaara QDFTJRN n’est plus utilisée.
Il n’y aura pas d’erreur, juste les nouveaux fichiers ne seront pas journalisés, ce qui peut générer des problèmes plus tard …
On peut les voir par la commande ==>DSPLIBD votre_bib puis <F10> Affichage des règles d’héritage
Vous avez une ligne par type d’objets, *FILE, *DTAARA, *DTAQ
Pour les mettre en place, on peut utiliser les commandes suivante STRJRNLIB démarrer la journalisation ENDJRNLIB arrêter la journalisation CHGJRNOBJ *LIB modifier les attributs de journalisation
AdministrationSuperviser QSYSOPR simplement avec un watch !
Il existe beaucoup de techniques pour superviser des files d’attente
La première consiste à faire boucler un robot qui lira les messages par la commande RCVMSG
La deuxième consiste à utiliser une vue SQL AS SERVICE, QSYS2.MESSAGE_QUEUE_INFO en allant boucler dessus
Il en existe d’autres avec des API etc…
J’ai choisi de vous présenter une technique un peu moins connu mais très efficace et très facile à mettre en œuvre, les Watches.
Un watch c’est un peu comme un trigger ou un programme d’exit, on va associer un programme qui se déclenchera sur un événement, ici un message nécessitant une réponse dans la file QSYSOPR.
Vous pouvez voir les sessions de watch actives par la commande ==>WRKWCH WCH(*STRWCH)
Pour démarrer une session c’est la commande STRWCH
dans notre cas on indiquera les paramètres suivants
Vous devez effectuer cette requête sur le fichier que vous avez généré
SELECT JODATE, JOTIME, substr(joesd, 1, 10) as fichier , substr(joesd, 11, 10) as biblio , substr(joesd, 31, 10) as User , substr(joesd, 91, 2) as type , joesd FROM qtemp/liste1 WHERE JOCODE = ‘R’ and JOENTT = ‘DL’ and substr(joesd, 91, 2) = ‘TB’
Conclusion :
On ne peut pas agir sur les fichiers du catalogue, c’est le système qui les gère, les seules commandes qui permettent d’interagir sur le catalogue sont :
==>RCLDBXREF ==>QSYS/RCLSTG SELECT(*DBXREF)
Par exemple, dans le cas ou vous commencez à avoir des messages sur la base de données, ou un nombre très important d’enregistrements supprimés dans les fichiers du catalogue …