, Mise en place d’un PRA ?

Quand on discute avec les clients on se rend compte qu’il y a une grande confusion entre haute disponibilité est PRA, PCA etc …

Prenons la définition de WIKIPEDIA .

Un plan de reprise d’activité (PRA) est un ensemble de procédures (techniques, organisationnelles, sécurité) qui permet à une entreprise de prévoir par anticipation, les mécanismes pour reconstruire et remettre en route un système d’information en cas de sinistre important ou d’incident critique.

En gros pour moi c’est le temps dont on a besoin suite à gros un crash pour rendre un service acceptable à la production.

Comment faire le point dans votre entreprise ?

il y a une technique assez simple c’est de se dire voila, on est planté maintenant qu’est ce qui ce passe ?

1) Il va vous falloir Reconstruire une machine.

il va falloir vous pencher sur les contrats de maintenance de votre partenaire matériel . Ne pas hésiter à ce faire confirmer les choses.
La vrai durée qui doit vous intéresser c’est combien de temps pour avoir une machine opérationnelle.

une prise en compte de l’incident au 1/4 heure s’il ne se passe rien derrière ne sert à rien !

2) Reconstruire le contexte opérationnel

On limitera ici à la restauration complète de la machine.

Ça veut dire ou sont la ou les bandes :

A) du système (on parle de savsys)

pour restaurer l’os, les configurations, les utilisateurs.
première remarque, tout ce qui a évolué sur votre système dans le lapse de temps est perdu (nouveau profils , changement de mot de passe)

la bonne fréquence , si on le peut sauvegarde complète tous les soirs, ça simplifie les opérations de reprise
sinon 1 fois par semaine est un bon compromis, une fois par mois est un minimum.
mais attention sachez précisément ou est cette bande, quand vous la chercherez le compteur tournera.

B) des données

Les bibliothèques
Les dossiers partagés (à remplacer au plus vite)
Le reste de l’ifs

Pour avoir une idée de vos temps de restauration compter vos temps de sauvegarde que vous multipliez par environ 1,5.

1 client sur trois ne saurait pas remonter sont système sans perte d’informations, 9 clients sur 10 sauvegardent bien leurs bibliothèques de données mais néglige le reste.

Une fois votre système n’oubliez pas de ré-appliquer les droit privés !

3) Conclusion

Vous devez pouvoir répondre à votre directeur combien de temps prendrait un crash du système

reconstruction de la machine    xx heures
reconstruction du système         xx heures
refresh des dernières données  xx heures

exemple :

36 heures
1 heures
3 heures

Ne négligez pas les temps de prise de décision, que vous ne rattraperez jamais.

Vous pouvez mettre en place des choses simples , pour pouvoir travailler à minima en cas de problèmes.

Par exemple , j’avais un client qui descendait tous les soirs les commandes à préparer le lendemain dans csv sur un PC de L’entrepôt

Vous devez également vérifier que vos sauvegardes sont lisibles …

 

Vous ne pourrez pas dire je ne savais pas !

, Mettre en place une alerte qui vous avertisse en cas de dépassement de seuil limite de votre ASP.

Voici comment être alerté en cas de disques pleins , en mettant en place une solution simple

Vous avez une valeur limite système qui s’appelle QSTGLOWLMT qui indique la valeur minimum qui doit rester et qui est exprimée en % souvent 15 % ou 10 %.

Vous avez une deuxième valeur système QSTGLOWACN qui indique l’action à effectuer quand vous aurez dépassé ce seuil
par défaut *MSG enverra un message dans QSYSOPR
Vous pouvez changer cette valeur en *REGFAC cette notion veut dire déclenche le programme associé au programme d’exit QIBM_QWC_QSTGLOWACN

le programme que vous devez lancer ne reçoit pas de paramètre

 

ADDEXITPGM EXITPNT(QIBM_QWC_QSTGLOWACN)
FORMAT(STGL0100)
PGMNBR(1)
PGM(MABIB/MONPGM)

exemple de programme :

PGM

/* MONPGM */
SNDSMTPEMM RCP((‘admin@votresociété.fr’)) +

SUBJECT(‘Limite espace disque’) +

NOTE(‘Attention vous avez dépassé le seuil de mémoire requise’)

ENDPGM

Bien sur il faut que votre partition soit relais de messagerie .

Attention, si vous utilisez le mail, QPGMR devra avoir le droit d’en emettre, utilisez la commande ADDSMTPLE.

Vous pouvez faire un programme beaucoup plus évolué, même en RPGLE,  si vous le désirez .

Attention :

La petite subtilité est donc au redémarrage :

Quand on démarre le système (IPL) ou qu’on lance le qstruppgm ou qu’on démarre le sous système qctl avec moins de la valeur  QSTGLOWLMT, Il ne peut pas soumettre le Programme d’exit et le système reste en restreint un peu comme la valeur *ENDSYS qui mettrait directement le sous système en restreint. et pour redémarrer vous devrez faire du ménage ….

,

Tester PRUV (Pre-upgrade verification tool for IBM i

« Pre-upgrade Verification tool » plus connu sous le nom de PRUV est maintenant en téléchargement pour tous.

Il va vous permettre d’effectuer vos contrôles avant de lancer une mise à jour de version OS.

 

Pour le télécharger rendez vous à l’adresse

https://www-01.ibm.com/support/docview.wss?uid=nas8N1014074

après une explication le chargement ce passe ici

https://www-01.ibm.com/marketing/iwm/iwm/web/dispatcher.do?source=ipvt

Vous avez besoin de vos identifiants IBM pour télécharger

Vous pouvez télécharger soit avec Download director ou par HTTP

Vous allez récupérer un zip exécutable  exemple : pruv_.4.0.nnnnnn.exe

après dezippage,  vous obtenez un fichier run_pruv.bat que vous allez lancer.

Vous devez accepter la clé puis vous identifier.

Choisir votre version cible , ensuite , next

Vous obtenez un rapport très facile à lire, avec les interventions à faire

Vous pouvez facilement l’exporter au format HTML

Conclusion :

Un petit outil bien sympathique qui permet de valider des choses avant votre migration !

Attention, il ne remplace pas  la « Préparation de l’installation » (go licpgm puis Option 5)  que vous devrez quand même l’utiliser.

par exemple:

Pour augmenter les tailles LIC ou pré accepter les licences, mais PRUV vous l’aura indiqué …

 

, Premiers tests services web REST SQL

Une des fonctionnalités attendues disponible avec la 7.4 / 7.3 TR6 (SF99722 niveau 19) est la possibilité de déployer des services web (REST uniquement) basés sur des instructions SQL au lieu de programmes ILE.

 

Voici nos premiers tests, effectués « à vue » la documentation IBM n’étant pas encore disponible …

 

Services REST SQL

En bref, vous avez désormais les possibilités suivantes :

  • effectuer des SELECT, UPDATE, INSERT
  • appeler des fonctions SQL utilisateur (UDF), des fonctions tables (UDTF)
  • appeler des procédures stockées (procédures cataloguées)
  • utiliser directement la syntaxe VALUES …
  • retourner des données BINAIRES (images, pdf, …)

De plus, IWS vous propose également un format de sortie HTML, en plus de JSON et XML déjà en place. De quoi faciliter l’intégration de vos données dans des pages web !

 

Comment fait-on ?

Déployer un nouveau service : vos avez maintenant la possibilité de choisir SQL

Comme d’habitude pour les services REST, vous indiquez nom de service et nom de ressource

Maintenant, vous avez des paramètres spécifiques à un service basé sur SQL vous permettant de régler les conventions de nommage et la résolution des objets non qualifiés dans vos requêtes. Le fonctionnement est habituel en SQL. Pour simplifier : basé sur la *LIBL en convention *SYS, sur un schéma par défaut en *SQL

Vous pouvez indiquer plusieurs « procédures » dans un service REST SQL, c’est à dire plusieurs opérations disponibles au travers de votre service, et identifiées (plus tard) par des URL et/ou des méthodes HTTP différentes

Pour commencer simplement :

Bien sûr, vous pouvez utiliser des paramètres dans vos requêtes SQL, identifiés par « ? » :

L’outil est plutôt bien fait de ce côté-là : il est capable de détecter le type des données correspondant à vos paramètres en analysant le fichier :

Vous devez ensuite régler le comportement attendu de votre traitement :

la suite des écrans est classique et ne présente pas de particularité dû au SQL, en dehors du type de sortie *HTML proposé.

Quelques exemples de résultats fournis par les appels de différents services (renvoyant une ligne ou plusieurs lignes, en JSON, en XML, en HTML …) :

 

L’outil vous permet également d’obtenir des informations sur l’exécution et les erreurs SQL :

 

Données binaires

Maintenant, passons à la possibilité qui ouvre d’autres perspectives !

Avec les services basés sur des programmes ILE RPG/COBOL, nous n’arrivons pas à retourner des images ou documents binaires : toutes les données sont converties en UTF-8 (par défaut) pour sortir sur le flux HTTP. Nos données binaires ne supportent pas bien … seule solution jusqu’ici : encoder en base64 (c’est à dire en caractères) ! Mais cela complexifie, nécessite du temps machine et augmente la taille de la sortie.

Lors du déploiement, sélectionner le type « Media resource »

Vous devez indiquer le type de ressource (seule la première valeur est prise en compte) :

Dès lors, vos services web peuvent retourner des documents (au sens large), par exemple un pdf accessible depuis un navigateur :

Ou une image (vous devriez reconnaître) :

 

Adaptation des scripts shell

Un nouveau script shell a fait son apparition dans /qibm/proddata/os/webservices/bin : getConfigurationFile.sh

 

Les informations disponibles actuellement : https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/dW%20IBM%20Integrated%20Web%20Services%20for%20i/page/Script%20to%20generate%20property%20file%20for%20a%20service

Ce dernier génère deux fichiers pour un service :

  • un fichier .properties
  • un fichier .xml

Le fichier properties contient les attributs du service, des procédures/méthodes, du connecteur jdbc.

Le fichier xml est en réalité un fichier pcml contenant des balises spécifiques utilisées pour le déploiement d’un service.

Ces formats de fichiers permettront également le déploiement par script shell (avec installWebService.sh) des services REST SQL.

 

 

En conclusion

L’outil poursuit sa belle évolution, avec toujours plus de fonctionnalités et de possibilités ! Nous compléterons prochainement avec des tests plus approfondis.

D’ici là, bonnes vacances à tous, et rendez-vous à la rentrée, reposé et bronzé !

,

Parser un tableau JSON avec l’opération SQL JSON_TABLE

L’opération SQL JSON_TABLE sert à extraire les données d’un flux JSON pour les intégrer en base de données.

Pour rappel, les services web REST renvoient  la plupart du temps des réponses en JSON.
L’opération fonctionne bien si le premier niveau hiérarchique du flux est un objet JSON,  pouvant lui-même contenir un tableau.
Prenons par exemple un flux JSON contenant l’objet « qteage » étant lui-même un tableau :

{
« qteage »: [
{
« agence »: « LY »,
« qte »: 567
},
{
« agence »: « PA »,
« qte »: 879
}
],
« code »: « OK »,
« message »: «  »
}

Nous pouvons récupérer les éléments du tableau sans problème par la requête :

select u.* from json_table( ‘{
« qteage »: [
{
« agence »: « LY »,
« qte »: 567
},
{
« agence »: « PA »,
« qte »: 879
}
],
« code »: « OK »,
« message »: «  »
}’, ‘strict $.qteage[*]’
COLUMNS( « CodAge » varchar(50) PATH ‘strict $.agence’ ,
« Quantite » decimal   PATH ‘strict $.qte’
)  ) AS U;

Par contre si le flux JSON renvoie directement un tableau, l’opération JSON_TABLE n’arrive plus à extraire les données :

Prenons par exemple, le flux suivant, qui est reconnu par les outils de validation en ligne :

Lorsque nous essayons de travailler avec ce flux, l’opération JSON_TABLE, ne fonctionne plus :

select u.* from json_table( ‘[
{
« agence »: « LY »,
« qte »: 567
},
{
« agence »: « PA »,
« qte »: 879
}
]’, ‘strict $.[*]’
COLUMNS( « CodAge » varchar(50) PATH ‘strict $.agence’ ,
« Quantite » decimal   PATH ‘strict $.qte’
)  ) AS U;

L’instruction est bien traitée, mais le résultat est vide :

IBM confirme que l’instruction attend un objet JSON et non un tableau sur le premier niveau hiérarchique.

Si vous êtes confronté à ce problème, vous n’aurez pas d’autre solution que de modifier le JSON reçu, pour ajouter un niveau hiérarchique qui englobera votre flux initial.

Par exemple par l’ajout de l’objet « data ». Votre flux deviendra :

{ « data » : 

[
{
« agence »: « LY »,
« qte »: 567
},
{
« agence »: « PA »,
« qte »: 879
}
] }

Vous pouvez le faire, entre autre, par SQL  :

SET :donnees = ‘{« data » : ‘ || trim(:donnees) || ‘}’ ;

Attention toutefois à l’encodage de votre résultat, le flux JSON d’origine est encodé en UTF8. Si le CCSID de votre machine est 65535, vous  devrez modifier le CCSID de travail pour que l’instruction SQL s’exécute sans erreur, soit au niveau du job, de l’utilisateur, de variables de travail…. Mais là c’est une autre histoire ! 

 

,

Quid de SNA avec la version 7.4

 

La version 7.4 arrive, et une des grandes annonces est l’abandon de *ANYNET.

(*ANYNET est une solution qui permet d’encapsuler SNA dans de l’IP)

C’est l’occasion de faire le point sur SNA.
Pour les plus jeunes SNA est une implémentation réseau un peu comme TCP/IP ou ISO avec les quels il a de grandes similitudes.
C’est une solution propriétaire (IBM) qui existait avant TCP/IP qui tend à le remplacer.
Souvent les gens pensent ne plus utiliser SNA mais réalité ils l’utilisent encore.

Voici trois traces persistantes qu’on retrouvent chez nos clients

  • 1) La commande SNDDST pour envoyer des mail
    2) l’utilisation des fichiers stockés dans QFLR (plus connu sous le nom de dossier partagés)
    3) l’utilisation des commandes SAVRST* qui permettent de distribuer des objets d’une machine à une autres.

Si vous utilisez une des 3 fonctions ne chercher pas vous êtes concernés.

Certes SNA ne semble pas être le sens de l’histoire, mais comment faire ?

  • Première Solution

  • Abandonner SNA purement et simplement
  • Attention à bien analyser l’impact beaucoup de sources recèlent des trésors cachés (SNDDST, SNDNETF, SBMNETJOB, SAVRSTLIB, etc …)
    il peut y avoir beaucoup de travail, par exemple OBJECT CONNECT n’a pas d’équivalent IP.
  • Quels gains peut on attendre ?
    Plus besoin de faire un SAVDLO dans votre sauvegarde globale
    Plus besoin de gérer la directory SNA
    Faire des envois de mail avec des historiques et de vraies pièces jointes.

 

  • Deuxième Solution

  • Faire durer SNA encore une peu.
  • Si vous avez plusieurs machines, vous allez être obliger de migrer vos connexion en Oject extended.
  • Ne perdez pas de temps, vous pouvez faire cette opération dès à présent ce qui simplifiera votre migration.
  • Cette deuxième solution ne vous dispense pas de petit à petit basculer des fonctions de SNA vers IP , on n’est pas sur que SNA sera Pérennisé dans le temps par IBM

Conclusion

  • Dans tous les cas, il faut penser à remplacer  petit à petit SNA
  • Par contre l’arrêt de *ANYNET sera brutal , alors anticipez !

Principales correspondances SNA / IP

, Access Client Solutions 1.1.8.1

La toute dernière version de ACS disponible depuis novembre 2018 apporte son lot d’améliorations. Sans surprise, ce sont les fonctionnalités liées à SQL qui évoluent le plus.

Petite revue des principales évolutions.

 

Script SQL

Les SELECT avec l’option FOR UPDATE permettent une modification directement dans l’affichage du résultat :

Possibilité de demander l’affichage de l’entête de colonne, soit dans les options, soit par click droit sur l’entête dans le résultat :

Schéma de base de données

Le choix de l’ASP est désormais possible :

Des améliorations dans différents affichages (objets associés), et la capacité à modifier les Alias, Masque de colonne et Droits sur une ligne.

 

Autres

Dans le centre de performances SQL, possibilité de filtrer les moniteurs, les images instantanées de cache, et moniteurs d’événements de cache :

Dans les sessions 5250, la bufferisation du clavier est désactivable :

Les sessions 5250 Client Access configurées avec Kerberos sont prises en charge dans l’outil de migration.

 

Pour les transferts de fichier :

  • le nom des onglets excel est personnalisable
  • Correction d’un bug sur les transferts de type .dsr (Dos Random) supportent l’UTF-8 => ATTENTION : cela produit une incompatibilité avec les versions précédentes d’ACS.

 

 

La version recommandée de Java est désormais Java 8 update 191 ou supérieur. Le script d’installation Windows vérifie la compatibilité avec la version de Java disponible sur le système.

 

La liste complète des dernières modifications : ftp://ftp.software.ibm.com/as400/products/clientaccess/solutions/readmespacs.txt

Toujours utile, les ressoucres ACS en ligne : https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/IBM%20i%20Technology%20Updates/page/IBM%20i%20Access%20Resources