MainframeSupports
tip uge 51/2013:

For to måneder siden skrev jeg et tip om, hvordan du får oprettet en DB2-tabel, selv om det i første omgang ser ud til, at du ikke har adgang til det. Nu er turen kommet til at skrive om oprettelse af index, hvor det umiddelbart virker umuligt.

Hvis du selv har oprettet den tabel, du vil oprette et index til, så er du som udgangspunkt autoriseret til det. Hvis du bliver afvist med en autorisationsfejl, når du forsøger at oprette et index på en tabel, du selv har oprettet, så skyldes det, at du ikke har adgang til at bruge den stogroup (storage group) eller den bpool (bufferpool), som er tilknyttet den database, som tabellen er oprettet i. Det er altså den database, tabellen er blevet oprettet i, der styrer, hvilken storage group og bufferpool der bliver tilknyttet dit index.

Heldigvis kan du selv bestemme storage group og bufferpool, når du opretter et index. Først skal du finde ud af, hvilke storage groups og bufferpools, du rent faktisk har adgang til. Det gør du med en:

select char(name,8) name, obtype
from sysibm.sysresauth
where grantee = 'PUBLIC' and obtype in ('B','S')
;
Eksempel på resultat:
NAME     OBTYPE
--------+------
BP0      B
BP1      B
SYSDEFLT S

OBTYPE B er de bufferpools, og OBTYPE S er de storage groups, du må tilknytte index til. Du skal nu tilføje USING STOGROUP <stogroup> BUFFERPOOL <bpool> til dit CREATE INDEX SQL statement og erstatte <stogroup> og <bpool> med relevante værdier fra resultatet af ovenstående select statement. Hvis denne select ikke har returneret rækker med både OBTYPE B og S, så kan du ikke oprette nogen indexer på det pågældende DB2 subsystem. Så er der ikke andet at gøre end at kontakte den mest venlige DBA, du kender og få vedkommende til at hjælpe dig.

Forrige danske tip        Last tip in english        Tip oversigten