, 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.

, 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.

, 5 raisons pour abandonner QDLS

Premièrement, un vitesse de transfert bien moins rapide qu’un fichier classique de l’ifs , en moyenne on mesure des temps de transferts 2,7 fois plus lent sur du ftp .

Deuxièmement, un lien fort avec SNA.
Vous devez être inscrit à la directory SNA pour y accéder.
Vous devez utiliser des commandes spécifiques pour toutes les opérations de manipulation, copie, mise en place de droits, sauvegarde etc…

Troisièmement, une codification très particulière, le nom doit être composé 8 caractères, un point et 3 caractères, les fichiers sont codés en ANSI, qui a l’heure de l’unicode semble bien pauvre.

https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange

Quatrièmement, de nombreuses restrictions qui apparaissent au fil du temps et qui posent des problèmes inutiles

Sur le montage des partages
https://www.ibm.com/support/pages/node/637657

Lié à SMB2 en version 7.3
https://www.ibm.com/support/pages/cannot-save-files-office-qdls-smb2-enabled

Cinquièmement, ce n’est pas le sens de l’histoire et comme SNA en général, par exemple Anynet ne fonctionne plus en 7.4.
IBM qui poliment indique que c’est stabilisé, mais nul doute que le débranchement n’a jamais été aussi près.

Conseil : Commencez à analyser son utilisation et envisager sereinement une migration dans l’iFS semble une bonne alternative, et avec un peu d’organisation c’est moins compliqué qu’on le pense …

, , RSTLIB ou RSTOBJ et APYJRNCHG

Vous connaissez tous la journalisation base de données sur l’IBM i, qui permet d’avoir les images avant et après de vos modifications base de données avec la possibilité de valider (APYJRNCHG) ou de les invalider par RMVJRNCHG.

  • Je ne parle pas ici du contrôle de validation.

Que se passe-t-il quand on restaure une bibliothèque suite à un sinistre ou sur autre système pour des tests par exemple ?

Par défaut quand vous sauvegardez un récepteur attaché vous avez ce message :

  • CPF7080 Récepteur RCV de TSTJRN1 sauvegardé alors qu’il était attaché

Que se passe-t-il quand on restaure la bibliothèque qui contient le récepteur et le journal ?

Le système crée un nouveau récepteur qu’il attache au journal, votre ancien récepteur est là, mais il est à l’état partiel.

Les récepteurs à l’état partiel ne sont pas utilisables, vous pouvez voir ce qu’il y a dedans en indiquant la plage de récepteur sur la commande DSPJRN, mais vous ne pouvez pas les utiliser.

La plus part du temps ce n’est pas grave, mais si vouliez invalider des modifications en appliquant un filtre c’est impossible.

Vous devez lire les données et les reporter à la main.

La solution est, avant de sauvegarder votre bibliothèque, de détacher le récepteur en cours.

==>CHGJRN JRN(votrebib/votreJRN) JRNRCV(*GEN)

A la restauration vous aurez 3 récepteurs
1 sauvegardé
1 partiel
1 attaché

Vous avez toujours le récepteur partiel qui est inutilisable, mais il n’a plus de modification de données à l’intérieur

Si vous choisissez d’invalider une partie des transactions en attente, vous pouvez utiliser le récepteur sauvegardé

RMVJRNCHG JRN(votrebib/votreJRN)
FILE((votrebib/*ALL))
RCVRNG(votrebib/RCVsauvegardé votrebib/RCVsauvegardé)

vous aurez un message de ce type

x postes retirés pour x objets.
Certains postes n’ont pas été appliqués ou retirés pour au moins un objet.

Le deuxième message indique que votre demande a trouvé des postes autres que R (modifications de données)

Conclusion :

Il peut être intéressant de détacher vos récepteurs avant de faire vos opérations de savlib au moins pour vos bibliothèques importantes, on ne sait jamais !

Il est intéressant de regarder si vous avez des récepteurs à l’état partiel, ça peut révéler un vrai problème.

J’ai des outils sur GITHUB qui traitent des journaux :

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

, Utiliser SYSLOG sur IBMi

Les nouvelles organisations informatiques imposent parfois la mise en place d’un SIEM.

Chez IBM on vous proposera QRADAR. SPLUNK est aussi une solution très connue.

https://fr.wikipedia.org/wiki/Security_information_management_system

Pour échanger avec votre concentrateur, vous devrez utiliser un format spécifique qui se nomme SYSLOG.

https://fr.wikipedia.org/wiki/Syslog

Comment produire du format syslog sur L’IBMi?

Il y a principalement 3 manières d’en produire.

SQL as a service à prévu des passerelles pour produire ces fichiers.

1) Sur les sorties d’audit journal QAUDJRN

Exemple :

SELECT
SYSLOG_EVENT ,
SYSLOG_FACILITY ,
SYSLOG_SEVERITY ,
SYSLOG_PRIORITY
FROM TABLE(QSYS2.DISPLAY_JOURNAL(‘QSYS’, ‘QAUDJRN’,
STARTING_RECEIVER_NAME => ‘*CURCHAIN’,
JOURNAL_ENTRY_TYPES => ‘PW’,
STARTING_TIMESTAMP => CURRENT TIMESTAMP -24 HOURS,
GENERATE_SYSLOG => ‘RFC5424’
)) AS X

Cette requête produira une liste des erreurs de login sur les dernières 24 heures

2) sur la log du système

SELECT
SYSLOG_EVENT ,
SYSLOG_FACILITY ,
SYSLOG_SEVERITY ,
SYSLOG_PRIORITY
FROM TABLE(QSYS2.HISTORY_LOG_INFO(
START_TIME=> NOW() – 1 HOURS,
GENERATE_SYSLOG => ‘RFC3164’
)) AS X

cette requête extrait la liste des commandes du dsplog sur 1 heure

La fonction table ne prévoit pas de filtre vous serez surement obliger de rajouter une clause WHERE pour, par exemple, choisir des messages.

Il y a 2 formats de sortie :

https://tools.ietf.org/html/rfc3164

https://tools.ietf.org/html/RFC5424

3) En utilisant SYSLOG

Syslog n’est pas qu’un formatage de données c’est aussi un logiciel UNIX de remontée d’alerte.
Ca peut être intéressant si par exemple vous utilisez des logiciels open source sur votre partition.

https://fr.wikipedia.org/wiki/Syslog

l’installation est très classique :

Vous avez un executable qui se trouve ici, /QOpenSys/usr/sbin/syslogd.
Vous devrez avoir un fichier de conf ici, /QOpenSys/etc/syslog.conf
Ce fichier doit être en CCSID819 et avoir *LF comme délimiteur.
Dans ce fichier vous indiquerez votre fichier de sortie.
Vous démarrez SYSLOG
SBMJOB CMD( CALL QP2SHELL PARM(‘/QOpenSys/usr/sbin/syslogd’) ) JOB(SYSLOGD)

Par convention on l’appelle SYSLOGD du nom du deamon UNIX.
Si vous n’avez pas de sous-système dédié à ce type d’opération mettez le dans la jobq QSYSNOMAX, il tournera alors dans le sous système QSYSWRK.

Une fois que vous avez produit vos fichiers, il suffira de les envoyer en CSV par exemple à votre concentrateur SIEM.

Vous devrez faire attention au CCSID à produire

Le logs peuvent prendre beaucoup de place, n’oubliez pas de les extraire pour les consolider et de faire le ménage.

Une fréquence journalière peut être adaptée à ce type de traitement.

Il existe des solutions plus ou moins packagées, que vous pouvez trouver chez des éditeurs.