Bisher wurden Objektlisten über die QPI QUSLOBJ oder über DSPOBJD und die Ausgabe an ein *OUTFILE oder an den Drucker erstellt. Ab Version 7R1 erfolgt dies über die SQL-Table-Funktion OBJECT_STATISTICS.
Zum Erstellen von Objektlisten stehen verschiedene Optionen zur Verfügung: mit STRSQL oder über den Punkt „SQL-Prozeduren ausführen“ im Operations Navigator. Hier ist folgender Befehl einzugeben, um eine Liste über alle Objekte in der QGPL oder einer Bibliothek Ihrer Wahl zu erhalten:

SELECT * FROM TABLE (QSYS2.OBJECT_STATISTICS(‘QGPL’,’*ALL’)) AS X

Das Ergebnis sieht folgendermaßen aus:


Funktion und Parameter

1. Bibliotheksname: Entweder der Name der Bibliothek oder die Werte
*ALL alle Bibliotheken
*ALLUSR alle Benutzerbibliotheken in der ASP-Gruppe (Auxillary Storage Pool)
*ALLUSRAVL alle Benutzerbibliotheken in allen Speichergruppen
2. Objekttyp: Entweder ein bestimmter Objekttyp, zum Beispiel *PGM, oder der Wert
*ALL alle Objekttypen; der Stern kann hier auch weggelassen werden
3. Objektname: Dieser Parameter ist optional und funktioniert erst ab V7R2 TR3.
Eine Beschreibung der Parameter und der Felder finden Sie hier: www.ibm.com/support/knowledgecenter/api/content/ssw_ibm_i_72/rzajq/rzajqudfobjectstat.htm?locale=en
Nun können Sie einiges damit machen, da mit den Möglichkeiten, die SQL bietet, on the fly interessante Fragen beantwortet werden können.
Sie hätten gerne die 20 größten Objekte der Bibliothek QUSRSYS. Hier ist das Statement:

SELECT CAST(OBJLONGSCHEMA AS CHAR (10)) AS OBJLIBRARY,
OBJNAME, OBJTYPE, OBJATTRIBUTE, OBJSIZE, OBJTEXT
FROM TABLE(QSYS2.OBJECT_STATISTICS(‘QUSRSYS’,’ALL’)) AS X
order by OBJSIZE desc
limit 20;

Und hier das Ergebnis:

Beispiel: Sie wissen, dass der Programmierer Ross irgendwann zwischen 15. und 31. März 2016 zwischen 15 und 16 Uhr ein Objekt in irgendeiner Benutzerbibliothek erstellt hat, und niemand kann sich mehr daran erinnern. So lautet das Statement:

SELECT CAST(OBJLONGSCHEMA AS CHAR (10)) AS OBJLIBRARY, OBJNAME,
OBJTYPE, OBJATTRIBUTE, OBJSIZE, date(OBJCREATED) as OBJDATE,
time(OBJCREATED) as OBJTIME, OBJDEFINER, OBJTEXT
FROM TABLE(QSYS2.OBJECT_STATISTICS(‘*ALLUSR’,’ALL’)) AS X
where OBJDEFINER = ‘ROSS’
and date(OBJCREATED) between ‘2016-03-15’ and ‘2016-03-31’
and time(OBJCREATED) between ‘15:00:00’ and ‘16:00:00’;

Und so das Ergebnis:

Und plötzlich interessieren Sie alle CLP-Programme, die in 2016 nicht verwendet und vom Programmierer Ross erstellt wurden. Das Ergebnis sollte dann noch nach verwendeten Tagen absteigend sortiert sein. Hier ist das Statement:

SELECT CAST(OBJLONGSCHEMA AS CHAR (10)) AS OBJLIBRARY, OBJNAME, OBJTYPE, OBJATTRIBUTE, OBJSIZE, date(LAST_USED_TIMESTAMP) as LASTUSEDDATE,
DAYS_USED_COUNT, OBJDEFINER, OBJTEXT
FROM TABLE(QSYS2.OBJECT_STATISTICS(‘*ALLUSR’,’*PGM’)) AS X
where OBJDEFINER = ‘ROSS’
and OBJATTRIBUTE = ‘CLP’
and date(LAST_USED_TIMESTAMP) < ‘2016-01-01’
order by DAYS_USED_COUNT desc;

Und hier das Ergebnis:

Zu guter Letzt haben Sie die Frage nach Physical Files, die unter dem gleichen Namen in unterschiedlichen Bibliotheken ihr Unwesen treiben und immer schon schwer zu finden waren. Interessant ist auch, wie viele es davon gibt. Hier ist das passende Statement:

SELECT OBJNAME,count(*) as Anzahl
FROM TABLE(QSYS2.OBJECT_STATISTICS(‘*ALLUSR’,’*FILE’)) AS X
where OBJATTRIBUTE = ‘PF’ and OBJNAME not like ‘Q?%’
group by OBJNAME
HAVING count(*) > 1
order by OBJNAME;

Und hier das Ergebnis: