MainframeSupports
tip uge 47/2000:

Efter introduktionen af versionering af packages i DB2 har der været en del diskussion af fordele og ulemper. Fordelene er uomtvisteligt, at man kan lave nonstop igangsætninger af DB2-programmer. Ulemperne er, at man skal huske at rydde op i de gamle versioner, for ellers risikerer man, at eksekveringen af ellers udgåede programmer fungerer, hvor de uden versionering helt sikkert ville få timestamp-fejl (SQL-code -805).

Oprydning af gamle versioner kan være svær at administrere, så et eller andet kompromis midt imellem vil være rigtig godt. Følgende ide har jeg fået fra Bonnie Baker, som er en kendt DB2-guru. I stedet for at versionere, så kan man benytte sig af to collections. Den aktuelle collection og en fallback collection. Når fallback ikke længere er nødvendigt, så rydder man simpelthen op ved af lave FREE af packages i fallback collection'en.

Konceptet kan man implementere i følgende tre trin:

  1. BIND af planer foretages med en package-list, hvor både aktuel og fallback collection indgår. Følgende er et eksempel med kun en package i planen:

    BIND PLAN(MYPLAN) OWNER(ME) VALIDATE(RUN) +
         PKLIST(MYCOLL.MYPACK, FALLBACK.MYPACK)

    Man skal huske at bruge VALIDATE(RUN), da collection FALLBACK normalt ikke vil være tilgængelig.

  2. Når en ny version af MYPACK skal bindes, så gennemfører man følgende to binds:

    BIND PACKAGE(FALLBACK) OWNER(ME) COPY(MYCOLL.MYPACK)
    BIND PACKAGE(MYCOLL) OWNER(ME) MEMBER(MYPACK)

    Her er rækkefølgen selvfølgelig det vigtige. Tricket i det hele er COPY-optionen, som kopierer packages fra en collection over i en anden. Efter disse to binds vil MYPLAN være i stand til at køre på både den gamle og den nye version af programmet MYPACK.

  3. Når man ikke længere ønsker at kunne lave fallback, så laver man en FREE af package MYPACK i collection FALLBACK. I et produktionsmiljø kan man lave en kørsel, der rydder op på et fast tidspunkt i forhold til igangsætningerne.

Hvis man benytter sig af generiske packages, så er det utroligt let at omstille sig til dette princip for versionering, mens det er lidt mere krævende, hvis man eksplicit angiver samtlige packages i sin package-list. I dette tilfælde er man nødt til at gentage hver eneste package til sin fallback collection. Man kan selvfølgelig også vælge at lave et generisk entry til fallback collection'en. Husk af performancehensyn at placere fallback collection'en sidst i package-listen.

Sidste uges tip        Tip oversigten