Gestione files in IFS

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.

Related Posts
IBM i – Attenzione agli “share” (IFS e Ransomware)

I virus e in generale i malware come i ransomware possono fare danni anche all'IBM i se trovano directory condivise Read more

Esploriamo l’IFS con i servizi DB2

I numerosi servizi del DB2 for i si arricchiscono di una nuova categoria, con cui si può "curiosare" nell'IFS direttamente Read more

QNTC – Accedere a informazioni su server remoti

Introduzione Il sistema operativo IBM i mette a disposizione il file system IBM i NetClient file system (QNTC) che permette Read more

Gestione del sistema IBM i: FAQ & Howto (Parte 3) IT

Questa è la terza parte della raccolta di FAQ & Howto sulla gestione del sistema IBM i : puoi vedere Read more

Recent Posts

Gestione dei file video bloccati su IBM i: una soluzione efficace

Riceviamo e pubblichiamo ben volentieri questo "tip & trick" di Patrick Rizzi che presenta una tecnica che permette di intervenire…

2 settimane ago

Monitoraggio Messaggi QSYSOPR: SQL per Ottenere Messaggi e Reply

Prendo spunto da una risposta di Michael Mayer sulle mailing list di Midrange.com a chi chiedeva come monitorare i messaggi…

2 settimane ago

Perché l’ERP è la Chiave del Successo per le Imprese Moderne

Le imprese sono sempre più alla ricerca di strumenti che possano migliorare l'efficienza, la collaborazione e la gestione delle risorse.…

2 mesi ago

ACS Access Client Solution 1.1.9.5

I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…

7 mesi ago

Tim Rowe and Scott Forstie – Promo video for CEC 2024 – Milan

Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…

7 mesi ago

Code for IBM i 2.10.0 – Debug IBM i con Visual Studio Code

Le funzioni di debug con Visual Studio Code sono disponibili da qualche tempo ma questa nuova versione 2.10.0 semplifica la…

7 mesi ago