Facciamo un breve riepilogo del funzionamento di questi due comandi:
In assenza di qualcosa di più flessibile e dinamico la maggior parte degli amministratori di sistema li hanno utilizzati nel tempo per monitorare l’occupazione dei dischi.
Fortunatamente IBM a partire dalla V7R2 ha arricchito la libreria QSYS2 con funzioni capaci di recuperare informazioni sullo stato di salute del server tra cui la OBJECT_STATISTICS.
Questa UDTF permette di risalire in breve tempo al contenuto di una libreria o ad una parte di essa semplicemente con una query SQL di selezione e quindi permette un controllo più capillare e nettamente più veloce di ciò che succede all’interno delle librerie.
Index
La sintassi per l’utilizzo di questa funzione è la seguente
OBJECT_STATISTICS(nomeLibreria, listaTipiOggetto, nomeOggetto)
In dettaglio i parametri per l’utilizzo di questa UDTF sono:
Di seguito alcuni esempi di utilizzo:
SELECT SUM(OBJSIZE) FROM TABLE (QSYS2.OBJECT_STATISTICS('PETRIS','ALL')) T
SELECT OBJNAME, OBJTEXT, OBJOWNER FROM TABLE (QSYS2.OBJECT_STATISTICS('PETRIS','FILE')) T WHERE OBJATTRIBUTE = 'PF' ORDER BY OBJOWNER
SELECT * FROM TABLE (QSYS2.OBJECT_STATISTICS('USRLIBL','ALL')) T WHERE DAYS_USED_COUNT <= 1 ORDER BY OBJSIZE DESC
Per un controllo completo di tutto ciò che è installato sul server è possibile anche creare una tabella da popolare con il contenuto di ogni singola libreria e poi ragionare anche con strumenti di Business Intelligence per creare un cruscotto di controllo del nostro IBMi.
Creiamo una tabella che conterrà tutte le informazioni
CREATE TABLE PETRIS.OBJECTS ( NAME VARCHAR(10) NOT NULL DEFAULT '' , TYPE VARCHAR(8) NOT NULL DEFAULT '' , OWNER VARCHAR(10) NOT NULL DEFAULT '' , CREATOR VARCHAR(10) NOT NULL DEFAULT '' , CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , SIZE DECIMAL(15, 0) NOT NULL DEFAULT 0 , TEXT VARCHAR(50) DEFAULT NULL , SQL_NAME VARCHAR(128) DEFAULT NULL , USED TIMESTAMP DEFAULT NULL , DAYS_USED DECIMAL(10, 0) NOT NULL DEFAULT 0 , RESET TIMESTAMP DEFAULT NULL , ASP_NUMBER DECIMAL(5, 0) NOT NULL DEFAULT 0 , ATTRIBUTE VARCHAR(10) NOT NULL DEFAULT '' , SQL_SCHEMA VARCHAR(128) NOT NULL DEFAULT '' , LIBRARY_TEXT VARCHAR(50) DEFAULT NULL , SQL_TYPE VARCHAR(9) DEFAULT NULL )
Poi creiamo un nuovo programma che:
TRUNCATE TABLE PETRIS.OBJECTS
SELECT SCHEMA_NAME FROM QSYS2.SYSSCHEMAS
e per ogni libreria letta esegua il popolamento estraendo i dati da OBJECT_STATISTICS
INSERT INTO PETRIS.OBJECTS(SELECT OBJNAME, OBJTYPE, OBJOWNER, OBJDEFINER, OBJCREATED,
OBJSIZE, OBJTEXT, OBJLONGNAME, LAST_USED_TIMESTAMP, DAYS_USED_COUNT, LAST_RESET_TIMESTAMP,
IASP_NUMBER, OBJATTRIBUTE, OBJLONGSCHEMA, TEXT, SQL_OBJECT_TYPE
FROM TABLE(QSYS2.OBJECT_STATISTICS('nomeLibreria','*ALL')))
NB: al limite si può valutare di escludere le librerie di proprietà dell’utente QSYS per evitare di estrarre quelle del sistema operativo (SELECT SCHEMA_NAME FROM QSYS2.SYSSCHEMAS WHERE SCHEMA_OWNER <> ‘QSYS’)
Una volta ottenuta la lista completa degli oggetti è semplice scovare gli oggetti che occupano più spazio, le librerie più pesanti, ecc…
SELECT SQL_SCHEMA, SUM(SIZE) FROM PETRIS.OBJECTS GROUP BY SQL_SCHEMA ORDER BY 2 DESC
Per ulteriori informazioni è disponibile la documentazione ufficiale IBM (https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzajq/rzajqudfobjectstat.htm)
L’estensione “RPG IV to Free Format Conversion” sviluppata da Bob Cozzi (Cozzi Research) è pensata per semplificare la conversione di…
Ciao a tutti, oggi voglio segnalarvi un altro interessante contributo di Massimo Duca, parte della sua ormai nota serie IBM…
Incuriosito da alcuni messaggi di Cristian Larsen su Linkedin (New Release - Display File DDS Edit v.0.10.1) ho voluto scaricare…
Ciao a tutti,oggi voglio segnalarvi un annuncio che potrebbe segnare una svolta per lo sviluppo applicativo su ambienti IBM: Project…
Voglio segnalarvi un nuovo articolo molto interessante di Massimo Duca nella serie IBM i & SQL Tips. In questo sesto…
Ciao a tutti, voglio segnalarvi un post molto utile di Marco Riva sul suo sito Markonetools, in cui spiega in…