IBM continue sur la lancée de la version 7.1 en matière de livraison des nouveautés au fil de l'eau.
Cette dernière a vu des améliorations livrées sous forme de TR, tous les six mois.
La TR1 de la 7.2 coïncide avec la TR9 de la 7.1
192 | C0 | BINARY(4) | Offset to client accounting string -> registre CLIENT_ACCSTR |
196 | C4 | BINARY(4) | Length of client accounting string |
200 | C8 | BINARY(4) | Offset to client application name -> registre CLIENT_APPLNAME |
204 | CC | BINARY(4) | Length to client application name |
208 | D0 | BINARY(4) | Offset to client program identifier -> registre CLIENT_PROGRAMMID |
212 | D4 | BINARY(4) | Length to client program identifier |
216 | D8 | BINARY(4) | Offset to client user identifier -> registre CLIENT_USERID |
220 | DC | BINARY(4) | Length of client user identifier |
224 | E0 | BINARY(4) | Offset to client workstation name -> registre CLIENT_WORKSTNNAME |
228 | E4 | BINARY(4) | Length of client workstation name |
264 | 108 | CHAR(1) | Client IP address for Server job type (1 : IPV4, 2 IPV6) |
265 | 109 | CHAR(45) | Client IP address for Server job (adresse IP) |
388 | 184 | BINARY(4) | Client port number (port IP) |
392 | 188 | BINARY(4) | Offset to client host name |
396 | 18C | BINARY(4) | Length of client host name |
Il s'agissait de définir des seuils d'alerte par fonction système pouvant présenter un risque de surcharge
A ces fonctions pouvant présenter une limite, on va associer :
les fonctions en version 7.1
- nbr maxi de fichier IFS attachés à un répertoire
- nbr maxi de répertoires attachés à un répertoire
- nbr maxi d'objets IFS attachés à l'ASP *SYSBAS
- nbr maxi d'objets IFS attachés à un ASP utilisateur
- nbr maxi de documents attachés à un folder (QDLS)
- nbr maxi de documents attachés à l'ASP *SYSBAS
- nbr maxi de documents attachés à un ASP utilisateur
- taille maxi d'un fichier de l'IFS
- taille maxi d'un document (QDLS)
Chaque seuil est identifié par un ID (LIMIT_ID) , tous les nouveaux sont dans la plage 18402 / 18410
il suffit de faire référence à SIZING_ID dans SQL_SIZING pour avoir un libellé
la vue SYSLIMITS fait la jointure pour vous.
ce n'est plus le cas , exemple avec la fonction suivante (extrait)
Lançons le DEBUG
![]()
![]()
![]()
Mettons un point d'arrêt
Les variables sont visibles même sans LABEL (en fait un label SQLP_L2 a été ajouté)
![]()
ici, le curseur est immobile sur code
un simple F11 passe à l'instruction SQL suivante
Pour profiter de ces nouveautés en mode graphique, il faut installer la SI53809, coté client
Ces nouveaux modes de fonctionnement sont aussi vrai sous STRDBG (mode caractère) en 7.1 et 7.2
et vous pouvez demander à voir une variable, tout label confondu, par EVAL %%CODE
Visual Explain permet de descendre au niveau détail dans le cas d'une fonction utilisateur
![]()
![]()
Les paramètres sont reconnus grâce à PGMINFO(*PCML : *MODULE) , indiquez le sens d'utilisation
SI55531 (7.2) et SI55340 (7.1) apportent l'option *DCLCASE permettant de demander le respect de la casse quant aux noms dans le PCML
Ensuite précisez
- la méthode (GET | POST)
- la manière de renseigner les paramètres en entrée
![]()
- *QUERY_PARAM
les paramètres sont transmis dans l'URL sous la forme ?param1=valeur1¶m2=valeur2
- *PATH_PARAM
les paramètres sont transmis dans l'URL sous la forme /chemin/valeur, l'URL vue plus haut /chemin{param1} définie le nom du paramètre
- *FORM_PARAM
les paramètres sont transmis dans un formulaire contenant une zone de formulaire nommé param1 <input name="param1" type="text">
- *COOKIE_PARAM
les paramètres sont transmis sous forme de cookies (param1=valeur1)
- *HEADER_PARAM
les paramètres sont transmis dans l'entête HTTP sous la forme param1=valeur1
- *MATRIX_PARAM
les paramètres sont transmis dans l'URL sous la forme ;param1=valeur1;param2=valeur2
- dans tous les cas, Indiquez à quel paramètre RPG correspond param1 (ici noprod)
Indiquez le profil
la liste de bibliothèques
![]()
les informations d'entête HTTP à transporter, puis vous arrivez sur l'écran final
![]()
Quelques tests
*PATH_PARAM (celui déployé ci-dessus)
![]()
*QUERY_PARAM
nouveau service
![]()
paramètre en entrée
Format de sortie JSON
la colonne (zone) existe avec des attributs différents | ALTER COLUMN |
la colonne n'existe que dans la nouvelle version | ADD COLUMN |
la colonne n'existe que dans l'ancienne version | DROP COLUMN RESTRICT |
La contrainte existe avec des caractéristiques différente | DROP constraint RESTRICT puis ADD constraint |
la contrainte n'existe que dans la nouvelle version | ADD constraint |
la contrainte n'existe que dans l'ancienne version | DROP constraint RESTRICT |
la définition MQT existe avec des caractéristiques différente | ALTER MATERIALIZED QUERY |
la définition MQT n'existe que dans la nouvelle version | ADD MATERIALIZED QUERY |
la définition MQT n'existe que dans l'ancienne version | DROP MATERIALIZED QUERY |
NOT LOGGED INITIALLY n'existe que dans la nouvelle version | NOT LOGGED INITIALLY |
NOT LOGGED INITIALLY n'existe que dans l'ancienne version | Logged initially |
VOLATILE n'existe que dans la nouvelle version | VOLATILE |
VOLATILE n'existe que dans l'ancienne version | NOT VOLATILE |
media-preference exists only in new table definition | ALTER media-preference |
media-preference exists only in existing table definition | UNIT ANY |
memory-preference exists only in new table definition | ALTER memory-preference |
memory-preference exists only in existing table definition | KEEP IN MEMORY NO |
- SQL est devenu le langage de choix pour IBM afin d'accéder aux informations Système (SQL as a service)
•SF99702 level 5 arrive en même temps que la TR2
•SF99701 level 34 arrive en même temps que la TR10
DB2 for i Service |
Type | IBM i 7.2 |
IBM i 7.1 |
IBM i 6.1 |
PTF Services | ||||
QSYS2.PTF_INFO | Vue | Base | SF99701 Level 23 | SF99601 Level 29 |
QSYS2.GROUP_PTF_INFO | Vue | Base | SF99701 Level 6 | SF99601 Level 19 |
SYSTOOLS.GROUP_PTF_CURRENCY | Vue | SF99702 Level 3 | SF99701 Level 32 | - |
Security Services | ||||
QSYS2.USER_INFO | Vue | Base | livré: SF99701 Level 26 |
livré: SF99601 Level 31 |
QSYS2.FUNCTION_INFO | Vue | Base | SF99701 Level 26 | SF99601 Level 31 |
QSYS2.FUNCTION_USAGE | Vue | Base | SF99701 Level 26 | SF99601 Level 31 |
QSYS2.GROUP_PROFILE_ENTRIES | Vue | Base | SF99701 Level 23 | SF99601 Level 29 |
QSYS2.SQL_CHECK_AUTHORITY() | UDF | Base | SF99701 Level 21 | SF99601 Level 29 |
QSYS2.SET_COLUMN_ATTRIBUTE() | Procédure | Base | Base | SF99601 Level 8 |
QSYS2.DRDA_AUTHENTICATION_ENTRY_INFO | Vue | SF99702 Level 5 | SF99701 Level 34 | - |
Message Handling Services | ||||
QSYS2.REPLY_LIST_INFO | Vue | SF99702 Level 3 | SF99701 Level 32 | SF99601 Level 33 |
QSYS2.JOBLOG_INFO | UDTF | SF99702 Level 3 | SF99701 Level 32 | SF99601 Level 33 |
Librarian Services | ||||
QSYS2.LIBRARY_LIST_INFO | Vue | SF99702 Level 3 | SF99701 Level 32 | SF99601 Level 33 |
QSYS2.OBJECT_STATISTICS() | UDTF | livré: Base Modifié: SF99702 Level 5 |
livré: SF99701 Level 3 Modifié: SF99701 Level 34 |
SF99601 Level 16 |
Work Management Services | ||||
QSYS2.SYSTEM_VALUE_INFO | Vue | Base | SF99701 Level 26 | SF99601 Level 31 |
QSYS2.GET_JOB_INFO() | UDTF | livré: Base Modifié: SF99702 Level 5 |
livré: SF99701 Level 23 Modifié: SF99701 Level 29 Modifié: SF99701 Level 34 |
livré: SF99601 Level 29 Modifié: SF99601 Level 32 |
QSYS2.ACTIVE_JOB_INFO() | UDTF | SF99702 Level 5 | SF99701 Level 34 | - |
QSYS2.SCHEDULED_JOB_INFO | Vue | SF99702 Level 5 | SF99701 Level 34 | - |
TCP/IP Services | ||||
SYSIBMADM.ENV_SYS_INFO | Vue | Base | SF99701 Level 23 | SF99601 Level 29 |
QSYS2.TCPIP_INFO | Vue | Base | SF99701 Level 6 | SF99601 Level 19 |
QSYS2.SET_SERVER_SBS_ROUTING() | Procédure | SF99702 Level 5 | SF99701 Level 34 | - |
QSYS2.SERVER_SBS_ROUTING(voir ci-dessous) | Vue | SF99702 Level 5 | SF99701 Level 34 | - |
Storage Services | ||||
QSYS2.USER_STORAGE | Vue | Base | SF99701 Level 26 | SF99601 Level 31 |
QSYS2.SYSTMPSTG | Vue | Base | - | - |
QSYS2.SYSDISKSTAT | Vue | Base | SF99701 Level 12 | SF99601 Level 21 |
System Health Services | ||||
QSYS2.SYSLIMTBL | Table | livré: Base Modifié: SF99702 Level 3 Modifié: SF99702 Level 5 |
livré: SF99701 Level 23 Modifié: SF99701 Level 26 Modifié: SF99701 Level 34 |
livré: SF99601 Level 29 Modifié: SF99601 Level 31 |
QSYS2.SYSLIMITS | Vue | livré: Base Modifié: SF99702 Level 3 Modifié: SF99702 Level 5 |
livré: SF99701 Level 23 Modifié: SF99701 Level 26 Modifié: SF99701 Level 34 |
livré: SF99601 Level 29 Modifié: SF99601 Level 31 |
Journal Services | ||||
QSYS2.JOURNAL_INFO | Vue | SF99702 Level 3 | SF99701 Level 32 | SF99601 Level 33 |
QSYS2.DISPLAY_JOURNAL() | UDTF | Base | livré: Base |
livré: SF99601 Level 15 |
Java Services | ||||
QSYS2.SET_JVM() | Procédure | SF99702 Level 5 | SF99701 Level 34 | - |
QSYS2.JVM_INFO | Vue | SF99702 Level 5 | SF99701 Level 34 | - |
Application Services | ||||
QSYS2.QCMDEXC() | Procédure | Base | livré: Base Modifié: SF99701 Level 26 |
livré: SF99601 Level 15 Modifié: SF99601 Level 3 |
Source : KnowledgeCenter
TR2 : DRDA_AUTHENTICATION_ENTRY_INFO
ACTIVE_JOB_INFO
SCHEDULED_JOB_INFO
![]()
Pour les connexion ODBC/JDBC Nous pouvions déjà "router" un job dans un sous-système, mais par adresse Ip d'origine
•Allouez de la mémoire à un Pool partageable : CHGSHRPOOL *SHRPOOLn SIZE(xxx)
•créez un sous système utilisant ce pool ou *BASE:
CRTSBSD MONSBS POOLS((1 *SHRPOOLn)) TEXT('Sous système dédié')
puis
ADDRTGE MONSBS SEQNBR(10) CMPVAL(*ANY) PGM(QCMD) CLS(QBATCH)
- Pour ODBC/JDBC (dont Iseries navigator), suivez la procédure suivante :
- Ajoutez un travail à démarrage anticipé à votre sous système, par :
ADDPJE SBSD(MONSBS) PGM(QSYS/QZDASOINIT) INLJOBS(?) JOBD(Qgpl/QDFTSVR) CLS(QSYS/QPWFSERVER)A ce niveau de PTF (TR2) et SF99701 level 34 (7.1) ou SF99702 level 5 (7.2), vous pouvez aussi opérer par utilisateur
Il vous faut toujours un sous système configuré proprement et actif (comme vu ci-dessus)
Appelez ensuite la procédure stockée SET_SERVER_SBS_ROUTING
- Indiquez le profil
- le Job serveur
- QRWTSRVR (DRDA/DDM)
- QZDASOINIT (ODBC/JDBC))
- le sous système actif
- Select * from SERVER_SBS_ROUTING permet de voir les utilisateurs re-routés
- De fait, suite à une connexion avec le gestionnaire de scripts de System i Navigator
- S'il n'y a pas de sous système actif, l'utilisateur ira "normalement" dans QUSRWRK
![]()
- Pour enlever cette configuration, appelez la même procédure en passant la valeur nulle
Performances
Un même index peut désormais être utilisé pour réalisé la sélection ET le tri
cette technique est nommée IMO (index Merge Ordering)
• la requête doit être prévue *FIRSTIO
• ALWCPYDTA ne doit pas être à *NO
• le curseur ne doit pas être flottant (SCROLL CURSOR)
• le nombre de ligne résultat doit être élevé
• la table doit être de grande taille (plus de 500 Millions de lignes)
• l'index doit exister (pas de création temporaire, pas MTI)
L'index doit contenir
1/ les critères de sélection autre que par égalité (<> par ex.)
2/ puis les critères de sélection par égalité (=)
3/ enfin les critères de tri.
Une liste triée sera faite en mémoire à partir de l'index.Deux nouvelles fonctions (gestion des UUID)
- VARBINARY_FORMAT
- VARCHAR_FORMAT_BINARY
Nous avions déjà HEX qui transforme une chaîne en héxa décimal
HEX(chaîne) retourne la valeur héxa d'une chaîne
HEX('bonjour') -> 8296959196A499 X'8296959196A499' -> Bonjour
Nous avons désormais deux nouvelles fonctions
VARBINARY_FORMAT() retourne la chaîne (FOR BIT DATA) d'une séquence binaire
(ayant le format indiqué, s'il est précisé)
VALUES VARBINARY_FORMAT('8296959196A499')-> bonjour
varbinary_format('A7B37D20-915D-45C4-8D0B-B5AA0F864FCA',
'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX') --adresse mac
-> BX'A7B37D20915D45C48D0BB5AA0F864FCA (non affichable)VARCHAR_FORMAT_BINARY() retourne la valeur héxa, formatée, d'une chaîne.
VALUES VARCHAR_FORMAT_BINARY('123456789abcdef0',
'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX')
-> F1F2F3F4-F5F6-F7F8-F981-8283848586F0
Enfin en Juin 2015, SI56823 propose de rechercher automatiquement le nombre d'occurrences dans une variable nommée comme la DS suivit de _LENGTH
cela permet de gérer les DS imbriquées :
- Exemple
Les producteurs d'une appellation (nombre variable, maxi 2000 producteurs par appellation)
- contenant les vins de chaque producteur (nombre variable aussi, maxi 50 vins par producteur)
Apparaît
- Les variables _LENGTH n'apparaissent pas dans le fichier WSDL.
- Les variables _LENGTH ne sont pas répercutées en tant que données retour
![]()
ici n producteurs en retour , le premier n'ayant que 2 vins
TR3 (certaines fonctions sont communes à la TR11 de la 7.1)
La TR3 de la 7.2 coïncide avec la TR11 de la 7.1
SYSTEMA | SYSTEMB |
CALL SYSTEMB.biblio.Procedure; |
SET RESULT SETS ...[ARRAY ou CURSOR] |
CREATE VARIABLE APPEL DEC(2 , 0 ) DEFAULT 13; |
CREATE VARIABLE APPELLATION_ECRITURE FOR SYSTEM NAME APPEL |
SELECT HOST FROM HTTPLOG where USER = 'cmasse' |
Avant s'il existe une Index EVI sur USER, il est utilisé pour le WHERE et avec le n° de RANG on accède à la table (utilisation "normale" d'un EVI") |
Aujourd'hui on utilise l'index pour le WHERE et s'il existe aussi un index EVI sur HOST on rapproche les deux vecteurs afin d'aller chercher HOST uniquement dans l'EVI. |
TR4 (toutes ces fonctions sont aussi présentes en 7.3)
•AP/PM
•Day -> nom du jour (extrait du message CPX90346)
•Dd -> nom abrégé du jour (extrait du message CPX9039)
•D -> jour de la semaine (entre 1 et 7)
•DDD -> n° de jour dans l’année
•HH12 -> heure sur 12 (avec AM/PM)
•J -> Nb de jours depuis calendrier julien (1er janv. 4713 Av J.C)
•Month -> nom du mois (extrait du message CPX3Bc0)
•Mon -> nom abrégé du mois (extrait du message CPX8601)
•RRRR -> année ajustée (arrondie sur année 50)
•SSSSS -> secondes depuis minuit précédent
•Y -> dernier chiffre de l’année
•YYY -> trois derniers chiffres de l’année
•0 -> représente un chiffre, les zéros de gauche sont affichés
•9 -> représente un chiffre, les zéros de gauche ne sont pas affichés
•S -> préfixe, représente le signe (- ou +) à gauche
•$ -> un dollar est ajouté
•MI -> Suffixe, représnte le signe (- ou espace)
•PR -> les caractères < et > sont ajoutés en cas de valeur négative
•, -> la marque décimale est la virgule
•. -> la marque décimale est le point
•L -> symbole monétaire (extrait du message CPX8416)
•D -> marque décimale (extrait du message CPX8416)
•G -> séparateur des milliers (extrait du message CPX8416)
Un service qui donne la liste des services ;-)
![]()
mais qui surtout explique les utilisations possibles
•*YES
Possibilité d’ajouter un trigger (CREATE TRIGGER ou ADDPFTRG) sur une table en cours d’utilisation
•*NO
Aucun ajout de trigger n’est autorisé quand un fichier est en cours d’utilisation, vous recevez SQL0913
(qui maintenant contient les coordonnées du JOB qui lock)
CREATE OR REPLACE FUNCTION BDVIN0.LESVINS ( ) RETURNS TABLE ( NOM CHAR(25) , PRODUCTEUR CHAR(30) , CEPAGE CHAR(20) ) LANGUAGE SQL RETURN SELECT LEFT ( VIN_NOM , 25 ) , LEFT ( PR_NOM , 30 ) , LEFT ( VIN_CEPAGE1 , 20 ) FROM BDVIN0 . VINS JOIN BDVIN0 . PRODUCTEURS USING ( PR_CODE ) ; |
CREATE OR REPLACE FUNCTION BDVIN0.LESVINS ( ) |
SELECT ROUTINE_NAME, ROUTINE_SCHEMA |
En vous mettant à jour des dernières PTF HTTP et XH2, vous aurez accès aux Dashboard de la 7.3 sous web access depuis votre Mobile