VSAM - Indice alternativo
L'indice alternativo è l'indice aggiuntivo creato per i set di dati KSDS / ESDS oltre al loro indice principale. Un indice alternativo fornisce l'accesso ai record utilizzando più di una chiave. La chiave dell'indice alternativo può essere una chiave non univoca, può avere duplicati.
Creazione di un indice alternativo
I passaggi seguenti vengono utilizzati per creare un indice alternativo:
- Definisci indice alternativo
- Definisci percorso
- Indice di costruzione
Definisci indice alternativo
L'indice alternativo viene definito utilizzando DEFINE AIX comando.
DEFINE AIX -
(NAME(alternate-index-name) -
RELATE(vsam-file-name) -
CISZ(number) -
FREESPACE(CI-Percentage,CA-Percentage) -
KEYS(length offset) -
NONUNIQUEKEY / UNIQUEKEY -
UPGRADE / NOUPGRADE -
RECORDSIZE(average maximum)) -
DATA -
(NAME(vsam-file-name.data)) -
INDEX -
(NAME(vsam-file-name.index))
La sintassi sopra mostra i parametri utilizzati durante la definizione dell'indice alternativo. Abbiamo già discusso alcuni parametri in Define Cluster Module e alcuni dei nuovi parametri sono utilizzati nella definizione dell'Indice Alternativo che discuteremo qui -
Suor n | Parametri con descrizione |
---|---|
1 | DEFINE AIX Il comando Define AIX viene utilizzato per definire l'indice alternativo e specificare gli attributi dei parametri per i suoi componenti. |
2 | NAME NAME specifica il nome dell'indice alternativo. |
3 | RELATE RELATE specifica il nome del cluster VSAM per cui viene creato l'indice alternativo. |
4 | NONUNIQUEKEY / UNIQUEKEY UNIQUEKEY specifica che l'indice alternativo è univoco e NONUNIQUEKEY specifica che possono esistere duplicati. |
5 | UPGRADE / NOUPGRADE UPGRADE specifica che l'indice alternativo deve essere modificato se il cluster di base viene modificato e NOUPGRADE specifica che gli indici alternativi devono essere lasciati soli se il cluster di base viene modificato. |
Esempio
Di seguito è riportato un esempio di base per mostrare come definire un indice alternativo in JCL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE AIX (NAME(MY.VSAM.KSDSAIX) -
RELATE(MY.VSAM.KSDSFILE) -
CISZ(4096) -
FREESPACE(20,20) -
KEYS(20,7) -
NONUNIQUEKEY -
UPGRADE -
RECORDSIZE(80,80)) -
DATA(NAME(MY.VSAM.KSDSAIX.DATA)) -
INDEX(NAME(MY.VSAM.KSDSAIX.INDEX))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà l'indice alternativo MY.VSAM.KSDSAIX.
Definisci percorso
Define Path viene utilizzato per correlare l'indice alternativo al cluster di base. Durante la definizione del percorso, specifichiamo il nome del percorso e l'indice alternativo a cui questo percorso è correlato.
DEFINE PATH -
NAME(alternate-index-path-name) -
PATHENTRY(alternate-index-name))
La sintassi sopra ha due parametri. NAME viene utilizzato per specificare il nome del percorso dell'indice alternativo e PATHENTRY viene utilizzato per specificare il nome dell'indice alternativo.
Esempio
Di seguito è riportato un esempio di base per definire Path in JCL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE PATH -
NAME(MY.VSAM.KSDSAIX.PATH) -
PATHENTRY(MY.VSAM.KSDSAIX))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà il percorso tra l'indice alternativo e il cluster di base.
Indice di costruzione
Il comando BLDINDEX viene utilizzato per creare l'indice alternativo. BLDINDEX legge tutti i record nel set di dati indicizzato VSAM (o cluster di base) ed estrae i dati necessari per creare l'indice alternativo.
BLDINDEX -
INDATASET(vsam-cluster-name) -
OUTDATASET(alternate-index-name))
La sintassi sopra ha due parametri. INDATASET viene utilizzato per specificare il nome del cluster VSAM e OUTDATASET viene utilizzato per specificare il nome dell'indice alternativo.
Esempio
Di seguito è riportato un esempio di base per creare un indice in JCL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
BLDINDEX -
INDATASET(MY.VSAM.KSDSFILE) -
OUTDATASET(MY.VSAM.KSDSAIX))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e costruirà l'indice.