Last Updated on 14 Dicembre 2019 by Roberto De Pedrini
I suggerimenti di Markone n. 5
Index
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:
- FIRMWARE_CURRENCY view: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqviewfirmwarecurrency.htm
- GROUP_PTF_CURRENCY view: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqviewgrpptfcurr.htm
- GROUP_PTF_DETAILS view: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqviewgrpptfdetails.htm
- GROUP_PTF_INFO view: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqviewgrpptfinfo.htm
- PTF_INFO view: https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqviewptfinfo.htm
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/