« Un Reclaim Storage » sert à la récupération de l’espace de stockage, sur IBM i.
Cette commande examine certaines structures internes du système pour retrouver des objets ou des espaces devenus incohérents ou inaccessibles, puis rétablir leurs liens lorsque c’est possible.
Elle est fortement recommandé avant un changement de version
Elle peut placer certains objets dans QRCL
Pour faire cette opération vous devez passer la commande RCLSTG.
Cette commande nécessite le mode restreint sur votre partition
Voici une petite astuce pour la planifier en batch
il vous suffira de planifier cette commande RCLSTGB dans QCTL
Le programme clle
Le Fichier : PLB_QCLSRC_RCLSTGB.TXT
plberthoin@neptune.gaia.lan
de la part de
info@gaiapower.fr
Pierre-Louis Berthoin
Le Fichier est un source.
RCLSTG en batch
[www.gaia.fr]www.gaia.fr
PGM PARM(&SELECT &TIME)
DCL VAR(&SELECT) TYPE(*CHAR) LEN(10)
DCL VAR(&TIME) TYPE(*CHAR) LEN(03)
DCL VAR(&TIMn) TYPE(*dec) LEN(03)
DCL VAR(&SBS) TYPE(*CHAR) LEN(10)
DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
DCL VAR(&ERREUR) TYPE(*LGL) VALUE('0')
DCL VAR(&JOBINFO) TYPE(*CHAR) LEN(512)
DCL VAR(&INFOLEN) TYPE(*INT) VALUE(512)
DCL VAR(&FORMAT) TYPE(*CHAR) LEN(8) VALUE('JOBI0200')
DCL VAR(&JOBQUAL) TYPE(*CHAR) LEN(26) VALUE('*')
DCL VAR(&JOBINT) TYPE(*CHAR) LEN(16) VALUE(' ')
/* Verifier le parametre avant toute interruption. */
IF COND((&SELECT *NE '*ALL') *AND +
(&SELECT *NE '*DBXREF')) THEN(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('Parametre attendu : *ALL ou *DBXREF.') +
MSGTYPE(*ESCAPE)
ENDDO
/* Le travail doit etre batch et s'executer dans QCTL. */
RTVJOBA TYPE(&TYPE)
CALL PGM(QSYS/QUSRJOBI) PARM(&JOBINFO &INFOLEN +
&FORMAT &JOBQUAL &JOBINT)
/* Nom du sous-systeme : position 63. */
CHGVAR VAR(&SBS) VALUE(%SST(&JOBINFO 63 10))
IF COND((&TYPE *NE '0') *OR (&SBS *NE 'QCTL')) +
THEN(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('Soumettre ce programme en batch dans QCTL.') +
MSGTYPE(*ESCAPE)
ENDDO
/* mise en place de la log */
CHGJOB LOG(4 00 *SECLVL) LOGCLPGM(*YES)
chgvar &TIMN &timE
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('RCLSTG : debut de la mise en mode restreint.') +
TOMSGQ(QSYS/QSYSOPR) MSGTYPE(*INFO)
/* Arret contrôle des travaux, délai de xx minutes. */
ENDSBS SBS(*ALL) OPTION(*CNTRLD) DELAY(&TIMN) +
BCHTIMLMT(*NOMAX)
/* Delai de stabilisation utilise dans l'exemple IBM. */
DLYJOB DLY(120)
RCLSTG SELECT(&SELECT) ASPDEV(*SYSBAS)
MONMSG MSGID(CPF0000) EXEC(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('RCLSTG : Erreur sur RCLSTG, vérifier la log') +
TOMSGQ(QSYS/QSYSOPR) MSGTYPE(*INFO)
MONMSG MSGID(CPF0000)
goto suite
ENDDO
SNDPGMMSG MSGID(CPF9898) MSGF(QSYS/QCPFMSG) +
MSGDTA('RCLSTG terminé normalement.') +
TOMSGQ(QSYS/QSYSOPR) MSGTYPE(*INFO)
MONMSG MSGID(CPF0000)
/* La fin du batch restreint redemarre le controleur. */
suite:
STRSBS SBSD(QCTL)
ENDPGM
La commande
CMD PROMPT('RCLSTG en batch')
PARM KWD(OPTION) TYPE(*CHAR) LEN(10) RSTD(*YES) +
DFT(*ALL) VALUES(*ALL *DBXREF) +
PROMPT('Option à exécuter')
PARM KWD(TIME) TYPE(*CHAR) LEN(03) DFT(060) +
RANGE(060 600) PROMPT('Temps max en minutes')
Remarque :
Ce scripte suppose que votre sous système de contrôle est QCTL
C’est la seule solution pour corriger votre catalogue base de données en cas de probléme
Vérifiez bien après exécution ce qu’il y a dans la bibliothèque QRCL

