, , Droits Navigator for i

il faudra désormais une autorisation explicite pour utiliser Navigator for i

Jusqu’à présent les fonctions usage, QIBM_NAV_SERVICEABILITY et QIBM_NAV_ALL_FUNCTION étaient autorisées par défaut à partir de mai 2022, elles seront interdites par défaut seules les profils ayant les autorisations spéciales *secofr *allobj pourront accéder les autres devront être autorisées nommément.

Plus d’informations ici

https://www.ibm.com/support/pages/node/6485853

https://www.ibm.com/support/pages/node/6486565

https://www.ibm.com/support/pages/node/6520030#Feb2022

C’est une possibilité de contrôler les requêtes SQL sur le temps d’exécution estimée ou sur la mémoire temporaire , se base sur le plan d’accès créé par l’optimiseur pour votre requête.

C’est la commande CHGQRYA qui permet cette opération
paramètres QRYTIMLMT( ) et QRYSTGLMT( ) pour le temps et la mémoire
Exemple
CHGQRYA JOB(123456/PLB/QPADEV0001) QRYTIMLMT(45)

Vous exécutez votre requête, si elle dépasse 45 secondes un message CPA4259 qui nécessite une réponse est envoyé au travail
Si vous répondez I ca continue,

 La requête excède la limite de durée ou de mémoire définie (C I)

? I

C si vous voulez arrêter la requête

La requête dépasse la limite de durée ou de mémoire définie.
? C
SQL query exceeds specified limit or threshold.

Vous pouvez estimer le temps d’exécution d’une requête

Mettre le temps maxi à zéro
CHGQRYA QRYTIMLMT(0)
Lancer la requêtes
Retrouvez le message CPA4259 et répondez C
Si vous faites sur le message vous avez le temps d’exécution estimée
ID message . . . . . . : CPA4259
Date d’envoi . . . . . : 26/04/22 Heure d’envoi . . . . : 14:23:33

Message . . . . : La requête excède la limite de durée ou de mémoire définie
(C I)

Cause . . . . . : La requête de base de données qui allait démarrer a une
durée d’exécution estimée à 12, ce qui excède la limite indiquée 0, ou son
utilisation de mémoire temporaire de 1 dépasse la limite spécifiée

  1. Les limites de durée de requête et de mémoire temporaire sont
    définies via la commande CL CHGQRYA.

remettre la valeur par défaut
CHGQRYA QRYTIMLMT(*SYSVAL)

remarque

Attention si vous avez de requêtes sous forme de curseur dans un sqlrpgle par exemple

Le traitement ne s’arrête pas , mais votre open cursor va recevoir un SQLCODE -666, si vous avez des traitements dépendants ca peut être gênant. il est donc conseillé de rajouter le contrôle derrière cette opération

exemple

if sqlcode = -666 ;
dsply ‘Estimation requête excessive’ ;
*inlr = *on ;
return;
Endif;

Pour mettre une réponse automatique C


Utiliser la table de réponse de travaux

par exemple
ADDRPYLE SEQNBR(56) MSGID(CPA4259) CMPDTA(PLB 51) RPY(C)
puis indiquer que le travail est en réponse auto
CHGJOB INQMSGRPY(*SYSRPYL)

Vous pouvez également indiquer quel fichier qaqqini vous voulez utiliser

paramètre CHGQRYA QRYOPTLIB(PLB)

Vous devez indiquer la bibliothèque ou ce trouve votre fichier d’options

plus d’informations ici

https://www.ibm.com/docs/fr/i/7.5?topic=supervisor-query-example-exit-programs


https://www.ibm.com/docs/en/i/7.4?topic=governor-how-use

Comment transférer un job dans qctl

Il peut être important de lancer un job qui tourne même quand le système est en mode restreint

Nous supposerons bien sûr que le sous-système de contrôle est QCTL.

1) Un job batch

il suffit d’indiquer la jobq QCTL dans le SBMJOB

exemple :

Vous avez une commande qui fait une SAV21

SBMJOB CMD(SAV21)
JOB(SAV21)
JOBQ(QCTL)

2) Pour un interactif , si le job est actif

TFRJOB JOBQ(QCTL)

3) Pour un interactif, si le job n’est pas actif

Vous devrez anticiper ce risque dés à présent en créant un unité qui a une entrée nominative dans QCTL.

pour créer l’unité

Récupérer le dernier contrôleur *VWS créer
WRKCTLD

CRTDEVDSP DEVD(votre unité ) DEVCLS(VRT) TYPE(3477) MODEL(FC) ONLINE(NO) CTL(votre controleur) KBDTYPE(FAB) CHRID(697 297)
ALWBLN(YES) PRTDEV(SYSVAL) OUTQ(DEV) PRTFILE(LIBL/QSYSPRT)
TEXT(‘Unité SECOURS’) DEPLOCNAME(*NONE)

créer l’entrée écran dans QCTL

ADDWSE SBSD(QCTL)
WRKSTN(votre écran)

pour contrôler

DSPSBSD
puis option 4

Vous devez retrouver une entrée avec votre nom d’unité

Maintenant vous devez indiquer votre nom d’unité dans votre session
exemple sur ACS

A la mire la mire vous devez avoir ceci

Attention

Ça peut vous sauver de petites blague, mais ça ne doit pas être un mode fonctionnement systématique.

, Travail à démarrage automatique

Un job à démarrage automatique, c’est un travail qui démarre en même temps que votre sous-système, soit pour initialiser quelque chose, soit pour se mettre en attente d’événements à traiter.

Vous en connaissez au moins 2

Le QSTRUP

C’est le programme indiqué dans la valeur système QSTRUPPGM et il est lancé par votre sous système de contrôle, le plus souvent QCTL .

et le second c’est QSTRRMTWTR


C’est Le démarrage des imprimantes qui est lancé en même temps que QSPL !

Vous pouvez créer vos propres travaux à démarrage automatique

Si vous devez créer un job à démarrage automatique pour vous faciliter l’administration de notre partition, voici les étapes à suivre

Création du sous système (s’il n’existe pas encore)

CRTSBSD SBSD(GAIA/GAIASBS) POOLS((1 *BASE)) TEXT(‘Sous systéme …’)

Ajouter une donnée de routage pour faire

Si elle n’existe pas le plus simple une seule, elle permettra de faire exécuter les jobs qui rentreront votre sous système

ADDRTGE SBSD(GAIA/GAIASBS)
SEQNBR(9999)
CMPVAL(*NONE)
PGM(QCMD)
CLS(QBATCH)

Vous avez intérêt à créer une jobq spécifique avec une entrée dédiée à votre job auto

CRTJOBQ JOBQ(GAIA/AUTO)

ADDJOBQE SBSD(GAIA/GAIASBS)
JOBQ(GAIA/AUTO)
MAXACT(1)

Vous pouvez créer une autre jobq qui permettra à d’autres travaux de s’exécuter soit les uns à la suite des autres

ADDJOBQE SBSD(GAIA/GAIASBS)
JOBQ(GAIA/GAIA)
MAXACT(1)

Ou tous ensemble

ADDJOBQE SBSD(GAIA/GAIASBS)
JOBQ(GAIA/GAIA)
MAXACT(*NOMAX)

Vous devez ensuite créer une jobd

CRTJOBD JOBD(GAIA/AUTO)
JOBQ(GAIA/AUTO)
TEXT(‘File pour job auto …’)
USER(QPGMR)
RTGDTA(‘QCMDB’)
RQSDTA(‘CALL GAIA/PGMAUTO’)

Cette jobd doit comporter 2 particularités , un utilisateur, paramètre USER ici QPGMR et un programme à lancer paramètre RQSDTA ici appel du programme PGMAUTO.

Vous pouvez maintenant ajouter votre travail à démarrage AUTO

ADDAJE SBSD(GAIA/GAIASBS)
JOB(AUTOJOB)
JOBD(GAIA/AUTO)

Quand vous ferez un STRSBS GAIA/GAIASBS votre job AUTOJOB sera exécuté.

Attention :

Les programmes à démarrage automatique ne doivent pas planter, pensez y également quand vous adaptez le programme QSTRUP

, 5 choses à savoir sur le Reclaim Storage

1) Pourquoi faire un Reclaim Storage


Pour corriger des erreurs sur des ressources, suite à des arrets intempestifs ou des dsyfonctionnements :
Les objets de QSYS
Les fichiers de l’IFS
Le catalogue Base de données

C’est la commande RCLSTG, elle nécessite de passer le système en mode restreint.

2) Date du dernier Reclaim Storage


Elle est indiquée dans la dtaara QRCLSTG de QUSRSYS
DSPDTAARA DTAARA(QRCLSTG)
position 1 date au format CYYMMDD
vous pouvez visualiser la date de dernière exécution par SQL

SELECT CASE

substr(DATA_AREA_VALUE , 1 , 1) WHEN ‘1’
THEN
substr(DATA_AREA_VALUE , 6 , 2) concat ‘:’ concat
substr(DATA_AREA_VALUE , 4 , 2) concat ‘:20’ concat
substr(DATA_AREA_VALUE , 2 , 2)
ELSE ’01:01:2001′
END
as datrclstg FROM QSYS2.DATA_AREA_INFO
WHERE DATA_AREA_LIBRARY = ‘QUSRSYS’
and DATA_AREA_NAME = ‘QRCLSTG’

3) Estimer le temps d’exécution


RCLSTG ESTIMATE(*YES)

Se base sur les informations contenues dans la dtaara QRCLSTG. Si vous n’avez pas encore exécuté la commande, vous n’avez rien

En gros vous pouvez estimer à minimum 1 heure.

4) Voici ce qui est à vérifier après exécutions


Les objets sans propriétaire
WRKOBJOWN QDFTOWN
Les objets endommagés
Dans QSYS
DSPLIB LIB(QRCL)
Dans L’IFS
WRKLNK OBJ(‘/QOpenSys/QReclaim’)
WRKLNK OBJ(‘/QReclaim’)

5) Avant de faire un RCLSTG


Vous avez certaines commandes qui peuvent permettre de corriger des erreurs sans être en mode restreint

Sur les bibliothèques
RCLLIB

Sur l’IFS
RCLLNK
RCLDLO

Sur la base de données
RCLDBXREF

Conclusion :

Même s’il est difficile de donner une fréquence, nous en conseillons un par an ..
et dans tous les cas il est recommandé d’en faire un avant une montée de version

Un lien à connaitre :

https://www.ibm.com/support/pages/overview-rclstg-comma

Vous installez de nouveaux PCs et vous désirez savoir les ports à ouvrir pour pouvoir accéder à vos partitions IBMi.

Voici une liste de ports à ouvrir en priorité

Pour ACS :


23 requis TELNET
449 requis arborescence du serveur IBM i
8470 à 8476 (voir RDI)

Pour RDi :


446 Requis (DRDA : connecteur base de données entre serveurs)
449 (as-srvmap) requis arborescence du serveur IBM i
3825 (Debugger) : débogage RDi
4300 (STRRSESVR) débogage via RDi (permet le rappel par l’IBM i du client RDi)
8470 (as-central) requis : Gestion des licences
8471 (as-database) requis base de données
8472 (as-dtaq) requis : serveur de file d’attente de données
8473 (as-file) requis : serveur de fichiers
8474 (as-netprt) serveur d’impression réseau
8475 (as-rmtcmd) requis : envoi de commandes
8476 (as-signon) requis : serveur ouverture de session

Merci à Jean-Marie pour son aide !

, , Utilisation d’une remote DTAQ

Une DTAQ est une solution qui permet de gérer des entrées empilées de manière asynchrone (un peu comme MQ series qui lui est en plus multi systèmes)

Pour définir une remote outq

Cette technologie se base sur DRDA, c’est la solution qui est utilisée par SQL quand vous faites un CONNECT sur une base de données distante.

Sur le système source

Vous devez définir votre base de données par la commande WRKDBDIRE

ADDRDBDIRE RDB(‘Nom_base_de donnees’)
RMTLOCNAME(‘nom ou adresse IP’ IP) RMTAUTMTH(USRID *NOALWLOWER)

Vous devez indiquer,
l’adresse IP ou le nom IP résolu
le mode de connexion qui sera négocié à l’établissement de celle ci

Vous devez créer une dtaq remote

CRTDTAQ DTAQ(Nom_bib_loc/Nom Dtaq)
TYPE(DDM) RMTDTAQ(nom_bib_dis/Nom_Dtaq) RMTLOCNAME(RDB)
RDB(‘Nom_base_de_donnees’)

Sur le système cible

Vous devez créer une dtaq locale

CRTDTAQ DTAQ(Nom_bib_dis/Nom Dtaq)
TYPE(*DDM)
MAXLEN(longueur_de_vos_données)

si vous avez choisi une solution de connexion à base de profil, vous devez l’enregistrer en créant un poste d’authentification

ADDSVRAUTE USRPRF(*CURRENT) SERVER(NEPTUNE) USRID(PLB) PASSWORD()

Vous devez indiquer l’utilisateur local qui servira à faire la requête d’écriture.

Pour voir les postes existants, vous avez une vue SQL

SELECT *
FROM QSYS2.DRDA_AUTHENTICATION_ENTRY_INFO

le service DDM doit être démarré

STRTCPSVR *DDM

Pour écrire dans votre DTAQ

Sur la source, vous devez écrire des postes à la demande

Par L’API

Call QSNDDTAQ

Par la procédure SQL service, depuis le niveau 4 de la TR en 7.4

QSYS2.SEND_DATA_QUEUE()

sur la cible,

Pour écrire lire votre DTAQ

Vous devez avoir un traitement qui boucle pour traiter vos entrées

par l’API

Call QRCVDTAQ

Par la fonction SQL service, depuis le niveau 4 de la TR en 7.4

QSYS2.RECEIVE_DATA_QUEUE()

Conclusions


Vous pouvez mettre en place une solution de remote outq, pour répliquer des changement de mots passe par exemple !

Si vous utilisez des DTAQ, vous aurez besoin d’une commande pour visualiser le contenu de celle ci, vous pouvez en trouver un ici c’est la commande DSPDTAQ

https://github.com/Plberthoin/PLB/tree/master/GTOOLS

, , Réplication de mot de passe

Vous avez plusieurs partitions et vous voulez toutes les mettre à jour quand vous changez votre mot de passe.

Voici une méthode qui peut vous aider

1) Extraction du hash du mot de passe

Vous pouvez utiliser l’API, QSYRUPWD.
Voici un exemple RTVUSRPWD
Vous pouvez trouver les sources ICI,
https://github.com/Plberthoin/PLB/tree/master/GTOOLS

2) Envoi des informations du hash

Réplication des informations de hash par exemple avec une remote dtaara, remote dtaq ou envoi de celle ci par SAVRSTOBJ dans une dtaara ou un fichier.

3) Application du hash sur le nouveau profil

Vous pouvez utiliser l’API, QSYSUPWD
Voici un exemple CHGUSRPWD
Vous pouvez trouver les sources ICI,
https://github.com/Plberthoin/PLB/tree/master/GTOOLS

4) Automatisation

Vous pouvez ensuite automatiser la détection de vos modifications en utilisant un programme d’exit ou les journaux d’audit.

, Utilisation de QSYSMSG

Vous pouvez créer une file de messages supplémentaire pour les messages importants !
Elle viendra en complément de QSYSOPR

C’est la file QSYSMSG

Pour la créer

CRTMSGQ QSYS/QSYSMSG +
TEXT(‘Messages importants’)

Voici les messages qui sont envoyés dedans

CPF1269 Demande de démarrage de programme reçue sur unité &1
CPF1393 Le profil utilisateur &2 a été désactivé
CPF1397 Poste &3 mis hors fonction par sous-système &1
CPI2209 Profil utilisateur &1 supprimé car endommagé.
CPI9014 Le mot de passe reçu de l’unité &1 est incorrect.
CPI96C0 Le mot de passe protégé n’a pas pu être validé.
CPI96C1 La valeur de la variable GDS d’ouverture de session
CPI96C2 Le mot de passe utilisateur n’a pas pu être changé.
CPI96C3 Message &4 renvoyé lors d’un appel système.
CPI96C4 Le mot de passe n’est pas correct pour le profil utilisateur
CPI96C5 L’utilisateur &4 n’existe pas.
CPI96C6 Code retour &4 reçu lors de l’appel de CPI-Communication
CPI96C7 Incident système dans programme de transaction d’ouverture

Vous en avez d’autres qui seront envoyés dans les 2 files

pour des compléments regardez ICI

https://www.ibm.com/docs/en/i/7.3?topic=messages-qsysmsg-message-queue

Vous pouvez créer un watcher pour faire remonter les informations en temps réel par mail par exemple !

Exemple :

STRWCH SSNID(SUPQSYMSG)
WCHPGM(VOTREPGM)
WCHMSG(*NONE)
WCHMSGQ((QSYS/QSYSMSG))

Pour le programme regardez ici, tout est dans le passage des paramètres


https://www.ibm.com/docs/en/i/7.3?topic=collectors-i-job-watcher

, 5 choses à faire avant de changer de version

Vous avez décidé de changer de version d’OS , voici quelques opérations auxquelles on ne pense pas toujours, mais qui peuvent vous aider en cas de problème.

1) Appliquer les PTFs définitivement


APYPTF LICPGM(ALL) APY(PERM)
vous pourrez ainsi faire le ménage et supprimer les SAVFs sans déphaser le catalogue
DLTPTF PTF(*PRMAPY)


2) Faire le ménage

Ça ne fait jamais de mal de faire un peu de place

Supprimer tout ce qui est inutile
les SAVFs

Les récepteurs
Les spools
Dans l’ifs les fichiers de travail de log etc…

Réorganiser les fichiers ayant beaucoup de d’enregistrements supprimés, méfiez vous de BRMS et des collectes de performances.

Supprimer les objets inutilisés (si nécessaire faire une sauvegarde au cas où).


3) Téléchargez PRUV, lancez le, et suivez les recommandations qu’il vous donne …

Pour télécharger c’est ici https://www-01.ibm.com/support/docview.wss?uid=nas8N1014074

Je vous conseille de télécharger la dernière version juste avant de faire votre opération.

.


4) Faire un DSPOBJD *ALL dans un fichier pour garder les dates de référence sur les objets.

Ça vous permettra d’avoir les dates d’usage, de modification etc .. de vos objets avant installation, cette dernière pouvant changer ces informations et fausser vos analyses futures.


5) Bien sur faire une SAV21 de votre système qui vous servira à redémarrer en cas de gros problèmes

Conserver cette bande vers vous jusqu’à la fin de votre opération complète !