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)
I primi di Aprile è uscita la "Spring Version" di ACS Access Client Solution, versione 1.1.9.5 Interessanti novità soprattutto in…
Se non vi bastava la ricca agenda delle sessioni del Common Europe Congress 2024, 3-6 Giugno Milano, ecco un altro…
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