Credo che a tutti noi che operiamo in ambito IBM i sia successo, e continui a succedere, di avere una moltitudine di files obsoleti nel IFS e perdere del tempo per individuarli e cancellarli.
Una delle nuove features aggiunte da IBM con la PTF 7.4 TR1 e 7.3 TR7 permette di ottenere una lista del contenuto di una cartella del IFS semplicemente via SQL.
Ho scoperto questa cosa cercando una soluzione per pulire una cartella IFS con oltre 290.000 files e, cercando tra i vari BLOG ho trovato questo articolo di Simon Hutchinson https://www.rpgpgm.com/2019/11/using-sql-to-list-directories-and-files.html oltre a quello del nostro Blogger Massimo Duca (“Esploriamo l’IFS con i servizi DB2“) proprio in questo blog ed ho deciso di provare a creare un programma per gestire al meglio la cosa.
Dopo aver risolto alcuni piccoli problemi di logica sono riuscito a provarlo ed ho ottenuto un ottimo risultato riducendo il contenuto della cartella da oltre 290.000 files a poco più di 4.000 e, schedulando il programma, so che nella cartella i files resteranno per 5 giorni e dopo verranno cancellati.
Visto il risultato ho deciso di condividere questo programma nel BLOG e ve lo allego.
Ovviamente, e non poteva essere diversamente, il programma è scritto in TOTAL FREE cosa che spero sia utilizzata da un numero sempre maggiore di utenti
**free ctl-opt datfmt(*eur) datedit(*dmy) debug(*yes) copyright('FAQ400.COM') decedit('0,'); //-------------------------------------------------------------------------------------------------* // Definizione campi di comodo * //-------------------------------------------------------------------------------------------------* dcl-s data date; dcl-s comando char(500); dcl-s nome_json char(500); dcl-s messagetext char(1024); //-------------------------------------------------------------------------------------------------* // Main program * //-------------------------------------------------------------------------------------------------* // Impostazione data limite per ricerca JSON data = %date() - %days(5); // Impostazione del campo data ad oggi -5 giorni // Preparazione SQL per lettura contenuto IFS exec sql // Dichiarazione del cursore per la lettura del IFS declare jsn cursor for select CAST(PATH_NAME AS CHAR(500)) // Il campo PATH_NAME è un blob di 16M quindi lo leggo from table(QSYS2.IFS_OBJECT_STATISTICS('/myfolder/json', 'YES')) // utilizzando la funzione CAST per evitare errori SQL where create_timestamp <= :data and // L'opzione *YES permette la lettura delle sottocartelle object_type = '*STMF'; // Questa condizione mi fa leggere solo i files *STMF exec sql open jsn; dow 1 = 1; exec sql fetch jsn into :nome_json; if sqlcod <> 0; if sqlcod <> 100; // Questa funzione risulta utilissima qualora si riceva exec sql // un sqlcode <> da 100 per ottenere nel campo messagetext Get Diagnostics Condition 1 // un indicazione più dettagliata dell'errore ricevuto :messageText = MESSAGE_TEXT; endif; leave; endIf; comando = 'RMVLNK OBJLNK(''' + %trim(nome_json) + ''')'; // Compongo il comando per rimuovere l'oggetto interessato exec sql call qsys2.qcmdexc(:comando); // Eseguo, via SQL il comando preparato precedentemente // Se avete una verzione 7.1 non aggiornata potrebbe essere endDo; // necessario inserire la lunghezza del comando da eseguire exec sql close jsn; exsr esci; //-------------------------------------------------------------------------------------------------* // Routine di fine lavoro * //-------------------------------------------------------------------------------------------------* begsr esci; *inlr = *on; return; endsr;
Spero che l’esempio riportato possa risultarvi utile.
Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…
A distanza di due anni e mezzo dal mio post Trasferire oggetti con ObjectConnect ed Enterprise Extender, sono finalmente riuscito…
Con un piccolo trucco anche una semplice istruzione SELECT può eseguire qualsiasi comando di sistema ! Vediamo come...
Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer
Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer
Una mini-guida a puntate per la configurazione, gestione, uso e risoluzione dei problemi di IBM i NetServer