Migrer les jobs de Job scheduler vers Advanced job scheduler.

Rappel :

Sur l’IBMi il existe un scheduler standard celui qui se cache derrière la commande WRKJOBSCDE.
Il est très rudimentaire, vous n’avez pas d’historique ni de dépendance travaux.
C’est un unique objet, QDFTJOBSCD de type *JOBSCD qui est stocké dans la bibliothèque QUSRSYS.
C’est le travail QSYSSCD qui tourne dans QCTL
QCTL QSYS SBS 0,0
QSYSSCD QPGMR BCH 0,0 PGM-QEZSCNEP
Attention vous devez le sauvegarder par SAVOBJ par exemple , vous pouvez également l’envoyer sur une autre machine et le restaurer par un RSTOBJ

IBM propose un autre produit qui s’appelle job scheduler advanced c’est le produit 5770JS1, il est payant ,mais il permet de faire beaucoup plus de choses !
Pour y accéder en mode 5250 ==>GO JS, sinon vous pouvez y accéder par l’interface web de navigator for i
Son paramétrage est composé de fichiers qui sont stockés dans la bibliothèque QUSRIJS

Voici , comment reprendre les travaux de job scheduler vers advanced job scheduler , si vous choisissez de passer du premier vers le deuxième

La première méthode si vous avez peu de commandes dans le scheduler !


Go cmdjs

Option 5

Option 7

Option 8 en face de chaque job à migrer_

Ça produit une commande de ce type
ADDJOBJS JOB(nomjob)               
         SCDCDE(DAILY)                
         TIME(1815)                    
         DAY(MON *TUE *WED THU)      
         TEXT('Votre texte')     
         CMD(CALL PGM(<lib/pgm))
         RCYACN(SBMRLS)               
         JOBD(USRPRF)                 
         JOBQ(QGPL/QS36EVOKE)          
         USER(SYSTEM)                  
         MSGQ(USRPRF)      

Si vous désirez automatiser cette opération.

Attention le job scheduler standard n’est pas composé de fichiers contrairement à advanced job scheduler qui lui en est composé

par exemple :
Job planifiés : select * from QUSRIJS/QAIJSMST where JMSTS <> ‘*HELD’
Historique : select * from QUSRIJS/QAIJSHST
Mais heureusement SQL as a service a résolu ce problème en créant une vue qui vous permet d’accéder aux job planifiés !
select * from QSYS2.SCHEDULED_JOB_INFO
pour limiter au job actifs
SELECT * FROM QSYS2.SCHEDULED_JOB_INFO
where status <> ‘HELD’
il vous suffit donc de lire cette vue et pour chaque ligne de faire un
ADDJOBJS en adaptant les paramètres

Conseil :

Commencer par une ou 2 commandes et n’écrivez pas directement dans les fichiers de JSA.

, Adoption de droits

Rappel

C’est la possibilité d’avoir accès à une ressource momentanément en passant par un programme qui s’exécutera avec les droits du propriétaire et non celui de l’utilisateur en cours .

Mise en oeuvre

Pour créer un programme adoptant.
C’est le paramètre USRPRF(*OWNER) dans les commandes qui génèrent un

programme.
Vous pouvez également utiliser la commande chgpgm pour modifier ce paramètre.
Dans tous les cas vous devez avoir au minimum le droit *USE sur le profil propriétaire.
Vous héritez également des droits spéciaux, comme *SPLCTL

Exemple :


Un exemple classique c’est le changement de mot de passe par un exploitant qui n’a pas le droit *SECADM dans les paramètres de son profil

Soit le programme suivant chgusrpwd compiler avec propriétaire qsecofr et le paramètre USRPRF(*OWNER)

PGM        PARM(&USR)                                   
DCL VAR(&USR) TYPE(CHAR) LEN(10) CHGUSRPRF USRPRF(&USR) PASSWORD('#password$') + PWDEXP(YES) STATUS(*ENABLED)
MONMSG MSGID(CPF2204) EXEC(SNDUSRMSG MSG('Profil,' +
*BCAT &USER BCAT 'inéxistant') + MSGTYPE(INFO))
ENDPGM

l’utilisateur peut rendre le mot de passe sans avoir le droit *SECADM, en

tapant ==>call chgusrpwd (‘NOMPROFIL’)

Sur un programme, vous avez un deuxième paramètre c’est USEADPAUT(*YES)

c’est est ce qu’on hérite des droits du programme appelant qui lui peut être en adoption de droit (par exemple call qcmd …)

Avantages :


Si vous Maîtrisez bien, c’est un moyen de dire, aucun de mes utilisateurs n’a le droit sur ma base de donnéee, mais il obtient le droit en utilisant mon applicatif, on pense au accès par ODBC par exemple !

Inconvéhients :


Ça peut être une ‘back door‘ pour des individus mal intentionnés.

Analyse et suivi :
La commande DSPPGMADP permet de mettre dans un fichier les programmes adoptants et ensuite vous pouvez interroger ce fichier.

2 valeurs systèmes influent sur l’adoption de droit.

QALWOBJRST

*ALWSYSSTT
Permet aux programmes, programmes de service et modules ayant un attribut état-hérité d’être restaurés. Lorsque le paramètre de la valeur système

QFRCCVNRST entraîne la conversion de l’objet, celui-ci passe à état-

utilisateur.

*ALWPGMADP
Les programmes et programmes de service disposant de l’attribut d’adoption sont restaurés.

Cette valeur contrôle les restaurations d’objets sur votre partition

La deuxiéme valeur système

QUSEADPAUT

Elle indique si vous avez le droit de créer des programmes qui héritent
des droits adoptés , c’est le paramètre USEADPAUT(*YES)

*NONE
Tous les utilisateurs du système on le droit de créer des utilisateurs qui héritent des droits du programme appelant.

nom d’une liste d’autorisation par convention souvent, QUSEADPAUT et seul les utilisateurs inscrits à cette liste et disposant de *use sur celle ci auront le droit de créer ou de modifier des programmes pour demander un héritage de droit.

Limites

Attention, vous héritez également des droits spéciaux , *SECADM par exemple

Attention, L’héritage de droit et la valeur par défaut USEADPAUT(*YES)

L’adoption de droit, ne fonctionne pas sur l’IFS qui est régie par un mode unix

Conclusion

il est important de bien comprendre les mécanismes d’adoption de droit , soit pour les utiliser dans votre application, soit pour les contrôler et les administrer.

, , Utiliser Dynamic compound statement avec SQL

Depuis la version 7.1, vous pouvez composer une instruction SQL dynamique c’est assez similaire à une procédure SQL, sauf qu’elle ne créera pas un objet permanent .
Vous trouverez un fichier source QSQLT00000 , SQL COMPOUND DYNAMIC QCMPD00001 dans votre bibliothèque qtemp

Le but :

Vous pouvez l’utiliser pour ajouter une logique aux scripts, mais aussi pour intercepter les erreurs de traitement entre autres.

Par exemple, il n’existe pas d’instruction pour faire un create replace avec la syntaxe create table as(..)with data.

La solution est donc la suivante :

begin
declare continue handler for sqlstate ‘42704’ — fichier existant
begin end ;
drop table qgpl.liste ;
create table qgpl.liste as( select * from qgpl.qauoopt ) with data ;
end ;

42704 étant le sqlstate pour table non trouvée

Voici un deuxième exemple qui permet d’écrire dans un fichier log, si vous avez au moins une PTF à appliquer (CREATE TABLE LOGPTF(TEXT CHAR (132 ) NOT NULL WITH DEFAULT)), le code est placé dans un RUNSQL pour être exécuté dans un CLLE.

Attention aux nombre de quotes ….

DCS peut être utilisé dans tous les environnements :
srcipte SQL par exemple dans ACS
RUNSQLSTM
RUNSQL
SQL embarqué

Il y a plein de possibilités et la limite c’est votre imagination …

lien à connaitre

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/sqlp/rbafydyncompound.htm

Quelques informations sur l’IPL de votre Partition

IPL (initial program load) et en réalité le Reboot dans d’autres environnements.

A quelle fréquence doit on faire un IPL? Voici quelques informations.

Un IPL n’est plus sytématique pour la reconstruction des adresses temporaires.
Un IPL efface le cache SQL ce qui peut être pénalisant pendant la phase de profiling de votre partition
Un IPL est nécessaire pour appliquer les PTF.
Faire un IPL pour appliquer les PTFs tous les mois semble un bon compromis mais …

Vous pouvez planifier un redémarrage de votre machine par l’intermédiaire d’une valeur système, QIPLDATTIM

Vous devez indiquer la date au format QDATFMT de votre machine + l’heure de redémarrage.

Le principe, vous arrêtez votre partition par ==>PWRDWNSYS Restart(*No) et le redémarrage sera effectuée à la date et l’heure planifiée dans la valeur QIPLDATIM.

Vous avez un menu qui peut permettre de gérer votre planning d’arrêt redémarrage ==>Go POWER qui aide à réaliser un planning.

Cette option ne sera pas utiliser sur les partitions de prod, ou il vous faudra jongler entre l’indisponibilité, la présence de votre cache SQL et l’application des PTFs .

Mais vous avez des dizaines de partitions qui tournent en permanence pour rien et qui pourraient être arrêtées , au moins les week-end voir les périodes de vacances ou autres … Pensez à la planète.

Vous avez une valeur système QIPLSTS qui vous donne des informations sur le dernier IPL


0=IPL manuel à partir du panneau opérateur ou de la HMC
1=IPL automatique après rétablissement du courant, la valeur QPWRRSTIPL devant être à OUI
2=IPL relancé par PWRDWNSYS avec restart *yes
3=IPL selon date et heure planifier par la valeur système QIPLDATIM
4=IPL à distance

Remarque
On peut tester également regarder la valeur système QABNORMSW qui indique l’état du précédant IPL
0=Normal
1=Anormal

Vous avez une valeur système QIPLTYPE, qui sert à définir le type d’IPL à effectuer


0=IPL sans contrôle opérateur
1=IPL sous contrôle opérateur avec les outils de maintenance en mode dédié (DST)
2=IPL sous contrôle opérateur, console en mode de débogage
Cette valeur est généralement à 0

Vous avez une valeur système méconnue QPWRDWNLMT,

Elle est réglée par défaut à 900 secondes
C’est la durée maximale de PWRDWNSYS *IMMED , Si vous voulez une vrai arrêt immédiat il faut mettre cette valeur

à 0.
Sauf cas exceptionnel, on ne touche pas à cette valeur sur une partition de prod.

Vous pouvez gérer vos attributs d’IPL par la commande
==>CHGIPLA

voici quelques options interessantes de cette commande

RESTART()

*SYS
Le système d’exploitation est relancé. Le matériel est redémarré uniquement si une PTF requérant un

redémarrage matériel doit être appliquée.

*FULL
Tout le système, y compris le matériel, est redémarré, il est préférable d’indiquez cette valeur, si vous

avez un ptf firmware à appliquer à partir de votre partition.

HDWDIAG()

*MIN
Les diagnostics de matériel minimaux sont exécutés.

*ALL
Tous les diagnostics de matériel sont exécutés, à mettre suite un probléme …

CPRJOBTBL()

*NONE
Les tables de travaux ne sont pas comprimées à l’IPL.

*NEXT
Les tables de travaux sont comprimées pendant l’IPL suivant. Cette valeur sera réinitialisée avec la
valeur *NONE une fois la compression de la table de travaux démarrée.

*NORMAL
Les tables de travaux sont comprimées au cours des IPL normaux uniquement.

*ABNORMAL
Les tables de travaux sont comprimées au cours des IPL anormaux uniquement.

*ALL
Les tables de travaux sont comprimées au cours de tous les IPL

Cette valeur sert à comprimer les tables de travaux que vous vous voyez dans la commande DSPJOBTBL
Il faut de temps en temps mettre *NEXT qui indiquera de compresser au cours du prochain IPL , valeur repassera à

*NONE après

Sinon vous pouvez mettre *ALL qui peut augmenter le temps d’IPL mais vous assurera une table des travaux à jour.

Compléments

Si vous indiquez un IPL de type normal (QIPLTYPE 0) l’IPL va démarrer un sous système indiqué dans la valeur système QCTLSBSD, le plus souvent QCTL se sous système lancera un programme à démarrage automatique qui est indiqué dans la valeur système QSTRUPPGM, il peut être important de regarder ce programme qui traîne souvent des choses obsolètes.

Pourquoi utiliser un groupe principal sur objet (on parle de PGP) ?

Le principe est le suivant :

Dans un objet vous avez, le droit du propriétaire et le droit du public
Les autres droits sont contenus dans les profils

Si vous sauvegardez un objet, par défaut ces 2 seuls droits sont restaurés
depuis la version 7.1 vous pouvez sauvegarder aussi les droits privés
en ajoutant le paramètre PVTAUT(*YES) dans vos commandes de SAV.

Pour des questions de performance vous pouvez ajouter un groupe principal et
lui attribuer un droit sur l’objet.
Dans ce cas le contrôle des droits ne nécessite pas d’accéder au profil.

Et il sera également sauvegardé, pour être cohérent, on doit mettre le groupe le plus utilisé

Voici les principales manipulations

Sur un Objet

CHGOBJPGP OBJ(PLBTSTSEC/TSTFIC) OBJTYPE(*FILE) NEWPGP(PLBgrp)

Sur l’IFS

CHGPGP OBJ(‘/gsec/test.txt’) NEWPGP(PLBGRP) DTAAUT(*RWX) OBJAUT(*ALL)

une seule commande pour la gestion pour Objets et IFS

WRKOBJPGP PGP(PLBGRP)

Groupe principal . . . . . : PLBGRP

Indiquez vos options, puis appuyez sur ENTREE.
2=Réviser les droits 4=Supprimer 5=Afficher les droits 7=Rebaptiser
8=Afficher la description 9=Changer de groupe principal

Unité
Opt Objet Bibliothèque Type Attribut ASP
/gsec/test.txt *STMF *SYSBAS
TSTFIC PLBTSTSEC *FILE PF *SYSBAS

SQL as a service

C’est la vue QSYS2.OBJECT_PRIVILEGES qui contient la zone PRIMARY_GROUP

Attention requête très longue les indexs n’existent pas ??
prévoir des informations complémentaires

SELECT *
FROM QSYS2.OBJECT_PRIVILEGES
WHERE PRIMARY_GROUP = ‘PLBGRP’
and AUTHORIZATION_NAME = ‘PLBGRP’

résultat de la requête

PLBTSTSEC TSTFIC PLBTSTSEC TSTFIC *FILE PLBGRP *ALL QSECOFR PLBGRP

Ne donne pas l’IFS

Remarques :

Votre profil PGP doit avoir un GUID (notion fortement Unix)

Le nouveau groupe principal PLBGRP n’a pas de numéro d’ID groupe.
L’opération a échoué pour le fichier TSTFIC de la bibliothèque PLBTSTSEC.
Fonction non exécutée pour le profil utilisateur PLBGRP.

CHGUSRPRF USRPRF(PLBGRP) GID(132)

Sur une restauration, si le groupe principal n’existe pas il indique un avertissement et il génère l’objet avec PGP = *NONE

Conclusion :

l’intérêt du PGP est qu’il est dans l’objet, donc plus rapide pour contrôler et qu’il est sauvegardé dans un SAVOBJ par défaut

, 5 raisons pour utiliser Isphere

Isphere est un plugin eclipse que l’on peut installer sous RDi et qui apporte des fonctionnalités complémentaires

Raison 1

Il est gratuit, donc ça ne coûte rien de l’installer pour voir !
et c’est un produit open source vous pouvez même participer à son évolution


Raison 2

Vous avez un comparateur de sources un peu plus simple, qui permet par exemple de comparer 3 Sources …

Raison 3

Sur la gestion de vos spools le plugin permet d’avoir beaucoup plus d’options
C’est également vrai sur la gestion des messages …

Raison 4

Vous avez un outil qui permet de chercher des informations dans des sources avec une grande facilité d’utilisation

Raison 5

Editer simplement le contenu d’un fichier message .

En conclusions :

Voici les principales options qu’on utilise chez GAIA

Il en existe d’autres, par exemple des options ILE sur les objets …

Plus toutes celles qu’on n’a pas trouvé encore !

Gérer le pool de connexion avec iamobile

Si vous utilisez iamobile,

iamobile est une application Web sur votre IBM i qui permet d’administrer certaines fonctions  de votre IBM i à partir de votre smartphone ou de votre tablette .

Vous pouvez sans doute eu ce message.
« Le nombre maximal de connexions pour le pool a été atteint »

En effet iamobile est une application Java qui utilise un pool de connexion, un pool de connexion, c’est le système qui prépare des connexions qui seront utilisables et réutilisables par l’application pour optimiser les temps d’accès.

Vous devrez cliquer sur l’onglet ‘Autres’ puis choisir ‘Etat du pool de connexion

La valeur par défaut est à 4, vous pouvez par exemple passer à 10 ce qui vous permet de travailler tranquillement

, Comment utiliser plusieurs configurations JDBC avec ACS

Sous ACS dans Exécution de scripts SQL

Vous pouvez être amené à vous connecter à plusieurs partitions IBM i ou avoir plusieurs environnements différents sur une même partition.

ACS permet de gérer plusieurs configurations JDBC en même temps et de pouvoir passer de l’une à l’autre

Pour ce faire, vous devez sélectionner l’onglet connexion puis configuration JDBC

Vous pouvez définir vos configurations, liste de bibliothèques, convention de nommage etc… et une configuration par défaut ..

Pour choisir votre environnement JDBC à la connexion, cliquer sur connexion et Application configuration JDBC vous retrouvez toutes les configurations définies.

C’est bien pratique  pour faire des tests de pouvoir choir son environnement !

Un petit regret quand on est connecté, on ne sait pas quelle configuration JDBC on utilise l’information dans le titre serait bien venue petite RFE à Faire…

, Transférer un objet d’une partition à une autre

Rappel :

Pour transférer un objet (PGM, FICHIER, etc…), vous devez être dans la même version ou sauvegarder en version précédente (limité à 2 niveaux) par exemple en 7.4 vous ne pouvez plus envoyer vers une version 7.1.
Attention, il ne faut pas avoir utilisé des fonctions qui n’existaient pas dans la version cible.
Sur objet sauvegardé si vous ne précisez rien, seul le droit du propriétaire et le droit du public seront transférés, et si le propriétaire n’existe pas sur la cible, votre objet appartiendra à QDFTOWN

Vous avez principalement trop méthodes

La méthode historique c’est object connect.

Cette solution ne fonctionne que en SNA, avec toutes les restrictions que ce la impose.
elle se matérialise par la présence des commandes SAVRST*
cette méthode est très simple mais il ne survivra pas à l’abandon progressif de SNA.

La méthode la plus utilisée aujourd’hui c’est par FTP

 

C’est un protocole applicatif qui lui fonctionne sur TCP/IP.
Cette solution si vous n’avez pas d’outil, nécessite plusieurs manipulations.
vous devez d’abord sauvegarder votre objet dans un fichier de sauvegarde.
Ensuite par FTP vous pourrez faire un put ou un get mais attention vous devrez d’abord passer en BINAIRE.
une fois sur la machine cible vous devrez restaurer votre objet à partir du savf.
récapitulatif des opérations

sur machine source

ibmi–>crtsavf
ibmi–>savobj > SAVF
FTP–>Bin
FTP–>GET ou PUT

sur machine cible

ibmi–>rstobj < SAVF

remarque:

Vous pouvez utiliser simplement une connxion de type ftps
C’est la seule solution qui vous permet de mettre votre objet sous votre pc et d’envoyer le savf par mail.
Mais un usage intensif nécessite des commandes ou des outils d’habillage.

La troisième méthode c’est la moins connu, mais elle très simple d’utilisation c’est par ACS.

il vous faudra avoir ACS sur votre PC.
vous devez choisir dans Général

<Système de fichiers intégré>

sélectionner la bibliothèque qui contient votre objet.

sur l’onglet <Actions> vous avez <envoi>


Vous devrez entrer l’utilisateur distant et le mot de passe


C’est vraiment très simple et en mode graphique sans commande , vous pouvez éventuellement utiliser java pour automatiser cette opération.

Conclusion

Voila les 3 principales méthodes qui existent pour faire vos transferts, on espère que ça vous aura éclairé pour votre choix d’envois et réceptions.

Mise à jour de la bibliothèque QSYS pendant un upgrade

Rappel

La bibliothèque QSYS contient les éléments de votre système, vous ne devez en aucun cas lui ajouter des objets délibérément.
Un certain nombres d’objet ne peuvent être que dans cette bibliothèque comme, les profils, les lignes, les contrôleurs, les unités et descriptions de bibliothèque par exemple.

il est possible que vous ayez customiser certains objets voici quelques conseils.

voila ce que c’est faire le système quand vous allez changer de version par exemple pour monter en V7R4.

Si vous avez modifié une des descriptions fournies par IBM ,  le système conservera ces modifications.

Seul les Descriptions de travail et les sous systèmes ci dessous sont concernés

Descriptions de travail concernées

QCTL (Description de travail de sous-système de contrôle)
QCTLIJBD (Description de travail ICG de sous-système de contrôle)
QESAUTON (Notification automatique d’incident)
QFSIOPWK (Processeur E-S de serveur de fichiers)
QMSF (Utilisée par le travail QPGMF)
QPDAUTOPAR (Utilisée pour l’analyse automatique d’incidents)
QQQTEMPS (description de travail DB2 for i utilisée par QSYSWRK)
QSPLERROR (Erreur de spoulage)
QSPL (Sous-système de spoulage)
QSTRUPJD (Démarrage automatique)
QSYSWRK (Sous-système système)
QSYSWRK (Description de travail de sous-système de système)

QTMSNMP (Description de travail SNMP)
QZMFEJBD (Poste de travail de démarrage automatique QSYSWRK)

Les sous-système concernés

QBASE (Contrôle de base)
QBATCH (Lot)
QCMN (Communications)
QCTL (Sous-système de contrôle)
QINTER (Interactive)
QPGMR (Programmeur)
QSNADS (Distribution SNA)
QSPL (Sous-système de spoulage)
QSYSWRK (Description de travail de sous-système de système)
QUSRWRK (Sous-système utilisateur)

Comment en utilisant des bibliothèques intermédiaires ?
En copiant dans la bibliothèque QINSYS les objets et si il y a des différences, les objets de QSYS seront mis à jour.
La bibliothèque QINPRIOR contient les objets du niveau d’os précédent

Vous pouvez voir le détail ici :
https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_73/rzahc/rzahcibmojects.htm

Vous pouvez également imprimer les informations de votre système par la commande PRTSYSINF vous obtiendrez environ 50 spools qui contiendrons des informations, comme les ressources utilisées, les tables de réponse, Les PTF etc…
Sauvegardez l’OUTQ dans lequel sont placés ces états.

Remarque :

La jobd QDFTJOBD qui est votre jobd par défaut n’est pas dans QSYS mais dans QGPL.

C’est peu être l’occasion de modifier votre programme de démarrage, il est indiqué dans la valeur système QSTRUPPGM.
Souvent ce programme n’est pas mis à jour et fait des choses obsolètes

Vous pouvez par exemple
Extraire le source du programme QSTRUP de QSYS et l’enrichir et le recompiler dans une bibliothèques à vous en indiquant le nouveau nom dans la valeur système.

Vous devez également lire les informations sur le site Planning upgrade à l’adresse

https://www.ibm.com/support/pages/planning-upgrade-ibm-i-74-software

parceque par exemple au passage en 7.4 vous constaterez que
Les 2 PRTFS QSYSPRT et QSAVOBJ sont limités à 100000 enregistrements et que vous devrez les retailler

==>CHGPRTF FILE(QSYSPRT) MAXRCDS(*NOMAX) et
==>CHGPRTF FILE(QSAVOBJ) MAXRCDS(*NOMAX)

 

En résumé

Ne pas travailler dans QSYS
Le système vous met à jour les SBSD et les JOBDS
Mais vous devez lire les informations pour éviter les petites surprises