Superviser 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

STRWCH SSNID(ANAWCH)
WCHPGM(ANAWCH)
CALLWCHPGM(WCHEVT) WCHMSG((ALL *NONE *MSGDTA *INQ *GE 00))
WCHMSGQ((QSYS/QSYSOPR))

Ce qui veut dire que quand on a un message avec réponse dans qsysopr lance le programme ANAWCH (attention il devra être en ligne dans la LIBL)

Voici le programme ANAWCH

PGM PARM(&WCHOPTION &SESSIONID &ERROR &EVTDATA)
/—————————————————————–/
/* Ce programme est un watch il avertit quand on a un message dans */

/ *QSYSOPR en attente de réponse , il envoit un mail / /—————————————————————–

/*/ Paramètres recus */

DCL VAR(&WCHOPTION) TYPE(CHAR) LEN(10)
DCL VAR(&SESSIONID) TYPE(CHAR) LEN(10) DCL VAR(&ERROR) TYPE(CHAR) LEN(10)
DCL VAR(&EVTDATA) TYPE(CHAR) LEN(1024) / Variables de travail /

DCL VAR(&MSG) TYPE(CHAR) LEN(173)
DCL VAR(&EMAIL) TYPE(CHAR) LEN(50) value(‘votre@email.fr’)

/*découpage de EVTDATA */

DCL VAR(&MSGID) TYPE(CHAR) STG(DEFINED) LEN(7) + DEFVAR(&EVTDATA 5) DCL VAR(&MSGQ) TYPE(CHAR) STG(DEFINED) LEN(10) + DEFVAR(&EVTDATA 13)

DCL VAR(&MSGQLIB) TYPE(CHAR) STG(DEFINED) + LEN(10) DEFVAR(&EVTDATA 23)

DCL VAR(&MSGKEY) TYPE(CHAR) STG(DEFINED) + LEN(4) DEFVAR(&EVTDATA 387)

ADDLIBLE votrebib

MONMSG CPF0000

/ *Lecture du texte du message */

RCVMSG MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&MSGKEY) + RMV(NO) MSG(&MSG)
/* Envoi d’un mail d’alerte */
SNDSMTPEMM RCP((&mail)) SUBJECT(‘Message avec +
réponse dans qsysopr’) NOTE(&MSG)
CHGVAR VAR(&ERROR) VALUE(‘ ‘)
ENDPGM

Il reçoit 4 paramètres , le plus intéressant est &EVTDATA qui contient la clé du message que vous pourrez alors lire par RCVMSG ça suffit

Pour arrêter la supervision par votre watch c’est la commande


==>ENDWCH SSNID(ANAWCH)

Remarque :


Il est préférable que le programme soit compiler en adoption de droit avec comme propriétaire qsecofr

Si vous envoyez un mail, votre utilisateur doit être inscrit sinon soumettez cette envoi avec un user qui l’est

On pourrait très bien répondre au message par la commande SNDRPY, sur certain messages connus

Comment connaitre les tables ou PF supprimés ?

Sur L’IBMi on a du mal à matérialiser la base de données

Pourtant en gros, elle a un catalogue c’est les fichiers QADB* de QSYS…

Les fichiers SYS* de QSYS2 pointent dessus

On peut les voir par exemple

SELECT *
FROM SYSTABLESTAT where
TABLE_SCHEMA = ‘QSYS’ and TABLE_NAME
like(‘QADB%’)

Ces fichiers sont journalisés sur des journaux qui sont dans QRECOVERY

Les 2 principaux sont :

QDBJRNCOLM qui va contenir les modifications de zones
QDBJRNFILE qui va contenir les modifications de fichiers

Voici comment analyser pour connaitre les fichiers PF ou tables supprimés dans la journée.

Vous devez générer un table à partir de votre journal

DSPJRN JRN(QRECOVERY/QDBJRNFILE)
FROMTIME(votre_date 000001)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/LISTE1)

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 …

, 5 conseils pour utiliser CPYTOIMPF efficacement

Vous conaissez tous la commande CPYTOIMPF qui va vous permettre de générer un fichier d’exportation, que vous pourrez fournir à un partenaire .

Voici quelques informations complémentaires qui pourront vous aider

1) C’est un moyen simple de centraliser sur L’IBMi des conversions de fichier base de données vers du CSV ou du EXCEL.

Ça vous évitera les .TTO dispatchés partout sur vos environnements Windows et difficiles à maintenir.
L’utilisateur retrouvera ses fichiers dans l’IFS, les bonnes pratiques poussent vers le répertoire /home/votreuser/
L’utilisateur pourra également se faire envoyer son fichier par mail, la commande IBMi native SNDSMTPEMM permettant de joindre une pièce jointe.
Si vous utiliser un outil complémentaire vous pouvez même faire des envois FTP vers des serveurs annexes.

2) Gestion du CCSID

Vous allez avoir à gérer celui du fichier source est celui du fichier cible

Pour le fichier source, il est conseillé si ce n’est pas le cas de forcer un ccsid

Par la commande en début de programme
CHGJOB CCSID(1147) ou 297 pour la France, vous éviterez ainsi les problèmes d’extractions intermédiaires.

L’ennemi c’est le CCSID(65535) qui d’ailleurs va vous poser de plus en plus de problèmes notamment avec les produits Open source.

Pour le fichier cible il vous suffit d’indiquer le paramètre STMFCCSID(*PCASCII) ou 1252 qui est le CCSID de windows par défaut, sur la commande CPYTOIMPF.

Oui on pourrait faire de l’unicode …

3) CSV ou XLS

il y a peu de différence entre un CSV et un XLS que sait produire votre IBMi.

La vérité, elle se joue quand votre utilisateur double clique sur le fichier et qu’il ne s’ouvre pas directement par excel.

voici les paramètres pour un CSV
CPYTOIMPF
TOSTMF(‘xxxx.csv’) +
RCDDLM(CRLF) STRDLM(NONE)
FLDDLM(‘;’)

le fichier s’ouvrira directement dans EXCEL

voici les paramètres pour un EXCEL
CPYTOIMPF
TOSTMF(‘xxxx.XLS’)
RCDDLM(CRLF) STRDLM(NONE)
FLDDLM(‘*TAB’)

Vous pouvez avoir malgrè tout un message à l’ouverture, mais aucune manipulation à faire.

4) Tri du fichier

Vous avez un paramètre qui va vous permettre de trier votre fichier comme un order by SQL

c’est le paramètre ORDERBY , exemple ORDERBY(‘Datecreat desc’) qui triera par ordre de création

5) Entête de colonne

Si vous désirez un entête de colonne, le meilleur compromis c’est de mettre le paramètre ADDCOLNAM(*SQL)

Si vous avez un nom long SQL provenant de votre table, vous aurez ceci

;nom_utilisateur;prenom_utilisateur;dat_naissance
;Berthoin;Pierre-Louis;28-08-1964

Vous aurez ceci, si vous avez un PF

;nomuti;preuti;datnai
;Berthoin;Pierre-Louis;28-08-1964

Il y a toujours la solution de passer par une requête intermédiaire sur les zones vous pourrez indiquer la clause AS .

Par exemple

select numcli as ‘Numero_client’ ….

Conclusion :

La commande CPYTOIMPF est une commande simple pour convertir vos fichiers Base de données.
Elle vous permet de garder la main, un batch de nuit peut générer des extractions, les utilisateurs n’ont pas besoin d’ ODBC, ni de droit sur le fichier d’origine.

SQL et Log BRMS

A l’heure de SQL services , il peut être opportun de faire des contrôles BRMS par SQL.

Le fichier qui se cache derrière la commande DSPLOGBRM est le fichier QA1ALG ,et il se trouve dans la bibliothèque QUSRBRM.

Une exécution de sauvegarde en BRMS s’appelle un groupe de contrôle. Quand on passe la commande STRBKUBRM on lui indique un groupe de contrôle à exécuter.

Voici comment savoir si une sauvegarde s’est bien passée ?
Vous allez sélectionner la date du contrôle, attention la date et au format numérique sAAMMJJ (s étant à 1 en 2000, à 0 en 1900)
Vous allez sélectionner le job qui est égal au groupe de contrôle, si le travail a un nom différent vous pouvez tester substr(LGMDTA, 1, 10) à la place de LGJOB.
Vous allez choisir les id messages suivants
-BRM1380 début du groupe de contrôle
-BRM1049 Fin normale du groupe de contrôle

Voici 2 exemples de requêtes

en CLP
runsql(‘create table qtemp/ctlgrp as( +
SELECT LGJOB, LGDATE, LGTIME, LGJNBR, LGMID FROM qusrbrm/QA1ALG +
where LGJOB =  »QUOT » and LGDATE = 1200707 +
and LGMID in( »BRM1380 » ,  »BRM1049 »))’) commit(*none)

/* lecture du nombre d’enregistrements */
rtvmbrd file(qtemp/ctlgrp) NBRCURRCD(&nbr)

en RPGLE

exec sql
SELECT count(*) into :NBR FROM qusrbrm/QA1ALG
where LGJOB = ‘QUOT’ and LGDATE = 1200707
and LGMID in(‘BRM1380’ , ‘BRM1049’) ;


Dans les 2 cas, l’interprétation de la variable NBR est la suivante

Si vous avez 0 dans NBR, le groupe de contrôle n’a pas été lancé.
Si vous avez 1 dans NBR, le groupe a été lancer mais il a des erreurs à contrôler.
Si vous avez 2 dans NBR, tout est ok.

Conclusion

On peut facilement ajouter ce contrôle dans une sonde d’un outil de supervision .

Il est également conseillé d’enregistrer un exemple dans les requêtes des utilisateurs de ACS

Vous pouvez également ajuster vos contrôles pour différencier les cas d’anomalie , etc …

Fichier de l’IFS verrouillé

Suite à une sauvegarde, vous avez tous eu un message du genre
CPF3837 Message . . . . : 678999 objets sauvegardés.
4 non sauvegardés.

Faisons une expérience !


1 session sous QSECOFR
verrouillage d’un fichier
chkout ‘/home/QSECOFR/VERSIONODE.TXT’

2 session sous plb
edtf ‘/home/QSECOFR/VERSIONODE.TXT’
on peut éditer mais pas enregistrer
CPFB620 Resource busy.

3 session sous QSECOFR
edtf ‘/home/QSECOFR/VERSIONODE.TXT’
On peut éditer et enregistrer sans problème
Donc le verrouillage est lié à l’utilisateur, le même utilisateur sur une autre session peut accéder au fichier sans restriction

Pour voir ce verrouillage vous pouvez utiliser sur la session 2 par exemple

WRKLNK ‘/home/QSECOFR/VERSIONODE.TXT’
8=Afficher les attributs
Vous constatez que le fichier est bien verrouillé
Verrouillage par . . . . . . . . . . . : QSECOFR Date/heure de verrouillage . . . . . . : 27/07/20 13:58:23

Vous pouvez également utiliser la table fonction QSYS2.IFS_OBJECT_STATISTICS zone CHECKED_OUT

Vous sortez par signoff de la session qui vérouille ce fichier

Vous refaites la commande sur la session 2

WRKLNK ‘/home/QSECOFR/VERSIONODE.TXT’
8=Afficher les attributs
Vous constatez que le fichier est bien verrouillé
Verrouillage par . . . . . . . . . . . : QSECOFR Date/heure de verrouillage . . . . . . : 27/07/20 13:58:23

Conclusion contrairement à un ALCOBJ, le fichier reste verrouillé, même quand le travail est arrêté, le verrouillage est lié uniquement à l’utilisateur

vous pouvez, si vous avez les droits sur le fichier, faire
chkin ‘/home/QSECOFR/VERSIONODE.TXT’ qui déverrouillera le fichier

Attention ce n’est pas ce verrouillage que vous trouvez par la nouvelle vue ifs_object_lock_info

Puisque quand vous faites la requête suivante, vous avez 0 enregistrement

select i.*
from table (
qsys2.ifs_object_lock_info(
path_name => ‘/home/QSECOFR/VERSIONODE.TXT’)
) i;

Prenons maintenant un fichier dont on est sûr qu’il est verrouillé applicativement, ici une log apache

select i.*
from table (
qsys2.ifs_object_lock_info(‘/www/ws_demo/logs/error_log.Q120072700’)) i;

On obtient bien une ligne avec un travail exemple :
778168/QTMHHTTP/WS_DEMO, et des informations sur les différents types et modes de verrouillage

Par contre si vous faites wrklnk ‘/www/ws_demo/logs/error_log.Q120072700’
puis option 8
vous ne voyez pas de verouillage pour ce fichier

et si vous essayez d’éditer ce fichier vous avez le même problème que tout a l’heure, vous ne pourrez pas enregistrer votre modification
CPFB620 Resource busy.

Si vous arrêtez l’instance apache qui verrouille le fichier votre fichier est déverrouillé, vous pouvez le mettre à jour.

En résumé

il y a 2 verouillages:

Un plutôt système, par les commandes CHKIN et CHKOUT que vous voyez dans les attributs du fichier.

Vous pouvez également le voir par la fonction table QSYS2.IFS_OBJECT_STATISTICS

Exemple dans notre cas

SELECT PATH_NAME, OBJECT_OWNER, CHECKED_OUT
FROM TABLE (QSYS2.IFS_OBJECT_STATISTICS(START_PATH_NAME => ‘/home/QSECOFR/VERSIONODE.TXT’) )

Un plutôt applicatif, c’est l’api d’ouverture généralement qui fixera ce verrouillage vous pouvez voir ces verrouillages par l’API QP0LROR ou par la fonction table, qsys2.ifs_object_lock_info

Remarque :

Pour mettre à jour un fichier vous n’êtes pas obligé de verrouiller le fichier, exemple si vous avez 2 EDTF sur le même fichier c’est le dernier qui a raison.
Il est donc conseillé de verrouiller votre fichier, si vous faites des mises à jours dans vos applicatifs.

Conclusion :

Si, suite à une sauvegarde, vous avez un verrouillage sur un fichier commencer par vérifier s’il y a un verrouillage système par WRKLNK ou par la fonction table QSYS2.IFS_OBJECT_STATISTICS c’est la zone CHECKED_OUT
Si c’est le cas faites un CHKIN sur votre fichier pour le libérer !
Si il n’y a pas de verrouillage regardez par la fonction table qsys2.ifs_object_lock_info ou l’api QP0LROR
Si vous trouvez le travail, vous devrez l’arrêter avant votre prochaine sauvegarde.
Mais il est aussi possible que le job ne soit plus actif …

Vous avez intérêt à monitorer votre commande SAV et à analyser les erreurs pour les corriger

Comment filtrer finement FTP ?

Vous connaissez les programmes d’exit

Ce sont des programmes qui vont s’exécuter avant une action sur votre machine.

On les gère par la commande

==>WRKREGINF

On peut ajouter un programme par l’option 8

Prenons l’exemple de FTP

On veut sécuriser les accès FTP

On peut utiliser des fonctions, qui permettent d’utiliser ou d’interdire une fonction.

On peut utiliser un programme d’exit (QIBM_QTMF_SVR_LOGON TCPL0100) qui permet facilement de tracer FTP.

Contrairement à une fonction utilisateur on peut juste tracer pour voir ce qui ce passe, en envoyant un message par exemple

Pour FTP, ça peut ne pas suffire : en effet le langage FTP dispose d’un jeu de commande (GET, PUT , RENAME, DLT , ETC..)

On peut pour cela utiliser les programmes que l’on va associer à la valeur de registre QIBM_QTMF_SERVER_REQ

avec le format VLRQ0100

exemple en CLP

Voici les paramètres que reçoit le programme que vous allez écrire

PGM PARM(&APPID &OPID &USRPRF &REMOTEIP &REMOTELEN &OPINFO &OPLEN &OK)
DCL &APPID CHAR 4 / APPLICATION ID, BINARY NUM */
DCL &OPID *CHAR 4 /* OPERATION ID, BINARY NUMBER */
DCL &OPNUM *DEC 4 /* OPERATION ID, USABLE IN CL */
DCL &USRPRF *CHAR 10 /* USER PROFILE USING FTP */
DCL &REMOTEIP *CHAR 251 /* IP ADDRESS */
DCL &REMOTELEN *CHAR 4 /* LENGTH OF PREVIOUS PARAMETER */
DCL &OPINFO *CHAR 251 /* OP SPECIFIC INFORMATION */
DCL &OPLEN *CHAR 4 /* LENGTH OF PREVIOUS PARAMETER */
DCL &OK *CHAR 4 /* CONFIRMATION SIGNAL / / LENGTH DECIMAL */
DCL &RLEN *DEC 10 /* ROUTE LENGTH VALUE AS DECIMAL */
DCL &OLEN *DEC 10 /* LENGTH VALUE IN A DECIMAL FORM/ / ALLOWABLE VALUES FOR OPID FOR FTP CLIENT OR FTP SERVER */
DCL &STR *CHAR 4 VALUE(X’00000000′) /* START FTP */
DCL &MKD *CHAR 4 VALUE(X’00000001′) /* MAKE DIRECTORY */
DCL &RMD *CHAR 4 VALUE(X’00000002′) /* DLT DIRECTORY */
DCL &CD *CHAR 4 VALUE(X’00000003′) /* SET DIRECTORY */
DCL &DIR *CHAR 4 VALUE(X’00000004′) /* LIST DIRECTORY */
DCL &DELE *CHAR 4 VALUE(X’00000005′) /* DELETE FILE */
DCL &GET *CHAR 4 VALUE(X’00000006′) /* SEND FILE */
DCL &PUT *CHAR 4 VALUE(X’00000007′) /* GET FILE */
DCL &REN *CHAR 4 VALUE(X’00000008′) /* RENAME FILE */
DCL &SYS *CHAR 4 VALUE(X’00000009′) /* EXECUTE COMMAND / / ALLOWABLE VALUES FOR OK
DCL &NO CHAR 4 VALUE(X’00000000′) / DISALLOW FTP */
DCL &YES *CHAR 4 VALUE(X’00000001′) /* ALLOW FTP / / CONVERT THE LENGTH PARAMETERS FROM BINARY TO DECIMAL */
CHGVAR &RLEN %BIN(&REMOTELEN)
CHGVAR &OLEN %BIN(&OPLEN)

Les paramètres recus

Vous avez l’utilisateur qui est passé dans la zone &USRPRF
Vous avez l’ordre FTP qui est passé dans la zone &OPID

Avec ces 2 informations vous pouvez autoriser en renvoyant X’00000001′ dans la Variable &OK
ou interdire en renvoyant X’00000000′

par exemple, un profil de type FTP user ne peut pas supprimer !

if cond(&USRPRF = ‘FTPUSR’) THEN(DO)
if cond((&OPID = &DELE) *or (&OPID = &RMD)) THEN(DO)
CHGVAR &OK &NO
ENDDO
ELSE DO
CHGVAR &OK &YES
ENDDO
ENDDO

Vous pouvez encore aller plus loin

Vous avez le paramètre &OPINFO qui contient des informations conplémentaires

Exemple

Interdir le déplacement dans la bibliothèque produit

if cond((&OPID = &CD) *and %SST(&OPINFO 1 &OLEN) *EQ ‘/QSYS.LIB/PRODUIT.LIB’) ) then(do)
CHGVAR &OK &NO
enddo

Conclusions :

Vous pouvez combiner ces 3 informations pour établir un contrôle précis
– L’utilisateur
– La commande FTP
– La ressource
Vous pouvez rendre paramétrable ces validations en créant par exemple un petit fichier qui liste des utilisateurs avec les commandes FTP aux quels ils ont droit .

Remarques

La mise en place de votre programme d’exit ne se substitue pas aux autorisations natives de l’IBM i, un utilisateur interdit à un fichier ne peut pas y accéder …
Vous avez intérêt à passer par une phase d’analyse (qui fait quoi? )
Une fois que vous avez validé qui doit faire quoi , il faut fermer et ouvrir par exception
Votre programme doit être optimisé
Votre programme ne doit pas planter

Vous connaissez index advisor, c’est le moteur SQL qui écrit dans le fichier QSYS2/SYSIXADV des suggestions d’index.

Vous pouvez l’utiliser
par SQL select * from QSYS2/SYSIXADV
par Navigator for i
par ACS
Vous avez même des procédures pour automatiser cette gestion

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqservicesperf.htm

Mais il peut arriver que le fichier soit endommagé, et les commandes IBMi habituelles sont inefficaces sur ce fichier (idem pour RCLDBXREF et RCLSTG).
C’est souvent un verrouillage du fichier QSYS2/SYSIXADV par des jobs QDBSRVxx qui fait planter votre sauvegarde par exemple.

Voici la procédure à suivre
Vous devrez trouver le bon CCSID c’est celui de la zone DBXFIL du fichier QADBXREF
par exemple par SQL en faisant

SELECT « CCSID » FROM SYSCOLUMNS
WHERE COLUMN_NAME = ‘DBXFIL’ and
TABLE_NAME = ‘QADBXREF’

  1. Essayer d’arrêter les jobs QDBSRVxx
  2. ALCOBJ OBJ((QSYS2/SYSIXADV *FILE *EXCL)) CONFLICT(*RQSRLS)
  3. DLTF QSYS2/SYSIXADVIX
  4. DLTF QSYS2/CONDIDXA
  5. DLTF QSYS2/SYSIXADV
  6. CHGJOB CCSID(zz)
  7. CALL QSYS/QSQSYSIBM
  8. CALL QSYS/QSQIBMCHK

Si vous n’arrivez pas, allouer le fichier.
Vous allez devoir arrêter index advisor en ajoutant une variable d’environnement
ADDENVVAR ENVVAR(QIBM_NO_INDEX_ADVICE) VALUE( ») LEVEL(SYS) pour que cela soit pris en compte vous devez faire un IPL

Vous devez ensuite refaire la procédure ci dessus attention il faut redémarrer index advisor en enlevant la variable d’environnement par

RMVENVVAR ENVVAR(QIBM_NO_INDEX_ADVICE) LEVEL(SYS)
Vous devez refaire un IPL

Pour contrôler, vous pouvez regarder les variables d’environnement

WRKENVVAR ou
par sql
SELECT
CAST(VAR_BNAME AS CHAR(50)) AS Nom_Variable,
VAR_BVALUE AS Valeur_variable,
VAR_CCSID AS CCSID_variable
FROM QSYS2.ENVIRONMENT_VARIABLE_INFO
WHERE VAR_TYPE = ‘SYSTEM’

et ensuite vous surveillez que le fichier QSYS2/SYSIXADV se remplisse de nouvelles suggestions.

Vous avez des exemples d’utilisation dans ACS.

Alternative à LTO sur vos partitions IBMi

Vous allez installer une nouvelle machine et vous vous posez la question de comment sauvegarder vos informations.
Le réflexe naturel est de mettre en place du LTO, c’est la technologie qui est préconisée par beaucoup d’intégrateurs, mais existe-t-il des alternatives ?
Les DAT pour des questions de fiabilité ont disparu, mais depuis la V7R1, sur le POWER8 vous pouvez utiliser la technologie RDX.

Le RDXest une technologie de disque amovible basée sur USB (USB-3 actuellement), sur des cartouches contenant des disques durs ou SSD 2,5 pouces. Tandberg Data, Lenovo, Dell, HP ou encore Imation proposent cette technologie de sauvegarde.

Vous pouvez l’installer en interne ce qui est recommandé, voire en externe.

https://www.ibm.com/support/knowledgecenter/fr/POWER8/p8hdt/p8hdt_8xx_remdiskdrv.htm

Comment l’utiliser sur votre ibm ?

C’est comme la clé USB que vous avez en façade avec laquelle vous pouvez par exemple installer votre partition

Pour gérer ces lecteurs optiques, vous utilisez la commande ==>WRKOPTVOL
Pour initialiser utiliser la commande ==>INZOPT

Vous pouvez voir les informations des lecteurs ==>wrklnk ‘/Qopt/*’

Cette solution ne remplace pas un disque, c’est uniquement pour faire des sauvegardes restaurations

Maintenant comparons avec du LTO

Si vous avez besoin d’une taille modeste et qu’un 1TB suffit, le coût de la solution RDX peut être moins cher environ 20 à 30 %.

Le taux de transfert est d’environ 400 Mo/s contre 160 Mo/s pour du LTO 6 et 300 Mo/s pour le LTO 7
La durée garantie est de 30 ans comme pour les LTO.

https://fr.wikipedia.org/wiki/Linear_Tape-Open

En résumé :


Bien que méconnu dans le monde de L’IBMi, RDX peut être une bonne solution pour les petites sociétés, parce que plus rapide et aussi fiable que LTO


Attention :


Il faut bien vérifier que votre lecteur est bootable
Comme tous les disques externes en USB, cette technologie n’aime pas les coupures électriques.
Vous ne pouvez pas en cas de dépassement de capacité monter un deuxième volume, la limite actuelle est donc de 2TB.

, , Débogage de grandes variables avec RDi

Le débogage avec RDi apporte confort et souplesse, mais il y a un point sur lequel il faut certainement faire un rappel : le débogage de grandes chaines de caractères.

Notre exemple

Simplissime :

Débogage avec RDi

Les variables et leur valeur apparaissent dans la vue dédiée « Variable »

Par contre, « seuls » 10.000 caractères sont affichés, impossible de voir la suite de la variable. De plus, impossible de modifier la variable :

La vue Moniteurs

Cette vue, qui sert déjà pour les variables des programmes CL, va également nous aider pour les variables RPG en permettant plus d’options. Il est possible d’utiliser dans cette vue toutes les syntaxes usuelles de STRDBG avec la commande EV (ou EVAL) qui supporte des compléments, des fonctions intégrées etc …

Vous pouvez ajouter une expression monitorée en faisant un click droit sur une variable puis « Contrôler une expression »

Vous pouvez également saisir manuellement des expressions (vous reconnaîtrez les syntaxes du STRDBG) :

Vous pouvez alors utiliser %SUBSTR, DIGITS etc … Pour vous permettre de cibler une sous-chaîne spécifique par exemple.

Mais impossible de modifier une sous-chaîne par ce moyen :

Modification de variables

Vous devez utiliser cette syntaxe :

Attention : les chaines de caractères sont passées en majuscule ! Sauf à travailler en hexadécimal (est-ce réellement pratique ?)

Extension via APAR SE71579

L’APAR https://www.ibm.com/support/pages/apar/SE71579 permet d’augmenter les limites. Désormais :

Extend the string length limits to bigger values for            
fixed-length and variable-length string values in RDi debug.    
Maximum editable limit is now 4K (4096). Maximum display limit  
is now 30K (30720). The limits are 1K (1024) in the current    
driver.

Vous devez installer les PTF SI71302 (7.3) ou SI71314 (7.4). Après application on peut voir jusqu’à 30720 caractères dans notre cas :

La modification reste limitée à 4Ko.

, Client FTPS avec la nouvelle interface DCM

Pas encore habitué à la nouvelle interface de DCM ? Les options sont rangées différemment, voici donc un guide pour activer le FTPS client !

Informations nécessaires

Lorsque vous avez besoin d’initier une connexion FTP vers un serveur sécurisé par un certificat SSL, vous n’avez pas besoin d’importer le certificat serveur, mais de vous assurer de disposer des autorités de certification (CA) correspondantes.

Par exemple, pour le serveur jupiter.gaia.fr, voici le certificat lié au service FTP :

Ce certificat a été émis par une autorité Let’s Encrypt Authority X3, elle-même issue d’une autorité DST Root CA X3. Ce sont ces deux autorités de certification dont il faut disposer.

Connexion à DCM

La nouvelle interface est disponible ici : http://monIBMi:2006/dcm

Connectez-vous avec un profil fort :

Ouvrez le magasin *SYSTEM :

L’ensemble des certificats vous est proposé, nous allons filtrer pour n’afficher que les autorités de certifications :

Seuls les CA sont affichées désormais. En naviguant / cherchant, on retrouve nos 2 certificats racines :

Les options de recherches / tri :

Importation d’une autorité

Si un ou plusieurs CA racine ne sont pas trouvés, vous devez les importer. Pour cela, transférer le certificat sur l’IFS (via FTP, NetServer etc …).

Définir les CA pour FTPS

Il ne reste maintenant plus qu’à indiquer au client FTP la ou les autorités de certification auxquelles faire confiance : tous les certificats serveurs issus de ces autorités seront autorisés.

Allez sur l’option « Manage Application Definition » :

Filtrer puis sélectionner FTP Client :

Par défaut, si aucun CA n’est indiqué, FTP fait confiance à l’ensemble des CA connu dans le magasin *SYSTEM. Sinon, uniquement aux CA indiqués :

Sélectionner les CA nécessaires puis Define :

Test

Renseigner profil et mot de passe lorsque demandé : la connexion est sécurisée, vos données et les commandes FTP seront cryptées lors de l’échange.