Quand un travail démarre, il crée dans la log système un message CPF1124 et un message CPF1164 quand il se termine.
C’est comme ca qu’on sait qu’un job à tourné
Mais attention, Il existe des travaux pour lesquels les messages CPF1124 et CPF1164 ne sont pas logués dans QHST : il s’agit des SPAWN jobs.
Les travaux QP0ZSPWP & QP0ZSPWT en sont de bons exemples.
Spawn batch jobs : https://www.ibm.com/docs/en/i/7.4?topic=jobs-spawn-batch
Spawn est une fonction qui crée un nouveau processus de travail (processus enfant) qui hérite de nombreux attributs du processus appelant (processus parent). Un nouveau programme est spécifié et commence à s’exécuter dans le processus enfant. Lorsque vous lancez un travail par lots, vous utilisez un travail parent pour transmettre des arguments et des variables d’environnement au travail enfant. L’API spawn() utilise des travaux batch immédiats, des travaux pré-démarrés ou des travaux batch pré-démarrés.
Nombre de spools d’un job est fixé globalement par la valeur système QMAXSPLF. Elle est par défaut à 9999 et le maximum 999999 sont changement ne nécessite pas d’IPL.
Il est possible que pour un job cette valeur soit insuffisante pour un asynchrone par exemple qui est chargé de faire de l’impression.
Vous recevrez le message CPF4167
Vous pouvez augmenter cette limite en utilisant une variable d’environnement QIBM_SP_MAXSPLF
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-04-14 06:42:392023-04-14 14:19:45Nombre maximum de spools par JOB
WITH dbmon1 (QQRID, total1) AS (
SELECT QQRID,
COUNT(*)
FROM votrebib.QZGxxxxxx << monitor 1
GROUP BY QQRID
),
dbmon2 (QQRID, total2) AS (
SELECT QQRID,
COUNT(*)
FROM votrebib.QZGyyyyyyy << monitor 2
GROUP BY QQRID
)
SELECT dbmon1.QQRID,
dbmon1.total1,
dbmon2.total2
FROM dbmon1
JOIN dbmon2
ON dbmon1.QQRID = dbmon2.QQRID
En temps d’exécution
WITH dbmon1 (QQRID, total1) AS (
SELECT QQRID,
sum(QQETIM - QQsTIM )
FROM votrebib.QZGxxxxxxx << monitor 1
GROUP BY QQRID
),
dbmon2 (QQRID, total2) AS (
SELECT QQRID,
sum(QQETIM - QQsTIM )
FROM votrebib.QZGyyyyyyyy << monitor 2
GROUP BY QQRID
)
SELECT dbmon1.QQRID,
dbmon1.total1,
dbmon2.total2
FROM dbmon1
JOIN dbmon2
ON dbmon1.QQRID = dbmon2.QQRID
Après il vous faudra enquêter sur les différences que vous avez constaté
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-04-13 07:08:342023-04-13 07:08:36Comparer 2 monitors de base de données
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-04-11 16:43:202023-04-11 22:09:25TR2 pour la V7R5
Si vous n’administré pas au quotidien votre base de données, mais que vous devez intervenir ponctuellement, Vous avez un lien qui référence les principales opérations à faire et qui peut vous aider
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-04-10 09:05:432023-04-10 09:05:44Database Information Finder
Elle se base également sur la fonction table COMPARE_FILE
Sélectionner le premier fichier à comparer
sélectionner le deuxième fichier à comparer
Choisissez l’option uniquement les datas
Vous pouvez exporter votre résultat au format csv par exemple
Troisième solution
Un petit script maison
select ‘a except b’ , a.* from fady/clients a except select ‘a except b’ , b.* from fady/clientssv b union all select ‘c except d’ , c.* from fady/clientssv c except select ‘c except d’ , d.* from fady/clients d
Conclusion :
A vous de choisir la solution qui vous convient
Attention cependant au COMPARE_FILE qui se base sur le RRN et un enregistrement recrée à l’identique avec un rrn différent sera considéré comme nouveau !
Merci a ceux qui m’ont aidé pour cette publication
Il existe un comcept dans SQL sur les tables qui s’appelle les zones cachées. Je vais essayer de vous expliquer ce que c’est.
Exemple :
CREATE TABLE SALAR ( NUMERO CHAR(6) CCSID 1147 NOT NULL DEFAULT » , NOM CHAR(20) CCSID 1147 NOT NULL DEFAULT » , PRENOM CHAR(30) CCSID 1147 NOT NULL DEFAULT » , SALAIRE DECIMAL(5, 0) NOT NULL DEFAULT 0 IMPLICITLY HIDDEN )
Pour faire simple ces des zones qui n’apparaîtront pas si vous faites un select *
Il y plusieurs buts à cette démarche , caché sommairement des informations ou simplifier des requêtes en cachant des informations utiles et enfin les zones complétables automatiquement les bien connues date, heure et utilisateur de modification. Maintenant que vous savez ce que c’est je vais vous expliquer l’impact sur vos développements existants. D’abord bien sûr si vous avez des select * dans vos développements ça produira une erreur si vous respectez les règles de développement vous ne devriez pas en avoir. Ensuite sur les insert , par défaut il ne connait que les zones non cachées vous devrez indiquer explicitement les zones cachées que vous voulez alimenter.
Conclusion Ça peut être intéressant dans certains cas pour éviter une vue qui aurait juste pour fonction de limiter les zones. Attention toutefois, si voulez utiliser cette possibilité toutes les zones sont visibles dans les invites Sql …
Et enfin une zone ajoutée même en hidden change le niveau de format puisqu’il est calculé sur l’ensemble des zones.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-03-15 10:00:392023-03-21 07:01:33Les zones HIDDEN en SQL
L’utilisateur doit avoir un répertoire initial dans l’IFS. (C’est lui qui sera indiqué par le ~ dans les commandes ci-dessous) Produits Open Sources : OpenSSL SFTP
S’assurer que le service SSH est démarré :
Démarrage du service SSH
S’assurer que le service SSH est démarré :
WRKTCPSTS OPTION(*CNN)
S’il n’est pas démarré, via 5250 :
STRTCPSVR SERVER(*SSHD)
Génération des clefs SSH
En 5250 (QSH ou QP2TERM) :
CALL PGM(QP2TERM)
S’il n’exsite pas, on crée le répertoire .ssh, via la commande mkdir, dans le répertoire par défaut de l’utilisateur, on lui attribue les droits de lecture, écriture et execution via la commande chmod, puis on execute la commande ssh-keygen :
Generating public/private rsa key pair.
Your identification has been saved in /home/exploit/.ssh/sftp_key.
Your public key has been saved in /home/exploit/.ssh/sftp_key.pub.
The key fingerprint is:
SHA256:pDxRGtx4YBKbsHTVLpDg8OXyF5VcSBKgfpX4eGXqaGY
The key's randomart image is:
+---[RSA 2048]----+
|. +.**BO++. |
| = Bo*oBB |
| * =.*o+ |
| . o =.O. |
| . + O.S |
| . = . |
| E . |
| + |
| |
+----[SHA256]-----+
Informations supplémentaires :
Options
-t Type de clef créée.
-b Nombres de bits dans la clef créée.
-f Fichier de sortie.
-N Phrase de chiffrement.
Mise en place de la configuration des clefs
Côté client
ATTENTION aux droits des fichiers contenus dans le dossier /.ssh qui ne doit contenir, en principe, que les clefs privées et le fichier config (qui est optionnel).
Côté serveur
S’il n’exsite pas, on crée le répertoire .ssh sur le serveur, via la commande mkdir, dans le répertoire par défaut de l’utilisateur, on lui attribue les droits de lecture, écriture et execution via la commande chmod :
mkdir ~/.ssh
chmod 700 ~/.ssh
Déposer la clef publique sur le serveur distant puis, ajouter la clef publique au fichier authorized_keys :
cat [sshKey.pub] >> authorized_keys
Puis vérifier le propriétaire et les droits du fichier authorized_keys:
Les tables de conversion sont des objets de type *TBL
Vous en trouvez un grand nombre dans QSYS ou QUSRSYS les 2 plus connues sont
QEBCDIC *TBL QSYS ASCII TO EBCDIC TRANSLATE TO ASCII QASCII *TBL QSYS EBCDIC TO ASCII TRANSLATE TO EBCDIC
elles servent à convertir une donnée, elle sont utilisées dans certaines commandes FTP ou QUERY Etc …
Vous pouvez également les utiliser vous dans vos développements (bien qu’aujourd’hui SQL semble une meilleur alternative)
Imaginons que vous voulez crypter quelque chose par exemple dans une field proc et que pour vous l’utilisation des API Qc3EncryptData et Qc3DecryptData soit un peu compliqué.
Vous pouvez utiliser cette solution c’est pas le top mais la multiplication des moyens de cryptage ralenti les hackers …
Vous devrez donc créer votre table de conversion dans un fichier source le plus souvent QTBLSRC
Vous devez alors compiler votre table par la commande CRTTBL …
j’ai choisi pour mon exercice de faire une table alternative, la première fois elle crypte la deuxième elle decrypte
il existe une API système qui s’appelle QCDXLATE qui a un format très simple