Um Informationen über ausgeführte Systemsicherungen zu erhalten, bietet SQL verschiedene Möglichkeiten. Sie wollen wissen: Wann wurden Systemsicherugen durchgeführt? Wie lange dauerten diese Sicherungen? Wann wurde die letzte Sicherung durchgeführt? Die Antworten auf diese Fragen gibt Ihnen dieser Text.
Mit der Auswahl 21 im Menü SAVE kann das gesamte System inklusive Betriebssystem gesichert werden. Hier sind die einzelnen Schritte, die bei dieser Art von Sicherung ausgeführt werden:

Weitere Informationen hierzu finden Sie unter:
https://www.ibm.com/docs/en/i/7.3?topic=options-go-save-option-21-saving-entire-system
Wenn Sie wissen wollen, wann diese Auswahl durchgeführt wurde und wie lange jeweils die Sicherung gedauert hat, können Sie SQL zu Hilfe nehmen. Dazu muß man wissen, daß Informationen und Einzelheiten zu den bereits erfolgten Systemsicherungen in der DataArea QUSRSYS/QSRSAV21 gespeichert sind.

Die Spalte data_area_value enthält Informationen zu den ausgeführten Sicherungen.
Die darin enthaltenen Informationen sind nicht sehr strukturiert dargestellt.
Besser und etwas lesbarer ist die Darstellung mit dem CL-Befehl DSPDTAARA:

Für eine übersichtliche Darstellung dieser Informationen können verschiedene SQL-Techniken eingesetzt werden, die dann in Form von SQL-Funktionen und SQL-Views anwendbar sind.
Eigene SQL-Funktion zur Auswertung der durchgeführten Systemsicherungen
Die folgende Funktion systools.go_save_info_TB() analysiert die Spalte data_area_value der oben verwendeten Tabellen-Funktion qsys2.data_area_info (siehe Abbildung 02). Die neue Funktion liefert als Ergebnis eine Tabelle mit den durchgeführten Systemsicherungen und den einzelnen Schritten der Sicherungen.
Überrägt man das Ergebnis der SQL-Anweisng von Abbildung 02 i eine Textdatei, erkennt man, dass die einzelnen Einträge eine Länge von 50 Stellen haben. Die Zeichenfolge ‘********‘ (8 mal ‘*‘) kennzeichnet das erfolgreiche Ende eines Sicherungsvorgangs.
Für jeden 50-stelligen Eintrag wird eine Zeile in die temporäre Tabelle SESSION.SAV21_INFO ausgegeben. Die Angabe SESSION in SQL entspricht der IBM i-Bibliothek QTEMP.
Für die Zeitangabe wird das Format TIMESTAMP verwendet.
/*------------------------------------------------------------------------*/
/* Anpassungen TB 22.05.2024 */
/*-------------------------------------*/
create or replace function systools.go_save_info_TB ()
returns table (
step_time timestamp(0), step_name varchar(16), device varchar(10)
)
not deterministic
modifies sql data
external action
set option usrprf = *user, dynusrprf = *user
begin
declare pos int default 1;
declare step int default 1;
declare meter int;
declare step_count int;
declare at_end int;
declare dtaara_guts varchar(2000) ccsid 1141;
declare v_step_name varchar(16) for sbcs data;
declare v_step_time timestamp(0);
declare v_start_of_savsys timestamp(0);
declare found_a_savsys integer;
declare sav21 cursor for
select step_name, step_time
from SESSION.SAV21_INFO
order by step_time asc;
declare global temporary table SESSION.SAV21_INFO (
step_time timestamp(0), step_name varchar(16), device varchar(10))
with REPLACE;
set dtaara_guts = (select data_area_value
from qsys2.data_area_info
where data_area_library = 'QUSRSYS' and
data_area_name = 'QSRSAV21');
set step_count = length(rtrim(dtaara_guts)) / 50 + 1;
while (step <= step_count) do
insert into SESSION.SAV21_INFO
values (timestamp_format(substr(dtaara_guts, pos, 14), 'YYYYMMDDHH24MISS'),
case
when rtrim(substr(dtaara_guts, pos + 15, 10)) = '********' then 'GO SAVE Complete'
else rtrim(substr(dtaara_guts, pos + 15, 10))
end, substr(dtaara_guts, pos + 26, 10));
set pos = pos + 50;
set step = step + 1;
end while;
return select step_time, step_name, device
from SESSION.SAV21_INFO;
end;
stop;
Die Ausführung unter Verwendung der neu erstellten Funktion erfolgt mit folgender SQL-Anweisung:
--
select *
from table (
systools.go_save_info_TB()
)
order by step_time asc;
stop;
/*----------------------------------------------------------------*/
Und so sieht das Ergebnis aus:

Eine SQL-View zur Auswertung der durchgeführten Systemsicherungen
Die oben erstellte SQL-Funktion liefert alle Sicherungen mit den Zetangabne für die einzelnen ausgeführten Schritte. Eine kumulierte Übersicht über die Sicherungen mit einer Zeile pro Sicherung und der tatsächliche Dauer in Stunden und Minuten kann mit der folgenden SQL-View erreicht werden:
create or replace view systools.go_save21_info_TB as
with SAVE_Start (step_start_time, device, row_num) as (
select step_time, device, row_number() over (
order by step_time
) as row_num
from table (
systools.go_save_info_TB()
)
where step_name in ('SAVSYS')
),
Earliest_Save (step_time) as (
select min(step_start_time)
from SAVE_Start
),
SAVE_End (step_end_time, row_num) as (
select e.step_time, row_number() over (
order by e.step_time
) as row_num
from Earliest_Save b, table (
systools.go_save_info()
) e
where step_name = 'GO SAVE Complete' and
e.step_time > b.step_time
)
select s.row_num as save_num, device, s.step_start_time, e.step_end_time,
timestampdiff(8, cast(e.step_end_time - s.step_start_time as char(22)))
as GOSAVE_hours,
timestampdiff(4, cast(e.step_end_time - s.step_start_time as char(22)))
as GOSAVE_minutes
from SAVE_Start s inner join SAVE_End e on s.row_num = e.row_num
where timestampdiff(4, cast(e.step_end_time - s.step_start_time as char(22))) > 0;
stop;
Die Auswertung der View erfolgt mit der SQL-Anweisung:
select * from systools.go_save21_info_TB;
Und hier ist das Ergebnis:

Vorschau:
Im nächsten Artikel werde ich Ihnen weitere SQL-Tools für den Systemadministrator vorstellen.
Bis dahin wünsche ich Ihnen weiterhin viel Spaß beim Vermehren Ihrer Fertigkeiten.
Den Autor Theo Bär erreichen Sie unter:
EDV-Beratung Theo Bär – Ringmauerweg 1 – 69250 Schönau – Tel. (+49) 6228 912 630 – e-Mail info[at]edv-baer.com