Jeg har for mange år siden kommenteret på, hvordan man kan undgå overraskelser, når man skal lave BIND eller REBIND af sine DB2 packages. Der er sket rigtig meget i DB2 på netop dette punkt og i version 10 blev alle DB2 DBA'ers hedeste ønsker på området opfyldt. Disse ønsker er:
Første ønske opfyldes med option APCOMPARE(ERROR). Når denne option er angivet fejler BIND/REBIND, hvis bare et enkelt statement, der allerede findes i den eksisterende package, ændrer accessvej. En fantastisk option, når man gerne vil lave REBIND efter DB2 versionsskifte eller efter en RUNSTATS, hvor man gerne vil vide hvilke packages, der får nye accessveje, uden at det går ud over den eksisterende performance.
Andet ønske opfyldes med option APREUSE(WARN) (gælder faktisk først fra version 11). Accesvejen for alle statements, der er uændrede, genbruges, hvis muligt. Hvis DB2 packagen fungerer før REBIND med denne option, vil den også fungere bagefter og benytte de samme accessveje. Bemærk her forskellen til APCOMPARE, som altid vil forsøge sig med nye accessveje, mens APREUSE handler om at bevare det eksisterende. APREUSE er mest til brug ved versionsskift, hvor IBM typisk lover bedre performance ved at lave REBIND uden nødvendigvis også at skulle have en ny accessvej.
Tredie ønske opfyldes med option EXPLAIN(ONLY). Accessvejen rapporteres som sædvanligt i PLAN_TABLE og øvrige explain tabeller, men selve BIND'en gennemføres ikke. Herefter kan man i ro og mag sammenligne rækkerne i PLAN_TABLE fra den kørende package med den nye ikke-dannede package. Hvor APCOMPARE og APREUSE er lette at bruge og forstå, så skal der knofedt til for at få noget ud af EXPLAIN(ONLY), da den jo kræver, at man er i stand til at sammenligne to accessveje for at få udbytte af denne option.
Fjerde og sidste ønske er option OPTHINT, der gør det muligt at få DB2 til at overveje en anden accessvej end den, DB2 selv vil vælge. IBM har selvfølgelig gjort det vildt svært at bruge denne option, men den virker! Jeg vil snart vende tilbage til, hvordan du bruger OPTHINT.
Læg mærke til at der både findes en APCOMPARE(WARN) og en APREUSE(ERROR). Begge disse options kom også med version 10. Jeg vil anbefale, at du læser alt om APCOMPARE og APREUSE i DB2 commands manualen.