MainframeSupports
tip uge 32/2018:

Tilbage i uge 20 skrev jeg om, hvordan du kan finde tidspunktet for den sidste opdatering af en DB2 tabel. Dette tidspunkt kan også findes via tabellen SYSIBM.SYSLGRNX fra og med DB2 10. Denne tabel har altid eksisteret i DB2, men ikke været tilgængelig via SQL. Det blev den vist nok tidligere end DB2 10, men først i DB2 10 kan du med sikkerhed benytte den til at finde den sidste opdatering af et tablespace, sådan cirka. Og så er tabellen virkelig svært tilgængelig, da den ikke bare kan joines med de eksisterende tabeller i DB2 kataloget, da identifikationen af et tablespace gemmes som såkaldt DBID og PSID, dog ikke som SMALLINT, men som CHAR(2) FOR BIT DATA. Derfor er det langt nemmere at bruge SYSTABLESPACESTATS metoden, men hvis du er meget nysgerrig (som jeg er), så er der ingen vej udenom SYSLGRNX, blandt andet fordi den også indeholder informationer om tidligere opdateringer.

De interessante kolonner i SYSLGRNX er LGRSLRSN og LGRELRSN. Kolonnen LGRELRSN angiver, hvornår den sidste logrecord er skrevet til DB2 loggen, og dermed hvornår tablespacet sidst er blevet opdateret. Det kan dog være, at LGRELRSN er lutter 0-bits og så kan du som en tilnærmelse benytte LGRSLRSN værdien. Når LGRELRSN er 0, så bliver tablespacet opdateret ret hyppigt og hvis LGRSLRSN er timer eller dage før den aktuelle tid, så bliver tablespacet opdateret hele tiden.

For at komplicere tingene yderligere, så findes disse to kolonner enten i en CHAR(6) FOR BIT DATA udgave eller en CHAR(10) FOR BIT DATA udgave afhængig af om DB2 fortsat kører med 6 bytes såkaldte log RBA'er eller de nye 10 bytes log RBA'er. Dette har betydning for, hvordan du skal skrive din SELECT:

SELECT TIMESTAMP(LGRSLRSN) STARTINTERVAL6BYTES
     , TIMESTAMP(LGRELRSN) ENDINTERVAL6BYTES
     , TIMESTAMP(SUBSTR(LGRSLRSN, 2, 8)) STARTINTERVAL10BYTES
     , TIMESTAMP(SUBSTR(LGRELRSN, 2, 8)) ENDINTERVAL10BYTES
FROM SYSIBM.SYSLGRNX
WHERE DBID = X'0048'
  AND PSID = X'003A'
ORDER BY LGRSLRSN DESC

Ovenstående SQL statement skal tilpasses. Dels skal du fjerne enten 10BYTES eller 6BYTES kolonnerne, og dels skal du finde DBID og PSID for den tabel, du er interesseret i. Og så er jeg ikke engang sikker på, at det virker, hvis dit DB2 system stadig kører med 6 bytes log RBA'er. Jeg ved, det virker for 10 bytes log RBA'er, som alle DB2 systemer på min installation kører med. Når du har fået det til at virke, så vil den første række, der returneres, give dig tidspunktet for den seneste byge af opdateringer, række 2 for den næstseneste og så fremdeles.

Vær opmærksom på, at SYSLGRNX ryddes op hver gang, der køres en såkaldt MODIFY utility, så hvis din tabel ikke er blevet opdateret længe, så kan alle rækker i SYSLGRNX være væk. Og hvis der kører REORG DISCARD LOG(NO) eller LOAD LOG(NO), så opdateres SYSLGRNX ikke, selv om rækker fjernes eller indsættes i tabellen.

Forrige danske tip        Last tip in english        Tip oversigten