04 - System Administration04g - Varie sistemistica

Sei aggiornato? Te lo dico con SQL

Last Updated on 14 Dicembre 2019 by Roberto De Pedrini

I suggerimenti di Markone n. 5

Verificare lo stato di aggiornamento di IBM i tramite SQL

Quali PTF sono installate sul mio sistema IBM i? Quale è il livello dell’ultimo cumulativo installato?
Ci sono disponibili nuovi aggiornamenti da installare?
E il firmware è aggiornato?
E’ possibile rispondere a queste domande con poche istruzioni SQL, grazie alle viste che IBM mette a disposizione tramite i DB2 for i service.

Nella categoria “PTF” esistono queste 5 viste:

-->> RIEPILOGO DB2 for i SERVICE: CATEGORIA PTF

select SERVICE_NAME "Nome servizio", SERVICE_SCHEMA_NAME "Libreria", SYSTEM_OBJECT_NAME "Nome sistema", SQL_OBJECT_TYPE "Tipo", 
  replace(substr(EXAMPLE, 1, position(x'0D', EXAMPLE) -1), '-- Description: ', '') "Descrizione breve"
  from QSYS2/SERVICES_INFO
  where SERVICE_CATEGORY = 'PTF'
  order by SERVICE_NAME;

Di cui troviamo la documentazione a questi link:

Cosa c’è installato sul mio IBM i?

Per una visione riepilogativa innanzitutto bisogna controllare i gruppi di PTF: ovvero l’equivalente del comando WRKPTFGRP

select PTF_GROUP_NAME "ID gruppo", PTF_GROUP_DESCRIPTION "Descrizione", PTF_GROUP_LEVEL "Liv.", PTF_GROUP_STATUS "Stato", PTF_GROUP_TARGET_RELEASE "Rel."
   from GROUP_PTF_INFO
   order by PTF_GROUP_NAME, PTF_GROUP_LEVEL desc;

Se desidero visualizzare per ogni gruppo solo l’ultimo livello installato, ovvero l’equivalente di WRKPTFGRP PTFGRPLVL(*INSTALLED), l’istruzione è poco più complessa, ma è già qua pronta all’uso:

with
  LASTLEVEL as
  (select PTF_GROUP_NAME, max(PTF_GROUP_LEVEL) PTF_GROUP_LEVEL
     from GROUP_PTF_INFO
     group by PTF_GROUP_NAME
  ),
  DESCPTF as
  (select distinct PTF_GROUP_NAME, PTF_GROUP_DESCRIPTION, PTF_GROUP_STATUS, PTF_GROUP_TARGET_RELEASE
     from GROUP_PTF_INFO
     where PTF_GROUP_DESCRIPTION not like '%CUMULATIVE%'
   ),
   DESCCUM as
   (select PTF_GROUP_NAME, PTF_GROUP_DESCRIPTION, PTF_GROUP_STATUS, PTF_GROUP_TARGET_RELEASE
      from GROUP_PTF_INFO
      where PTF_GROUP_DESCRIPTION like '%CUMULATIVE%'
      order by PTF_GROUP_LEVEL desc
      fetch first 1 rows only
   ),
   DESCTOT as
   (select *
      from DESCPTF
    union all
    select *
      from DESCCUM
   )
  select L.PTF_GROUP_NAME "ID gruppo", PTF_GROUP_DESCRIPTION "Descrizione", L.PTF_GROUP_LEVEL "Liv.", PTF_GROUP_STATUS "Stato", PTF_GROUP_TARGET_RELEASE "Rel."
    from LASTLEVEL as L
      inner join DESCTOT
        using(PTF_GROUP_NAME)
    order by L.PTF_GROUP_NAME;

Per visualizzare solo il livello e data dell’ultimo cumulativo. Ovvero l’equivalente del comando DSPPTF LICPGM(5770SS1) il cui output mostra nella prima riga il cui codice comincia con TC il livello del cumulativo più recente

select max(PTF_GROUP_LEVEL) as "Livello cumulativo",
        date('20' concat max(PTF_GROUP_LEVEL)) "Data"
   from GROUP_PTF_INFO
   where PTF_GROUP_DESCRIPTION like 'CUMULATIVE PTF PACKAGE%' and PTF_GROUP_STATUS = 'INSTALLED';

Oltre ai gruppi posso estrarre – sempre con SQL – il dettaglio delle singole PTF installate, ovvero l’equivalente del comando DSPPTF:

select PTF_IDENTIFIER "ID PTF", PTF_RELEASE_LEVEL "Rel.PTF", PTF_PRODUCT_ID "Prodotto", PTF_PRODUCT_OPTION "Opz.", PTF_PRODUCT_DESCRIPTION "Descr.prodotto", PTF_PRODUCT_RELEASE_LEVEL "Rel.prod.",
        PTF_LOADED_STATUS "Stato", PTF_IPL_ACTION "Azione IPL", PTF_ACTION_PENDING "Azione in sospeso", PTF_ACTION_REQUIRED "Azione richiesta", PTF_IPL_REQUIRED "Richiesto IPL", timestamp(PTF_TEMPORARY_APPLY_TIMESTAMP, 0) "Data/ora applicazione temp.",
        PTF_SUPERCEDED_BY_PTF "PTF superata da"
   from PTF_INFO
   where PTF_IDENTIFIER like 'MF%'
     --and PTF_LOADED_STATUS <> 'SUPERCEDED' -- escludi PTF superate
   order by PTF_IDENTIFIER desc;

Sono disponibili nuovi aggiornamenti?

La vista GROUP_PTF_CURRENCY è molto potente e comoda, in quanto oltre a mostrare il livello dei gruppi installati sul mio IBM i, consuma un web service che restituisce il livello disponibile in Fix central, fornendo quindi in pochi secondi un quadro completo di cosa sia necessario aggiornare:

select PTF_GROUP_ID "ID Gruppo", PTF_GROUP_TITLE "Descrizione", PTF_GROUP_CURRENCY "Stato aggiornamento", PTF_GROUP_STATUS_ON_SYSTEM "Stato installazione", PTF_GROUP_LEVEL_INSTALLED "Liv.installato", PTF_GROUP_LEVEL_AVAILABLE "Liv.disponibile", PTF_GROUP_LAST_UPDATED_BY_IBM "Data agg."
   from SYSTOOLS/GROUP_PTF_CURRENCY
   --where PTF_GROUP_CURRENCY = 'UPDATE AVAILABLE' -- solo gruppi da aggiornare
   order by PTF_GROUP_CURRENCY desc, PTF_GROUP_ID;

Esiste anche la possibilità di automatizzare il controllo dei gruppi di PTF che è necessario aggiornare tramite degli script con il prodotto Administration Runtime Expert (per gli amici “ARE”) di cui parlo più diffusamente in questo articolo https://www.markonetools.it/administration-runtime-expert-are/ e che ho presentato all’evento ONL-i Days dello scorso giugno 2019. Il tutto è molto più semplice di quanto possa sembrare.

Per andare più a fondo…

Posso estrarre anche il dettaglio delle PTF mancanti sul sistema rispetto a quelle disponibili in Fix Central e non ancora presenti in un cumulativo:

select PTF_IDENTIFIER "PTF ID", PTF_GROUP_NAME "ID Gruppo", PTF_GROUP_DESCRIPTION "Descrizione", PTF_PRODUCT_ID "Prodotto", 
     PTF_STATUS "Stato inst.", 
     APAR_NAME "APAR", PTF_INCLUDED_IN_GROUP_DATE "Disp. in un gruppo da (MM/DD/YY)", PTF_CUM_PACKAGE "Incluso in cumulativo"
   from SYSTOOLS/GROUP_PTF_DETAILS
   where PTF_STATUS = 'PTF MISSING' and PTF_CUM_PACKAGE = 'NONE'
   order by PTF_GROUP_NAME, PTF_IDENTIFIER;

Od anche estrarre il dettaglio delle PTF installate per uno specifico gruppo (p.es. il DB2):

select PTF_IDENTIFIER "PTF ID", PTF_GROUP_NAME "ID Gruppo", PTF_GROUP_DESCRIPTION "Descrizione", PTF_PRODUCT_ID "Prodotto", 
     PTF_STATUS "Stato inst.", PTF_LOADED_STATUS "Stato corrente",
     APAR_NAME "APAR", PTF_INCLUDED_IN_GROUP_DATE "Disp. in un gruppo da (MM/DD/YY)", PTF_CUM_PACKAGE "Incluso in cumulativo", 
     PTF_IPL_ACTION "Azione IPL", PTF_ACTION_PENDING "Azione in sospeso", PTF_ACTION_REQUIRED "Azione richiesta", PTF_IPL_REQUIRED "Richiesto IPL",
     PTF_SUPERCEDED_BY_PTF "Superata da", timestamp(PTF_CREATION_TIMESTAMP, 0) "Data/ora creaz. PTF"
   from SYSTOOLS/GROUP_PTF_DETAILS
   where PTF_STATUS <> 'PTF MISSING'
     and PTF_GROUP_NAME = 'SF99703' -- gruppo DB2
   order by PTF_IDENTIFIER;

Tramite la vista GROUP_PTF_DETAILS posso anche individuare le PTF che sono in attesa di una azione. Ovvero l’equivalente di DSPPTF SELECT(*ACTRQD). In una situazione “normale” questa query non dovrebbe restituire nessun record.

select PTF_IDENTIFIER "PTF ID", PTF_GROUP_NAME "ID Gruppo", PTF_GROUP_DESCRIPTION "Descrizione", PTF_PRODUCT_ID "Prodotto", 
     PTF_STATUS "Stato inst.", PTF_LOADED_STATUS "Stato corrente",
     APAR_NAME "APAR", PTF_INCLUDED_IN_GROUP_DATE "Disp. in un gruppo da (MM/DD/YY)", PTF_CUM_PACKAGE "Incluso in cumulativo", 
     PTF_IPL_ACTION "Azione IPL", PTF_ACTION_PENDING "Azione in sospeso", PTF_ACTION_REQUIRED "Azione richiesta", PTF_IPL_REQUIRED "Richiesto IPL",
     PTF_SUPERCEDED_BY_PTF "Superata da", timestamp(PTF_CREATION_TIMESTAMP, 0) "Data/ora creaz. PTF"
   from SYSTOOLS/GROUP_PTF_DETAILS
   where PTF_STATUS <> 'PTF MISSING' and (PTF_ACTION_PENDING <> 'NO' or PTF_ACTION_REQUIRED not in('NONE', 'IPL') or PTF_IPL_ACTION <> 'NONE')
   order by PTF_IDENTIFIER;

E il firmware?

Per controllare lo stato di aggiornamento del firmware (non dimentichiamoci che oltre al sistema operativo è importante mantenere aggiornato anche il livello più basso dei componenti software del nostro IBM i) viene in soccorso la vista FIRMWARE_CURRENCY (disponibile da IBM i 7.3 TR6). Ovvero l’equivalente del comando DSPFMWSTS. Per utilizzare questa vista bisogna essere autorizzati ai comandi DSPHDWRSC e DSPFMWSTS.

select *
   from SYSTOOLS/FIRMWARE_CURRENCY;

ATTENZIONE! Al momento di pubblicazione di questo articolo per un problema di modifica del formato dei dati restituiti dal web service questa vista non restituisce dati. (cfr. APAR SE72579 del 3/12/2019 https://www-01.ibm.com/support/docview.wss?uid=nas2SE72579).

Scarica lo script completo con tutte le istruzioni SQL presentate nell’articolo da qui.

Queste e molte altre istruzioni SQL prêt-à-porter sul blog MarkOneTools https://www.markonetools.it/sql-pret-a-porter/

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

About author

mentore IBM i IBM Champion 2021 for Power Systems

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *