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.