MainframeSupports
tip uge 20/2018:

I mange situationer kan det være rigtig godt at vide, hvornår en DB2 tabel sidst er blevet opdateret. Og det er med DB2 11 blevet nemmere end nogensinde. Men først er det på sin plads at nævne, at det kræver, at DB2 tabellen har sit helt eget DB2 tablespace at bo i. For opdateringen registreres pr. tablespace, ikke pr. tabel, men det er sjældent et problem, da de fleste installationer som standard kræver kun en tabel pr. tablespace.

I DB2 11 tilføjede IBM en ekstra kolonne til tabellen SYSIBM.SYSTABLESPACESTATS kaldet LASTDATACHANGE. Denne timestamp kolonne opdateres hver gang et tablespace opdateres, dog med lidt forsinkelse, og denne forsinkelse (op til minutter) er tillagt værdien i LASTDATACHANGE. Og vær også opmærksom på, at REORG og LOAD ikke opdaterer kolonnen. Med disse begrænsninger for LASTDATACHANGE in mente, så kan du nemt finde sidste opdatering for din tabel:

SELECT T.NAME, MAX(SS.LASTDATACHANGE) LASTDATACHANGE
FROM SYSIBM.SYSTABLES T, SYSIBM.SYSTABLESPACE S, SYSIBM.SYSTABLESPACESTATS SS
WHERE T.NAME = 'MYTABLE'
  AND T.CREATOR = 'MYCREATOR'
  AND T.TSNAME = S.NAME
  AND T.DBNAME = S.DBNAME
  AND S.DBID = SS.DBID
  AND S.PSID = SS.PSID
GROUP BY T.NAME

Min tabel hedder MYCREATOR.MYTABLE og ovenstående SQL finder ud af, hvornår den sidst er opdateret. SYSTABLESPACESTATS indeholder en række pr. partition i dit tablespace (de fleste har kun een), så derfor er der en GROUP BY på tabelnavnet og en MAX på LASTDATACHANGE. Desværre er SYSTABLESPACESTATS ikke en eksakt tabel, så derfor kan du godt risikere, at LASTDATACHANGE returnerer NULL. Og jeg kan desværre ikke fortælle dig hvorfor eller under hvilke omstændigheder, det sker. Som hovedregel vil ovenstående dog virke.

Forrige danske tip        Last tip in english        Tip oversigten