VSAM - Guida rapida
Il metodo di accesso allo storage virtuale (VSAM) è un metodo di accesso ad alte prestazioni e un'organizzazione di set di dati, che organizza e mantiene i dati tramite una struttura di catalogo. Utilizza il concetto di archiviazione virtuale e può proteggere i set di dati a vari livelli fornendo password. VSAM può essere utilizzato nei programmi COBOL come file sequenziali fisici. VSAM sono i set di dati logici per l'archiviazione dei record. I file possono essere letti in sequenza e in modo casuale in VSAM. È un modo migliorato di archiviare i dati che supera alcuni dei limiti dei file system convenzionali come i file sequenziali.
Caratteristiche di VSAM
Di seguito sono riportate le caratteristiche di VSAM:
VSAM protegge i dati dall'accesso non autorizzato utilizzando password.
VSAM fornisce un accesso rapido ai set di dati.
VSAM ha opzioni per ottimizzare le prestazioni.
VSAM consente la condivisione di set di dati sia in ambiente batch che online.
VSAM sono più strutturati e organizzati nell'archiviazione dei dati.
Lo spazio libero viene riutilizzato automaticamente nei file VSAM.
Limitazioni di VSAM
L'unica limitazione di VSAM è che non può essere memorizzato sul volume TAPE. È sempre memorizzato nello spazio DASD. Richiede un numero di cilindri per memorizzare i dati che non è conveniente.
VSAM è costituito dai seguenti componenti:
- VSAM Cluster
- Area di controllo
- Intervallo di controllo
VSAM Cluster
VSAM sono i set di dati logici per l'archiviazione dei record e sono noti come cluster. Un cluster è un'associazione dell'indice, del set di sequenze e delle porzioni di dati del set di dati. Lo spazio occupato da un cluster VSAM è suddiviso in aree contigue denominate Control Intervals. Discuteremo degli intervalli di controllo più avanti in questo modulo.
Ci sono due componenti principali in un cluster VSAM:
Index Componentcontiene la parte indice. I record dell'indice sono presenti nel componente Indice. Utilizzando il componente di indice VSAM è in grado di recuperare i record dal componente di dati.
Data Componentcontiene la parte dati. I record di dati effettivi sono presenti nel componente Dati.
Intervallo di controllo
Gli intervalli di controllo (CI) in VSAM sono equivalenti ai blocchi per i set di dati non VSAM. Nei metodi non VSAM, l'unità di dati è definita dal blocco. VSAM funziona con un'area dati logica nota come intervalli di controllo.
Gli intervalli di controllo sono la più piccola unità di trasferimento tra un disco e il sistema operativo. Ogni volta che un record viene recuperato direttamente dalla memoria, l'intero CI contenente il record viene letto nel buffer VSAM Input-Output. Il record desiderato viene quindi trasferito all'area di lavoro dal buffer VSAM.
L'intervallo di controllo consiste in:
- Record logici
- Controllare i campi delle informazioni
- Spazio libero
Quando viene caricato un set di dati VSAM, vengono creati gli intervalli di controllo. La dimensione predefinita dell'intervallo di controllo è 4K byte e può estendersi fino a 32 KB.
Analisi dell'intervallo di controllo
Di seguito è riportata la descrizione dei termini utilizzati nel programma precedente:
R1..R5 - Record che vengono memorizzati in Control Interval.
FS - FS è spazio libero, che può essere utilizzato per un'ulteriore espansione del set di dati.
RDF- RDF è noto come Record Definition Fields. RDF sono lunghi 3 byte. Descrive la lunghezza dei record e indica quanti record adiacenti hanno la stessa lunghezza.
CIDF- CIDF è noto come Control Interval Definition Fields. CIDF sono lunghi 4 byte e contengono informazioni sull'intervallo di controllo.
Area di controllo
Un'area di controllo (CA) si forma mettendo insieme due o più intervalli di controllo. Un set di dati VSAM è composto da una o più aree di controllo. La dimensione di VSAM è sempre un multiplo della sua Area di controllo. I file VSAM vengono estesi in unità di aree di controllo.
Di seguito è riportato l'esempio di Area di controllo:
Il cluster VSAM è definito in JCL. JCL utilizzaIDCAMSutilità per creare un cluster. IDCAMS è un'utilità, sviluppata da IBM, per i servizi del metodo di accesso. Viene utilizzato principalmente per definire i set di dati VSAM.
Definizione di un cluster
La sintassi seguente mostra i parametri principali raggruppati in Define Cluster, Data e Index.
.DEFINE CLUSTER (NAME(vsam-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
[INDEXED / NONINDEXED / NUMBERED / LINEAR] -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[KEYS(length offset)] -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE] ) -
DATA -
(NAME(vsam-file-name.data)) -
INDEX -
(NAME(vsam-file-name.index)) -
CATALOG(catalog-name[/password]))
I parametri a livello di CLUSTER si applicano all'intero cluster. I parametri a livello DATI o INDICE si applicano solo al componente dati o indice.
Discuteremo ogni parametro in dettaglio nella seguente tabella:
Suor n | Parametri con descrizione |
---|---|
1 | DEFINE CLUSTER Il comando Define Cluster viene utilizzato per definire un cluster e specificare gli attributi dei parametri per il cluster e i suoi componenti. |
2 | NAME NAME specifica il nome del file VSAM per il quale stiamo definendo il cluster. |
3 | BLOCKS Blocchi specifica il numero di blocchi assegnati per il cluster. |
4 | VOLUMES Volumes specifica uno o più volumi che conterranno il cluster o il componente. |
5 | INDEXED / NONINDEXED / NUMBERED / LINEAR Questo parametro può assumere tre valori INDEXED, NONINDEXED o NUMBERED a seconda del tipo di dataset che stiamo creando. Per i file con sequenza di tasti (KSDS) viene utilizzata l'opzione INDEXED. Per i file in sequenza di immissione (ESDS) viene utilizzata l'opzione NONINDEXED. Per i file relativi ai record (RRDS) è richiesta l'opzione NUMERATA. Per i file Lineari (LDS) è richiesta l'opzione LINEARE. Il valore predefinito di questo parametro è INDICE. Discuteremo di più su KSDS, ESDS, RRDS e LDS nei prossimi moduli. |
6 | RECSZ Il parametro Dimensione record ha due valori che sono Dimensione record media e Massima. La media specifica la lunghezza media dei record logici nel file e la massima indica la lunghezza dei record. |
7 | FREESPACE Freespace specifica la percentuale di spazio libero da riservare per gli intervalli di controllo (CI) e le aree di controllo (CA) del componente dati. Il valore predefinito di questo parametro è zero percentuale. |
8 | CISZ CISZ è noto come dimensione dell'intervallo di controllo. Specifica la dimensione degli intervalli di controllo. |
9 | KEYS Il parametro Keys è definito solo nei file KSDS (key-sequencing). Specifica la lunghezza e l'offset della chiave primaria dalla prima colonna. L'intervallo di valori di questo parametro va da 1 a 255 byte. |
10 | READPW Il valore nel parametro READPW specifica la password del livello di lettura. |
11 | FOR/TO Il valore di questo parametro specifica la quantità di tempo in termini di data e giorni per la conservazione del file. Il valore predefinito per questo parametro è zero giorni. |
12 | UPDATEPW Il valore nel parametro UPDATEPW specifica la password del livello di aggiornamento. |
13 | REUSE / NOREUSE Il parametro REUSE consente di definire cluster che possono essere reimpostati allo stato vuoto senza eliminarli e ridefinirli. |
14 | DATA - NAME La parte DATA del cluster contiene il nome del set di dati che contiene i dati effettivi del file. |
15 | INDEX-NAME La parte INDICE del cluster contiene la chiave primaria e il puntatore di memoria per il record corrispondente nella parte dati. Viene definito quando viene utilizzato un cluster con sequenze di chiavi. |
16 | CATALOG Il parametro del catalogo indica il catalogo in cui verrà definito il file. Discuteremo del catalogo separatamente nei prossimi moduli. |
Esempio
Di seguito è riportato un esempio di base per mostrare come definire un cluster in JCL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.KSDSFILE) -
INDEXED -
RECSZ(80 80) -
TRACKS(1,1) -
KEYS(5 0) -
CISZ(4096) -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.KSDSFILE.DATA)) -
INDEX (NAME(MY.VSAM.KSDSFILE.INDEX))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà il file MY.VSAM.KSDSFILE VSAM.
Eliminazione di un cluster
Per eliminare un file VSAM, il cluster VSAM deve essere eliminato utilizzando l'utilità IDCAMS. Il comando DELETE rimuove la voce del cluster VSAM dal catalogo e, facoltativamente, rimuove il file, liberando così lo spazio occupato dall'oggetto. Se il set di dati VSAM non è scaduto, non verrà eliminato. Per eliminare questi tipi di set di dati utilizzare l'opzione PURGE.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintassi sopra mostra i parametri che possiamo usare con l'istruzione Delete. Discuteremo ciascuno di essi in dettaglio nella tabella seguente:
Suor n | Parametri con descrizione |
---|---|
1 | ERASE / NOERASE L'opzione CANCELLA viene specificata per sovrascrivere l'attributo CANCELLA specificato per l'oggetto nel catalogo. L'opzione NOERASE è utilizzata per impostazione predefinita. |
2 | FORCE / NOFORCE L'opzione FORCE è specificata per eliminare SPACE e USERCATALOG anche se non sono vuoti. L'opzione NOFORCE è utilizzata per impostazione predefinita. |
3 | PURGE / NOPURGE L'opzione PURGE viene utilizzata per eliminare il set di dati VSAM se il set di dati non è scaduto. L'opzione NOPURGE è utilizzata per impostazione predefinita. |
4 | SCRATCH / NOSCRATCH L'opzione SCRATCH è specificata per rimuovere la voce associata per l'oggetto dal sommario del volume. Viene utilizzato principalmente per set di dati non vsam come i GDG. L'opzione NOSCRATCH è quella predefinita. |
Esempio
Di seguito è riportato un esempio di base per mostrare come eliminare un cluster in JCL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.KSDSFILE CLUSTER
PURGE
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e cancellerà il file MY.VSAM.KSDSFILE VSAM.
ESDS è noto come Entry Sequenced Data Set. Un set di dati in sequenza di voci si comporta come un'organizzazione di file sequenziale con alcune funzionalità aggiuntive incluse. Possiamo accedere direttamente ai record e per motivi di sicurezza possiamo utilizzare anche password. Dobbiamo codificareNONINDEXEDall'interno del comando DEFINE CLUSTER per i set di dati ESDS. Di seguito sono riportate le caratteristiche principali di ESDS:
I record nel cluster ESDS vengono archiviati nell'ordine in cui sono stati inseriti nel set di dati.
I record sono referenziati da un indirizzo fisico noto come Relative Byte Address (RBA). Supponiamo che se in un dataset ESDS abbiamo record da 80 byte, l'RBA del primo record sarà 0, l'RBA per il secondo record sarà 80, per il terzo record sarà 160 e così via.
È possibile accedere ai record in sequenza da RBA, noto come addressed access.
I record vengono conservati nell'ordine in cui sono stati inseriti. Alla fine vengono inseriti nuovi record.
Non è possibile eliminare i record nel set di dati ESDS. Ma possono essere contrassegnati come inattivi.
I record nel set di dati ESDS possono essere di lunghezza fissa o variabile.
ESDS non è indicizzato. Le chiavi non sono presenti nel set di dati ESDS, quindi potrebbero contenere record duplicati.
ESDS può essere utilizzato nei programmi COBOL come qualsiasi altro file. Specificheremo il nome del file in JCL e possiamo utilizzare il file ESDS per l'elaborazione all'interno del programma. Nel programma COBOL specificare l'organizzazione dei file comeSequential e modalità di accesso come Sequential con set di dati ESDS.
Definizione del cluster ESDS
La seguente sintassi mostra quali parametri possiamo utilizzare durante la creazione del cluster ESDS. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
DEFINE CLUSTER (NAME(esds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
NONINDEXED -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(esds-file-name.data))
Esempio
L'esempio seguente mostra come creare un cluster ESDS in JCL utilizzando l'utility IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.ESDSFILE) -
NONINDEXED -
RECSZ(80 80) -
TRACKS(1,1) -
CISZ(4096) -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.ESDSFILE.DATA))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà il file MY.VSAM.ESDSFILE VSAM.
Eliminazione del cluster ESDS
Il cluster ESDS viene eliminato utilizzando l'utilità IDCAMS. Il comando DELETE rimuove la voce del cluster VSAM dal catalogo e, facoltativamente, rimuove il file, liberando così lo spazio occupato dall'oggetto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintassi sopra mostra quali parametri possiamo utilizzare durante l'eliminazione del cluster ESDS. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
Esempio
L'esempio seguente mostra come eliminare un cluster ESDS in JCL utilizzando l'utilità IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.ESDSFILE CLUSTER
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e cancellerà MY.VSAM.ESDSFILE VSAM Cluster.
KSDS è noto come Key Sequencing Data Set. Un set di dati con sequenza di chiavi (KSDS) è più complesso di ESDS e RRDS ma è più utile e versatile. Dobbiamo codificareINDEXEDall'interno del comando DEFINE CLUSTER per i set di dati KSDS. Il cluster KSDS è costituito dai seguenti due componenti:
Index- Il componente indice del cluster KSDS contiene l'elenco dei valori chiave per i record nel cluster con puntatori ai record corrispondenti nel componente dati. Il componente indice fa riferimento all'indirizzo fisico di un record KSDS. Questo collega la chiave di ogni record alla posizione relativa del record nel set di dati. Quando un record viene aggiunto o eliminato, questo indice viene aggiornato di conseguenza.
Data- Il componente dati del cluster KSDS contiene i dati effettivi. Ogni record nel componente dati di un cluster KSDS contiene un campo chiave con lo stesso numero di caratteri e si trova nella stessa posizione relativa in ogni record.
Di seguito sono riportate le caratteristiche principali di KSDS:
I record all'interno del set di dati KSDS vengono sempre tenuti ordinati per campo chiave. I record vengono archiviati in ordine crescente e ordinati in base alla chiave.
È possibile accedere ai record in sequenza ed è anche possibile l'accesso diretto.
I record vengono identificati utilizzando una chiave. La chiave di ogni record è un campo in una posizione predefinita all'interno del record. Ogni chiave deve essere univoca nel set di dati KSDS. Quindi la duplicazione dei record non è possibile.
Quando vengono inseriti nuovi record, l'ordine logico dei record dipende dalla sequenza di confronto del campo chiave.
I record nel set di dati KSDS possono essere di lunghezza fissa o variabile.
KSDS può essere utilizzato in COBOLprogrammi come qualsiasi altro file. Specificheremo il nome del file in JCL e possiamo utilizzare il file KSDS per l'elaborazione all'interno del programma. Nel programma COBOL specificare l'organizzazione dei file comeIndexed e puoi utilizzare qualsiasi modalità di accesso (Sequential, Random or Dynamic) con set di dati KSDS.
Struttura dei file KSDS
Per cercare un record particolare, diamo un valore chiave univoco. Il valore della chiave viene cercato nel componente index. Una volta trovata la chiave, viene recuperato l'indirizzo di memoria corrispondente che fa riferimento al componente dati. Dall'indirizzo di memoria possiamo prelevare i dati effettivi memorizzati nel componente dati. L'esempio seguente mostra la struttura di base dell'indice e del file di dati:
Definizione del cluster KSDS
La seguente sintassi mostra quali parametri possiamo usare durante la creazione del cluster KSDS.
La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
DEFINE CLUSTER (NAME(ksds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
INDEXED -
KEYS(length offset) -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(ksds-file-name.data)) -
INDEX -
(NAME(ksds-file-name.index))
Esempio
L'esempio seguente mostra come creare un cluster KSDS in JCL utilizzando l'utilità IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.KSDSFILE) -
INDEXED -
KEYS(6 1) -
RECSZ(80 80) -
TRACKS(1,1) -
CISZ(4096) -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.KSDSFILE.DATA)) -
INDEX (NAME(MY.VSAM.KSDSFILE.INDEX)) -
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà il file MY.VSAM.KSDSFILE VSAM.
Eliminazione del cluster KSDS
Il cluster KSDS viene eliminato utilizzando l'utilità IDCAMS. Il comando DELETE rimuove la voce del cluster VSAM dal catalogo e, facoltativamente, rimuove il file, liberando così lo spazio occupato dall'oggetto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintassi sopra mostra quali parametri possiamo usare durante l'eliminazione del cluster KSDS. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
Esempio
L'esempio seguente mostra come eliminare un cluster KSDS in JCL utilizzando l'utilità IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.KSDSFILE CLUSTER
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e cancellerà MY.VSAM.KSDSFILE VSAM Cluster.
RRDS è noto come Relative Record Data Set. Il cluster RRDS è simile a un cluster ESDS. L'unica differenza è che i record RRDS sono accessibili daRelative Record Number (RRN), dobbiamo codificare NUMBEREDall'interno del comando DEFINE CLUSTER. Di seguito sono riportate le caratteristiche principali di RRDS:
Un set di dati di record relativo contiene record identificati da Relative Record Number (RRN), che è il numero di sequenza relativo al primo record.
RRDS consente l'accesso ai record in base al numero come record 1, record 2 e così via. Ciò fornisce l'accesso casuale e presuppone che il programma applicativo disponga di un modo per ottenere i numeri di record desiderati.
È possibile accedere ai record in un dataset RRDS in modo sequenziale, nell'ordine del numero di record relativo, o direttamente, fornendo il numero di record relativo del record desiderato.
I record in un set di dati RRDS vengono memorizzati in slot di lunghezza fissa. Ogni record è referenziato dal numero del suo slot, il numero può variare da 1 al numero massimo di record nel dataset.
I record in un RRDS possono essere scritti inserendo un nuovo record in uno slot vuoto.
I record possono essere eliminati da un cluster RRDS, lasciando così uno slot vuoto.
Applicazioni che utilizzano record di lunghezza fissa o un numero di record con significato contestuale che possono utilizzare set di dati RRDS.
RRDS può essere utilizzato in COBOLprogrammi come qualsiasi altro file. Specificheremo il nome del file in JCL e possiamo utilizzare il file KSDS per l'elaborazione all'interno del programma. Nel programma COBOL specificare l'organizzazione dei file comeRELATIVE e puoi utilizzare qualsiasi modalità di accesso (Sequential, Random or Dynamic) con set di dati RRDS.
Struttura del file RRDS
Lo spazio è suddiviso in slot di lunghezza fissa nella struttura dei file RRDS. Uno slot può essere completamente vuoto o completamente pieno. Pertanto, è possibile aggiungere nuovi record agli slot vuoti e record esistenti possono essere eliminati dagli slot riempiti. Possiamo accedere a qualsiasi record direttamente fornendo il numero di record relativo. L'esempio seguente mostra la struttura di base del file di dati:
Componente dati
Numero di registrazione relativo | Campo di registrazione 1 | Campo di registrazione 2 |
---|---|---|
1 | Tutorial | Punto |
2 | Mohtashim | M. |
3 | Nishant | Malik |
Definizione del cluster RRDS
La sintassi seguente mostra quali parametri possiamo utilizzare durante la creazione del cluster RRDS.
La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
DEFINE CLUSTER (NAME(rrds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
NUMBERED -
RECSZ(average maximum) -
[FREESPACE(CI-Percentage,CA-Percentage)] -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(rrds-file-name.data))
Esempio
L'esempio seguente mostra come creare un cluster RRDS in JCL utilizzando l'utility IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.RRDSFILE) -
NUMBERED -
RECSZ(80 80) -
TRACKS(1,1) -
REUSE -
FREESPACE(3 3) ) -
DATA (NAME(MY.VSAM.RRDSFILE.DATA))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà il file MY.VSAM.RRDSFILE VSAM.
Eliminazione del cluster RRDS
Il cluster RRDS viene eliminato utilizzando l'utilità IDCAMS. Il comando DELETE rimuove la voce del cluster VSAM dal catalogo e, facoltativamente, rimuove il file, liberando così lo spazio occupato dall'oggetto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintassi sopra mostra quali parametri possiamo utilizzare durante l'eliminazione del cluster RRDS. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
Esempio
L'esempio seguente mostra come eliminare un cluster RRDS in JCL utilizzando l'utilità IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.RRDSFILE CLUSTER
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e cancellerà MY.VSAM.RRDSFILE VSAM Cluster.
LDS è noto come Linear Data Set. Il set di dati lineare è l'unica forma di set di dati a flusso di byte utilizzato nei file del sistema operativo tradizionale. I set di dati lineari sono usati raramente. Di seguito sono riportate le caratteristiche principali di LDS:
I set di dati lineari non contengono RDF e CIDF in quanto non hanno alcuna informazione di controllo incorporata nel suo CI.
Dati a cui è possibile accedere come stringhe indirizzabili in byte nella memoria virtuale in set di dati lineari.
I set di dati lineari hanno una dimensione dell'intervallo di controllo di 4KBytes.
LDS è una specie di file non vsam con alcuni servizi VSAM come l'uso di IDCAMS e informazioni specifiche VSAM nel catalogo.
DB2 è attualmente il più grande utente di set di dati lineari.
IDCAMS viene utilizzato per definire un LDS ma vi si accede utilizzando una macro Data-In-Virtual (DIV).
Il set di dati lineare non contiene concetti di record. Tutti i byte LDS sono byte di dati.
Definizione del cluster LDS
La seguente sintassi mostra quali parametri possiamo usare durante la creazione del cluster LDS. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
DEFINE CLUSTER (NAME(lds-file-name) -
BLOCKS(number) -
VOLUMES(volume-serial) -
LINEAR -
CISZ(number) -
[READPW(password)] -
[FOR(days)|TO(date)] -
[UPDATEPW(password)] -
[REUSE / NOREUSE]) -
DATA -
(NAME(lds-file-name.data))
Esempio
L'esempio seguente mostra come creare un cluster LDS in JCL utilizzando l'utility IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DEFINE CLUSTER (NAME(MY.VSAM.LDSFILE) -
LINEAR -
TRACKS(1,1) -
CISZ(4096) ) -
DATA (NAME(MY.VSAM.LDSFILE.DATA))
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e creerà il file MY.VSAM.LDSFILE VSAM.
Eliminazione del cluster LDS
Il cluster LDS viene eliminato utilizzando l'utility IDCAMS. Il comando DELETE rimuove la voce del cluster VSAM dal catalogo e, facoltativamente, rimuove il file, liberando così lo spazio occupato dall'oggetto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintassi sopra mostra quali parametri possiamo usare durante l'eliminazione del cluster LDS. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
Esempio
L'esempio seguente mostra come eliminare un cluster LDS in JCL utilizzando l'utilità IDCAMS -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.LDSFILE CLUSTER
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e cancellerà MY.VSAM.LDSFILE VSAM Cluster.
I comandi VSAM vengono utilizzati per eseguire determinate operazioni sui set di dati VSAM. Di seguito sono riportati i comandi VSAM più utili:
- Alter
- Repro
- Listcat
- Examine
- Verify
Alter
Il comando ALTER viene utilizzato per modificare gli attributi del file VSAM. Possiamo modificare gli attributi del file VSAM che abbiamo menzionato nella definizione del cluster VSAM. Di seguito è riportata la sintassi per modificare gli attributi:
ALTER file-cluster-name [password]
[ADDVOLUMES(volume-serial)]
[BUFFERSPACE(size)]
[EMPTY / NOEMPTY]
[ERASE / NOERASE]
[FREESPACE(CI-percentage CA-percentage)]
[KEYS(length offset)]
[NEWNAME(new-name)]
[RECORDSIZE(average maximum)]
[REMOVEVOLUMES(volume-serial)]
[SCRATCH / NOSCRATCH]
[TO(date) / FOR(days)]
[UPGRADE / NOUPGRADE]
[CATALOG(catalog-name [password]]
La sintassi sopra mostra quali parametri possiamo modificare in un cluster VSAM esistente. La descrizione dei parametri rimane la stessa menzionata in VSAM - Modulo Cluster.
Esempio
L'esempio seguente mostra come utilizzare il comando ALTER per aumentare lo spazio libero, per aggiungere più volumi e per modificare le chiavi -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
ALTER MY.VSAM.KSDSFILE
[ADDVOLUMES(2)]
[FREESPACE(6 6)]
[KEYS(10 2)]
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e altererà Freespace, Volumes e Keys.
Repro
Il comando REPRO viene utilizzato per caricare i dati nel dataset VSAM. Viene anche utilizzato per copiare i dati da un set di dati VSAM a un altro. Possiamo usare questo comando per copiare i dati dal file sequenziale al file VSAM. L'utilità IDCAMS utilizza il comando REPRO per caricare i set di dati.
REPRO INFILE(in-ddname)
OUTFILE(out-ddname)
Nella sintassi precedente, in-ddname è il nome DD per il set di dati di input che contiene record. Out-ddname è il nome DD per il set di dati di output, in cui verranno copiati i record dei set di dati di input.
Esempio
L'esempio seguente mostra come copiare i record da un set di dati a un altro set di dati VSAM -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//IN DD DSN = MY.VSAM.KSDSFILE,DISP = SHR
//OUT DD DSN = MY.VSAM1.KSDSFILE,DISP = SHR
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
REPRO INFILE(IN)
OUTFILE(OUT)
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e copierà tutti i record da MY.VSAM.KSDSFILE al file MY.VSAM1.KSDSFILE VSAM.
Listcat
Il comando LISTCAT viene utilizzato per ottenere i dettagli del catalogo di un set di dati VSAM. Il comando Listcat fornisce le seguenti informazioni sui set di dati VSAM:
- Informazioni SMS
- Informazioni RLS
- Informazioni sul volume
- Informazioni sulla sfera
- Informazioni sull'assegnazione
- Attributi del set di dati
LISTCAT ENTRY(vsam-file-name) ALL
Nella sintassi precedente, vsam-file-name è il nome del set di dati VSAM per il quale abbiamo bisogno di tutte le informazioni. La parola chiave ALL è specificata per ottenere tutti i dettagli del catalogo.
Esempio
L'esempio seguente mostra come recuperare tutti i dettagli utilizzando il comando Listcat per un set di dati VSAM -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
LISTCAT ENTRY(MY.VSAM.KSDSFILE)
ALL
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e mostrerà tutti i dettagli del catalogo sul set di dati MY.VSAM.KSDSFILE.
Esaminare
Il comando Examine viene utilizzato per verificare l'integrità strutturale di un cluster di set di dati con sequenza di chiavi. Controlla i componenti dell'indice e dei dati e se viene rilevato un problema, i messaggi di errore vengono inviati allo spool. Puoi controllare uno qualsiasi dei messaggi IDCxxxxx.
EXAMINE NAME(vsam-ksds-name) -
INDEXTEST DATATEST -
ERRORLIMIT(50)
Nella sintassi precedente, vsam-ksds-name è il nome del set di dati VSAM per il quale è necessario esaminare l'indice e la parte dei dati del cluster VSAM.
Esempio
L'esempio seguente mostra come verificare se l'indice e la parte dei dati del set di dati KSDS sono sincronizzati o meno -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
EXAMINE NAME(MY.VSAM.KSDSFILE) -
INDEXTEST DATATEST -
ERRORLIMIT(50)
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e mostrerà tutti i problemi con il data set VSAM in uno dei messaggi IDCxxxxx nello spool.
Verificare
Il comando Verifica viene utilizzato per controllare e correggere i file VSAM che non sono stati chiusi correttamente dopo un errore. Il comando aggiunge i record End-Of-Data corretti al file.
VERIFY DS(vsam-file-name)
Nella sintassi precedente, vsam-file-name è il nome del set di dati VSAM per il quale dobbiamo controllare gli errori.
Esempio
L'esempio seguente mostra come controllare e correggere gli errori nel set di dati VSAM -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
VERIFY DS(MY.VSAM.KSDSFILE)
/*
Se eseguirai il JCL sopra sul server Mainframes. Dovrebbe essere eseguito con MAXCC = 0 e correggerà gli errori nel set di dati VSAM.
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 vengono utilizzati nella definizione dell'Indice Alternativo che discuteremo qui -
Suor n | Parametri con descrizione |
---|---|
1 | DEFINE AIX Il comando Definisci 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 data set 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.
Il catalogo conserva l'unità e il volume in cui risiede il set di dati. Il catalogo viene utilizzato per il recupero dei set di dati. I dataset non VSAM creano una voce di catalogo tramite il parametro Disposition in JCL. I set di dati VSAM mantengono il proprio catalogo sotto forma di cluster KSDS. Nell'immagine seguente puoi vedere il tipo di cataloghi VSAM -
Catalogo principale
Il catalogo principale è esso stesso un file che monitora e gestisce le operazioni di VSAM. Il loro è solo un catalogo principale in qualsiasi sistema che contiene voci sui set di dati di sistema e sui set di dati VSAM. I set di dati VSAM e non VSAM possono avere una voce nel catalogo principale, ma questa non è una buona pratica. Il catalogo principale viene creato durante il processo di generazione del sistema e risiede sul volume di sistema. Il catalogo principale possiede tutte le risorse VSAM nel sistema operativo. Tutti i file utilizzati in VSAM sono controllati dal catalogo principale. Il catalogo principale è responsabile delle seguenti operazioni:
- Autorizzazione password per i file
- Migliorare la sicurezza
- Accesso VSAM per i file
- Gestione dello spazio del file
- Posizione del file
- Spazio libero disponibile nel file
Quando uno qualsiasi degli attributi di file sopra vengono modificati, vengono aggiornati automaticamente nel catalogo principale. Il catalogo principale è definito utilizzando i programmi IDCAMS.
Catalogo utente
Il catalogo utente ha la stessa struttura e concetti del catalogo principale. È presente al livello gerarchico successivo dopo il catalogo principale. Il catalogo utente non è obbligatorio nel sistema ma viene utilizzato per migliorare la sicurezza del sistema VSAM. Il catalogo principale punta ai file VSAM ma se è presente il catalogo utente, il catalogo principale punta al catalogo utente. I cataloghi utente possono essere numerosi in base ai requisiti di sistema. Nella struttura VSAM, se il catalogo principale viene rimosso, non influirà sul catalogo utente. Il catalogo utente contiene voci su set di dati specifici dell'applicazione. Le informazioni del catalogo utente vengono memorizzate nel catalogo principale.
Spazio dati
Lo spazio dati è un'area del dispositivo di archiviazione ad accesso diretto allocata esclusivamente per l'uso di VSAM. Lo spazio dati deve essere creato prima di creare cluster VSAM. L'area occupata dallo spazio dati viene registrata nel Volume Table of Contents (VTOC), in modo che lo spazio non sia disponibile per l'allocazione a nessun altro uso, VSAM o non VSAM. VTOC ha l'ingresso di un'area occupata dallo spazio. VSAM crea uno spazio dati per contenere le voci del catalogo utente. VSAM prende il controllo di questo spazio e monitora e mantiene questo spazio in base alle esigenze dei file VSAM.
Cluster unici
Unique Clusters è costituito da uno spazio dati separato che viene utilizzato completamente dal cluster creato al suo interno. I cluster unici vengono creati dallo spazio non allocato sull'archiviazione ad accesso diretto.
Cluster sub-allocati
Un file VSAM sotto-allocato condivide lo spazio VSAM con altri file sotto-allocati. Specifica che il file deve essere sottoallocato nello spazio VSAM esistente. La sottoallocazione viene utilizzata per semplificare la gestione e il controllo degli spazi VSAM.
Set di dati non VSAM
I set di dati non VSAM risiedono sia su nastro che su storage ad accesso diretto. I set di dati non VSAM possono contenere voci sia nel catalogo principale che nei cataloghi utente. La funzione principale della catalogazione di set di dati non VSAM è conservare le informazioni seriali di unità e volume.
Mentre lavori con i set di dati VSAM potresti riscontrare delle interruzioni anomale. Di seguito sono riportati i codici di stato dei file comuni con la loro descrizione che ti aiuteranno a risolvere i problemi:
Codice | Descrizione |
---|---|
00 | Operazione completata con successo |
02 | Trovata chiave duplicata dell'indice alternativo non univoco |
04 | Record di lunghezza fissa non valido |
05 | Durante l'esecuzione di OPEN File e file non sono presenti |
10 | Rilevata fine del file |
14 | Tentativo di LEGGERE un record relativo al di fuori del limite del file |
20 | Chiave non valida per VSAM KSDS o RRDS |
21 | Errore di sequenza durante l'esecuzione di WRITE o la modifica della chiave su REWRITE |
22 | Chiave duplicata primaria trovata |
23 | Record non trovato o File non trovato |
24 | Chiave al di fuori del confine del file |
30 | Errore di I / O permanente |
34 | Registra al di fuori del limite del file |
35 | Durante l'esecuzione di OPEN File e file non sono presenti |
37 | OPEN file con modalità sbagliata |
38 | Ho provato ad APRIRE un file bloccato |
39 | OPEN non riuscito a causa di attributi di file in conflitto |
41 | Ho provato ad APRIRE un file che è già aperto |
42 | Ho provato a CHIUDERE un file che non è APERTO |
43 | Ho provato a RISCRIVERE senza prima leggere un record |
44 | Ho provato a RISCRIVERE un record di lunghezza diversa |
46 | Ho provato a leggere oltre la fine del file |
47 | Ho tentato di leggere da un file che non era stato aperto IO o INPUT |
48 | Si è tentato di SCRIVERE su un file che non era stato aperto IO o OUTPUT |
49 | Ho tentato di ELIMINARE o RISCRIVERE un file che non è stato aperto IO |
91 | Password o autorizzazione non riuscita |
92 | Errore logico |
93 | Le risorse non sono disponibili |
94 | Record sequenziale non disponibile o errore OPEN simultaneo |
95 | Informazioni sul file non valide o incomplete |
96 | Nessuna istruzione DD per il file |
97 | APERTURA riuscita e integrità del file verificata |
98 | Il file è bloccato - OPEN non riuscita |
99 | Record bloccato: accesso al record non riuscito |