VSAM - Guía rápida
El método de acceso al almacenamiento virtual (VSAM) es un método de acceso de alto rendimiento y una organización de conjuntos de datos, que organiza y mantiene los datos a través de una estructura de catálogo. Utiliza el concepto de almacenamiento virtual y puede proteger conjuntos de datos en varios niveles dando contraseñas. VSAM se puede utilizar en programas COBOL como archivos secuenciales físicos. VSAM son los conjuntos de datos lógicos para almacenar registros. Los archivos se pueden leer de forma secuencial y aleatoria en VSAM. Es una forma mejorada de almacenar datos que supera algunas de las limitaciones de los sistemas de archivos convencionales como los archivos secuenciales.
Características de VSAM
Las siguientes son las características de VSAM:
VSAM protege los datos contra el acceso no autorizado mediante el uso de contraseñas.
VSAM proporciona acceso rápido a conjuntos de datos.
VSAM tiene opciones para optimizar el rendimiento.
VSAM permite el intercambio de conjuntos de datos en entornos por lotes y en línea.
Los VSAM están más estructurados y organizados para almacenar datos.
El espacio libre se reutiliza automáticamente en los archivos VSAM.
Limitaciones de VSAM
La única limitación de VSAM es que no se puede almacenar en el volumen TAPE. Siempre se almacena en el espacio DASD. Requiere una serie de cilindros para almacenar los datos, lo que no es rentable.
VSAM consta de los siguientes componentes:
- Clúster VSAM
- Área de control
- Intervalo de control
Clúster VSAM
VSAM son los conjuntos de datos lógicos para almacenar registros y se conocen como clústeres. Un grupo es una asociación del índice, el conjunto de secuencias y las partes de datos del conjunto de datos. El espacio ocupado por un clúster VSAM se divide en áreas contiguas denominadas Intervalos de control. Discutiremos sobre los intervalos de control más adelante en este módulo.
Hay dos componentes principales en un clúster VSAM:
Index Componentcontiene la parte del índice. Los registros de índice están presentes en el componente de índice. El uso del componente de índice VSAM puede recuperar registros del componente de datos.
Data Componentcontiene la parte de datos. Los registros de datos reales están presentes en el componente de datos.
Intervalo de control
Los intervalos de control (CI) en VSAM son equivalentes a bloques para conjuntos de datos que no son VSAM. En los métodos que no son VSAM, la unidad de datos la define el bloque. VSAM trabaja con el área de datos lógicos que se conoce como Intervalos de control.
Los intervalos de control son la unidad más pequeña de transferencia entre un disco y el sistema operativo. Siempre que se recupera un registro directamente del almacenamiento, todo el CI que contiene el registro se lee en el búfer de entrada y salida de VSAM. Luego, el registro deseado se transfiere al área de trabajo desde el búfer VSAM.
El intervalo de control consta de:
- Registros lógicos
- Campos de información de control
- Espacio libre
Cuando se carga un conjunto de datos VSAM, se crean intervalos de control. El tamaño del intervalo de control predeterminado es de 4 KB y puede extenderse hasta 32 KB.
Análisis del intervalo de control
A continuación se muestra la descripción de los términos utilizados en el programa anterior:
R1..R5 - Registros que se almacenan en Intervalo de control.
FS - FS es espacio libre, que se puede utilizar para una mayor expansión del conjunto de datos.
RDF- RDF se conoce como campos de definición de registros. Los RDF tienen una longitud de 3 bytes. Describe la longitud de los registros e indica cuántos registros adyacentes tienen la misma longitud.
CIDF- CIDF se conoce como campos de definición de intervalo de control. Los CIDF tienen 4 bytes de longitud y contienen información sobre el intervalo de control.
Área de control
Un área de control (CA) se forma juntando dos o más intervalos de control. Un conjunto de datos VSAM se compone de una o más áreas de control. El tamaño de VSAM es siempre un múltiplo de su Área de control. Los archivos VSAM se extienden en unidades de áreas de control.
A continuación se muestra el ejemplo del área de control:
El clúster VSAM se define en JCL. Usos de JCLIDCAMSutilidad para crear un clúster. IDCAMS es una utilidad, desarrollada por IBM, para servicios de métodos de acceso. Se utiliza para definir principalmente conjuntos de datos VSAM.
Definición de un clúster
La siguiente sintaxis muestra los principales parámetros que se agrupan en Define Cluster, Data y 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]))
Los parámetros en el nivel CLUSTER se aplican a todo el clúster. Los parámetros a nivel de DATOS o ÍNDICE se aplican solo al componente de datos o índice.
Discutiremos cada parámetro en detalle en la siguiente tabla:
No Señor | Parámetros con descripción |
---|---|
1 | DEFINE CLUSTER El comando Definir clúster se utiliza para definir un clúster y especificar atributos de parámetros para el clúster y sus componentes. |
2 | NAME NAME especifica el nombre del archivo VSAM para el que estamos definiendo el clúster. |
3 | BLOCKS Bloques especifica la cantidad de bloques asignados para el clúster. |
4 | VOLUMES Volúmenes especifica uno o más volúmenes que contendrán el clúster o componente. |
5 | INDEXED / NONINDEXED / NUMBERED / LINEAR Este parámetro puede tomar tres valores INDEXED, NONINDEXED o NUMBERED dependiendo del tipo de conjunto de datos que estamos creando. Para archivos de secuencia de clave (KSDS), se utiliza la opción INDEXED. Para archivos de secuencia de entrada (ESDS), se utiliza la opción NONINDEXED. Para archivos de registro relativo (RRDS), se requiere la opción NUMBERED. Para archivos lineales (LDS), se requiere la opción LINEAR. El valor predeterminado de este parámetro es INDEXADO. Discutiremos más sobre KSDS, ESDS, RRDS y LDS en los próximos módulos. |
6 | RECSZ El parámetro Tamaño de registro tiene dos valores que son Tamaño de registro promedio y máximo. El Promedio especifica la longitud promedio de los registros lógicos en el archivo y el Máximo denota la longitud de los registros. |
7 | FREESPACE Freespace especifica el porcentaje de espacio libre a reservar para los intervalos de control (CI) y las áreas de control (CA) del componente de datos. El valor predeterminado de este parámetro es cero porcentaje. |
8 | CISZ CISZ se conoce como tamaño de intervalo de control. Especifica el tamaño de los intervalos de control. |
9 | KEYS El parámetro de claves se define solo en archivos de secuencia de claves (KSDS). Especifica la longitud y el desplazamiento de la clave principal desde la primera columna. El rango de valor de este parámetro es de 1 a 255 bytes. |
10 | READPW El valor del parámetro READPW especifica la contraseña del nivel de lectura. |
11 | FOR/TO El valor de este parámetro especifica la cantidad de tiempo en términos de fecha y días para retener el archivo. El valor predeterminado de este parámetro es cero días. |
12 | UPDATEPW El valor en el parámetro UPDATEPW especifica la contraseña del nivel de actualización. |
13 | REUSE / NOREUSE El parámetro REUSE permite definir clústeres que se pueden restablecer a estado vacío sin eliminarlos y redefinirlos. |
14 | DATA - NAME La parte de DATOS del clúster contiene el nombre del conjunto de datos que contiene los datos reales del archivo. |
15 | INDEX-NAME La parte INDICE del clúster contiene la clave principal y el puntero de memoria para el registro correspondiente en la parte de datos. Se define cuando se utiliza un clúster secuenciado por claves. |
dieciséis | CATALOG El parámetro de catálogo denota el catálogo bajo el cual se definirá el archivo. Discutiremos sobre el catálogo por separado en los próximos módulos. |
Ejemplo
A continuación se muestra un ejemplo básico para mostrar cómo definir un clúster en 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará el archivo MY.VSAM.KSDSFILE VSAM.
Eliminar un clúster
Para eliminar un archivo VSAM, el clúster VSAM debe eliminarse mediante la utilidad IDCAMS. El comando DELETE elimina la entrada del clúster VSAM del catálogo y, opcionalmente, elimina el archivo, liberando así el espacio ocupado por el objeto. Si el conjunto de datos de VSAM no está vencido, no se eliminará. Para eliminar este tipo de conjuntos de datos, utilice la opción PURGA.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintaxis anterior muestra los parámetros que podemos usar con la instrucción Delete. Discutiremos cada uno de ellos en detalle en la siguiente tabla:
No Señor | Parámetros con descripción |
---|---|
1 | ERASE / NOERASE La opción ERASE se especifica para anular el atributo ERASE especificado para el objeto en el catálogo. La opción NOERASE se toma por defecto. |
2 | FORCE / NOFORCE La opción FORCE se especifica para eliminar SPACE y USERCATALOG incluso si no están vacíos. La opción NOFORCE se toma por defecto. |
3 | PURGE / NOPURGE La opción PURGE se usa para eliminar el conjunto de datos VSAM si el conjunto de datos no ha expirado. La opción NOPURGA se toma por defecto. |
4 | SCRATCH / NOSCRATCH La opción SCRATCH se especifica para eliminar la entrada asociada para el objeto de la Tabla de contenido del volumen. Se utiliza principalmente para conjuntos de datos que no son de vsam, como los GDG. La opción NOSCRATCH se toma por defecto. |
Ejemplo
A continuación, se muestra un ejemplo básico para mostrar cómo eliminar un clúster en JCL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.KSDSFILE CLUSTER
PURGE
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y eliminará el archivo VSAM MY.VSAM.KSDSFILE.
ESDS se conoce como conjunto de datos secuenciados de entrada. Un conjunto de datos con secuencia de entrada se comporta como una organización secuencial de archivos con algunas características más incluidas. Podemos acceder a los registros directamente y, por motivos de seguridad, también podemos utilizar contraseñas. Debemos codificarNONINDEXEDdentro del comando DEFINE CLUSTER para conjuntos de datos ESDS. Las siguientes son las características clave de ESDS:
Los registros del clúster ESDS se almacenan en el orden en que se insertaron en el conjunto de datos.
Los registros se referencian por la dirección física que se conoce como Relative Byte Address (RBA). Suponga que si en un conjunto de datos ESDS, tenemos registros de 80 bytes, el RBA del primer registro será 0, el RBA para el segundo registro será 80, para el tercer registro será 160 y así sucesivamente.
Se puede acceder a los registros secuencialmente por RBA, que se conoce como addressed access.
Los registros se mantienen en el orden en que se insertaron. Los nuevos registros se insertan al final.
La eliminación de registros no es posible en el conjunto de datos ESDS. Pero pueden marcarse como inactivos.
Los registros del conjunto de datos ESDS pueden tener una longitud fija o variable.
ESDS no está indexado. Las claves no están presentes en el conjunto de datos ESDS, por lo que pueden contener registros duplicados.
ESDS se puede utilizar en programas COBOL como cualquier otro archivo. Especificaremos el nombre del archivo en JCL y podemos usar el archivo ESDS para procesarlo dentro del programa. En el programa COBOL, especifique la organización de archivos comoSequential y modo de acceso como Sequential con el conjunto de datos ESDS.
Definición de clúster ESDS
La siguiente sintaxis muestra qué parámetros podemos usar al crear un clúster ESDS. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
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))
Ejemplo
El siguiente ejemplo muestra cómo crear un clúster ESDS en JCL utilizando la utilidad 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará el archivo MY.VSAM.ESDSFILE VSAM.
Eliminación del clúster ESDS
El clúster de ESDS se elimina mediante la utilidad IDCAMS. El comando DELETE elimina la entrada del clúster VSAM del catálogo y, opcionalmente, elimina el archivo, liberando así el espacio ocupado por el objeto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintaxis anterior muestra qué parámetros podemos usar al eliminar el clúster ESDS. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
Ejemplo
El siguiente ejemplo muestra cómo eliminar un clúster ESDS en JCL mediante la utilidad IDCAMS:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.ESDSFILE CLUSTER
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y eliminará MY.VSAM.ESDSFILE VSAM Cluster.
KSDS se conoce como conjunto de datos secuenciados clave. Un conjunto de datos en secuencia de claves (KSDS) es más complejo que ESDS y RRDS, pero es más útil y versátil. Debemos codificarINDEXEDdentro del comando DEFINE CLUSTER para conjuntos de datos KSDS. El clúster de KSDS consta de los siguientes dos componentes:
Index- El componente de índice del clúster KSDS contiene la lista de valores clave para los registros en el clúster con punteros a los registros correspondientes en el componente de datos. El componente de índice se refiere a la dirección física de un registro KSDS. Esto relaciona la clave de cada registro con la ubicación relativa del registro en el conjunto de datos. Cuando se agrega o elimina un registro, este índice se actualiza en consecuencia.
Data- El componente de datos del clúster KSDS contiene los datos reales. Cada registro en el componente de datos de un clúster KSDS contiene un campo clave con el mismo número de caracteres y ocurre en la misma posición relativa en cada registro.
Las siguientes son las características clave de KSDS:
Los registros dentro del conjunto de datos de KSDS siempre se mantienen ordenados por campo clave. Los registros se almacenan en orden ascendente, clasificando secuencia por tecla.
Se puede acceder a los registros de forma secuencial y también es posible el acceso directo.
Los registros se identifican mediante una clave. La clave de cada registro es un campo en una posición predefinida dentro del registro. Cada clave debe ser única en el conjunto de datos de KSDS. De modo que no es posible la duplicación de registros.
Cuando se insertan nuevos registros, el orden lógico de los registros depende de la secuencia de clasificación del campo clave.
Los registros en el conjunto de datos KSDS pueden tener una longitud fija o variable.
KSDS se puede utilizar en COBOLprogramas como cualquier otro archivo. Especificaremos el nombre del archivo en JCL y podemos usar el archivo KSDS para procesarlo dentro del programa. En el programa COBOL, especifique la organización de archivos comoIndexed y puedes usar cualquier modo de acceso (Sequential, Random or Dynamic) con el conjunto de datos KSDS.
Estructura de archivo KSDS
Para buscar un registro en particular, le damos un valor de clave único. El valor clave se busca en el componente de índice. Una vez que se encuentra la clave, se recupera la dirección de memoria correspondiente que se refiere al componente de datos. A partir de la dirección de la memoria podemos obtener los datos reales que se almacenan en el componente de datos. El siguiente ejemplo muestra la estructura básica del índice y el archivo de datos:
Definición de clúster de KSDS
La siguiente sintaxis muestra qué parámetros podemos usar al crear un clúster KSDS.
La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
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))
Ejemplo
El siguiente ejemplo muestra cómo crear un clúster KSDS en JCL utilizando la utilidad 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)) -
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará el archivo MY.VSAM.KSDSFILE VSAM.
Eliminar el clúster de KSDS
El clúster de KSDS se elimina mediante la utilidad IDCAMS. El comando DELETE elimina la entrada del clúster VSAM del catálogo y, opcionalmente, elimina el archivo, liberando así el espacio ocupado por el objeto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintaxis anterior muestra qué parámetros podemos usar al eliminar el clúster KSDS. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
Ejemplo
El siguiente ejemplo muestra cómo eliminar un clúster de KSDS en JCL utilizando la utilidad IDCAMS:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.KSDSFILE CLUSTER
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y eliminará MY.VSAM.KSDSFILE VSAM Cluster.
RRDS se conoce como conjunto de datos de registro relativo. El clúster RRDS es similar a un clúster ESDS. La única diferencia es que se accede a los registros RRDS porRelative Record Number (RRN), debemos codificar NUMBEREDdentro del comando DEFINE CLUSTER. Las siguientes son las características clave de RRDS:
Un conjunto de datos de registro relativo tiene registros que son identificados por Relative Record Number (RRN), que es el número de secuencia relativo al primer registro.
RRDS permite el acceso de registros por número como registro 1, registro 2, etc. Esto proporciona acceso aleatorio y asume que el programa de aplicación tiene una forma de obtener los números de registro deseados.
Se puede acceder a los registros de un conjunto de datos RRDS de forma secuencial, en orden de número de registro relativo, o directamente, proporcionando el número de registro relativo del registro deseado.
Los registros en un conjunto de datos RRDS se almacenan en ranuras de longitud fija. Cada registro está referenciado por el número de su ranura, el número puede variar desde 1 hasta el número máximo de registros en el conjunto de datos.
Los registros en un RRDS se pueden escribir insertando un nuevo registro en una ranura vacía.
Los registros se pueden eliminar de un clúster RRDS, dejando un espacio vacío.
Aplicaciones que usan registros de longitud fija o un número de registro con significado contextual que pueden usar conjuntos de datos RRDS.
RRDS se puede utilizar en COBOLprogramas como cualquier otro archivo. Especificaremos el nombre del archivo en JCL y podemos usar el archivo KSDS para procesarlo dentro del programa. En el programa COBOL, especifique la organización de archivos comoRELATIVE y puedes usar cualquier modo de acceso (Sequential, Random or Dynamic) con el conjunto de datos RRDS.
Estructura de archivo RRDS
El espacio se divide en ranuras de longitud fija en la estructura de archivos RRDS. Una ranura puede estar completamente vacía o completamente llena. Por lo tanto, se pueden agregar nuevos registros a los espacios vacíos y los registros existentes se pueden eliminar de los espacios que se llenan. Podemos acceder a cualquier registro directamente dando Número de registro relativo. El siguiente ejemplo muestra la estructura básica del archivo de datos:
Componente de datos
Número de registro relativo | Campo de registro 1 | Campo de registro 2 |
---|---|---|
1 | Tutorial | Punto |
2 | Mohtashim | METRO. |
3 | Nishant | Malik |
Definición de clúster RRDS
La siguiente sintaxis muestra qué parámetros podemos usar al crear un clúster RRDS.
La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
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))
Ejemplo
El siguiente ejemplo muestra cómo crear un clúster RRDS en JCL utilizando la utilidad 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará el archivo MY.VSAM.RRDSFILE VSAM.
Eliminar el clúster RRDS
El clúster RRDS se elimina mediante la utilidad IDCAMS. El comando DELETE elimina la entrada del clúster VSAM del catálogo y, opcionalmente, elimina el archivo, liberando así el espacio ocupado por el objeto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintaxis anterior muestra qué parámetros podemos usar al eliminar el clúster RRDS. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
Ejemplo
El siguiente ejemplo muestra cómo eliminar un clúster RRDS en JCL utilizando la utilidad IDCAMS:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.RRDSFILE CLUSTER
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y eliminará MY.VSAM.RRDSFILE VSAM Cluster.
LDS se conoce como conjunto de datos lineales. El conjunto de datos lineal es la única forma de conjunto de datos de flujo de bytes que se utiliza en los archivos del sistema operativo tradicional. Los conjuntos de datos lineales rara vez se utilizan. Las siguientes son las características clave de LDS:
Los conjuntos de datos lineales no contienen RDF ni CIDF, ya que no tienen información de control incorporada en su CI.
Datos a los que se puede acceder como cadenas direccionables por bytes en el almacenamiento virtual en conjuntos de datos lineales.
Los conjuntos de datos lineales tienen un tamaño de intervalo de control de 4 KB.
LDS es una especie de archivo que no es vsam con algunas funciones de VSAM como el uso de IDCAMS e información específica de VSAM en el catálogo.
DB2 es actualmente el mayor usuario de conjuntos de datos lineales.
IDCAMS se utiliza para definir una LDS, pero se accede a ella mediante una macro de datos en virtual (DIV).
El conjunto de datos lineal no tiene conceptos de registros. Todos los bytes LDS son bytes de datos.
Definición de clúster LDS
La siguiente sintaxis muestra qué parámetros podemos usar al crear un clúster LDS. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
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))
Ejemplo
El siguiente ejemplo muestra cómo crear un clúster LDS en JCL utilizando la utilidad 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará el archivo MY.VSAM.LDSFILE VSAM.
Eliminar clúster LDS
El clúster LDS se elimina mediante la utilidad IDCAMS. El comando DELETE elimina la entrada del clúster VSAM del catálogo y, opcionalmente, elimina el archivo, liberando así el espacio ocupado por el objeto.
DELETE data-set-name CLUSTER
[ERASE / NOERASE]
[FORCE / NOFORCE]
[PURGE / NOPURGE]
[SCRATCH / NOSCRATCH]
La sintaxis anterior muestra qué parámetros podemos usar al eliminar el clúster LDS. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
Ejemplo
El siguiente ejemplo muestra cómo eliminar un clúster LDS en JCL utilizando la utilidad IDCAMS:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEPNAME EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
DELETE MY.VSAM.LDSFILE CLUSTER
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y eliminará MY.VSAM.LDSFILE VSAM Cluster.
Los comandos VSAM se utilizan para realizar determinadas operaciones en conjuntos de datos VSAM. Los siguientes son los comandos VSAM más útiles:
- Alter
- Repro
- Listcat
- Examine
- Verify
Alterar
El comando ALTER se utiliza para modificar los atributos del archivo VSAM. Podemos cambiar los atributos del archivo VSAM que hemos mencionado en la definición del clúster VSAM. A continuación se muestra la sintaxis para cambiar los atributos:
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 sintaxis anterior muestra qué parámetros podemos modificar en un clúster VSAM existente. La descripción del parámetro sigue siendo la misma que se menciona en VSAM - Módulo de clúster.
Ejemplo
El siguiente ejemplo muestra cómo usar el comando ALTER para aumentar el espacio libre, para agregar más volúmenes y para Alter Keys:
//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)]
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y alterará el espacio libre, los volúmenes y las claves.
Repro
El comando REPRO se usa para cargar datos en el conjunto de datos VSAM. También se utiliza para copiar datos de un conjunto de datos VSAM a otro. Podemos usar este comando para copiar datos de un archivo secuencial a un archivo VSAM. La utilidad IDCAMS usa el comando REPRO para cargar los conjuntos de datos.
REPRO INFILE(in-ddname)
OUTFILE(out-ddname)
En la sintaxis anterior, in-ddname es el nombre DD para el conjunto de datos de entrada que tiene registros. Out-ddname es el nombre DD para el conjunto de datos de salida, donde se copiarán los registros de los conjuntos de datos de entrada.
Ejemplo
El siguiente ejemplo muestra cómo copiar registros de un conjunto de datos a otro conjunto de datos 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)
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y copiará todos los registros de MY.VSAM.KSDSFILE al archivo MY.VSAM1.KSDSFILE VSAM.
Listcat
El comando LISTCAT se usa para obtener los detalles del catálogo de un conjunto de datos VSAM. El comando Listcat proporciona la siguiente información sobre los conjuntos de datos VSAM:
- Información SMS
- Información de RLS
- Información de volumen
- Información de la esfera
- Información de asignación
- Atributos del conjunto de datos
LISTCAT ENTRY(vsam-file-name) ALL
En la sintaxis anterior, vsam-file-name es el nombre del conjunto de datos VSAM para el que necesitamos toda la información. Se especifica la palabra clave ALL para obtener todos los detalles del catálogo.
Ejemplo
El siguiente ejemplo muestra cómo obtener todos los detalles mediante el comando Listcat para un conjunto de datos VSAM:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
LISTCAT ENTRY(MY.VSAM.KSDSFILE)
ALL
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y mostrará todos los detalles del catálogo sobre el conjunto de datos MY.VSAM.KSDSFILE.
Examinar
El comando Examinar se utiliza para verificar la integridad estructural de un grupo de conjuntos de datos secuenciados por clave. Comprueba los componentes de índice y datos y, si se encuentra algún problema, los mensajes de error se envían en cola. Puede consultar cualquiera de los mensajes IDCxxxxx.
EXAMINE NAME(vsam-ksds-name) -
INDEXTEST DATATEST -
ERRORLIMIT(50)
En la sintaxis anterior, vsam-ksds-name es el nombre del conjunto de datos VSAM para el que necesitamos examinar el índice y la parte de datos del clúster VSAM.
Ejemplo
El siguiente ejemplo muestra cómo verificar si el índice y la parte de datos del conjunto de datos KSDS están sincronizados o no:
//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)
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y mostrará todos los problemas con el conjunto de datos VSAM en uno de los mensajes IDCxxxxx en spool.
Verificar
El comando Verify se usa para verificar y reparar archivos VSAM que no se han cerrado correctamente después de un error. El comando agrega registros correctos de fin de datos al archivo.
VERIFY DS(vsam-file-name)
En la sintaxis anterior, vsam-file-name es el nombre del conjunto de datos VSAM para el que necesitamos verificar los errores.
Ejemplo
El siguiente ejemplo muestra cómo verificar y corregir errores en el conjunto de datos VSAM:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = IDCAMS
//SYSPRINT DD SYSOUT = *
//SYSIN DD *
VERIFY DS(MY.VSAM.KSDSFILE)
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y solucionará los errores en el conjunto de datos VSAM.
El índice alternativo es el índice adicional que se crea para los conjuntos de datos KSDS / ESDS además de su índice principal. Un índice alternativo proporciona acceso a los registros mediante el uso de más de una clave. La clave del índice alternativo puede ser una clave no única, puede tener duplicados.
Creación de índice alternativo
Los siguientes pasos se utilizan para crear un índice alternativo:
- Definir índice alternativo
- Definir ruta
- Índice de construcción
Definir índice alternativo
El índice alternativo se define mediante DEFINE AIX mando.
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 sintaxis anterior muestra los parámetros que se utilizan al definir el índice alternativo. Ya hemos discutido algunos parámetros en Definir módulo de clúster y algunos de los nuevos parámetros se utilizan para definir el índice alternativo que discutiremos aquí:
No Señor | Parámetros con descripción |
---|---|
1 | DEFINE AIX El comando Definir AIX se utiliza para definir el índice alternativo y especificar atributos de parámetros para sus componentes. |
2 | NAME NAME especifica el nombre del índice alternativo. |
3 | RELATE RELATE especifica el nombre del clúster VSAM para el que se crea el índice alternativo. |
4 | NONUNIQUEKEY / UNIQUEKEY UNIQUEKEY especifica que el índice alternativo es único y NONUNIQUEKEY especifica que pueden existir duplicados. |
5 | UPGRADE / NOUPGRADE UPGRADE especifica que el índice alternativo debe modificarse si se modifica el clúster base y NOUPGRADE especifica que los índices alternativos deben dejarse solo si se modifica el clúster base. |
Ejemplo
A continuación se muestra un ejemplo básico para mostrar cómo definir un índice alternativo en 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará MY.VSAM.KSDSAIX Alternate Index.
Definir ruta
Definir ruta se utiliza para relacionar el índice alternativo con el clúster base. Al definir la ruta, especificamos el nombre de la ruta y el índice alternativo con el que está relacionada esta ruta.
DEFINE PATH -
NAME(alternate-index-path-name) -
PATHENTRY(alternate-index-name))
La sintaxis anterior tiene dos parámetros. NAME se utiliza para especificar el nombre de ruta de índice alternativo y PATHENTRY se utiliza para especificar el nombre de índice alternativo.
Ejemplo
A continuación se muestra un ejemplo básico para definir la ruta en 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y creará una ruta entre el índice alternativo y el clúster base.
Índice de construcción
El comando BLDINDEX se usa para construir el índice alternativo. BLDINDEX lee todos los registros en el conjunto de datos indexados VSAM (o grupo base) y extrae los datos necesarios para construir el índice alternativo.
BLDINDEX -
INDATASET(vsam-cluster-name) -
OUTDATASET(alternate-index-name))
La sintaxis anterior tiene dos parámetros. INDATASET se utiliza para especificar el nombre del clúster VSAM y OUTDATASET se utiliza para especificar el nombre de índice alternativo.
Ejemplo
A continuación se muestra un ejemplo básico para crear índices en 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))
/*
Si va a ejecutar el JCL anterior en el servidor Mainframes. Debería ejecutarse con MAXCC = 0 y construirá el índice.
El catálogo mantiene la unidad y el volumen donde reside el conjunto de datos. El catálogo se utiliza para la recuperación de conjuntos de datos. Los conjuntos de datos que no son de VSAM crean una entrada de catálogo mediante el parámetro Disposition en JCL. Los conjuntos de datos de VSAM mantienen su propio catálogo en forma de clúster KSDS. En la siguiente imagen se puede ver el tipo de catálogos VSAM -
Catálogo maestro
El catálogo maestro es en sí mismo un archivo que monitorea y administra las operaciones de VSAM. Solo hay un catálogo maestro en cualquier sistema que contiene entradas sobre conjuntos de datos del sistema y conjuntos de datos VSAM. Los conjuntos de datos VSAM y no VSAM pueden tener una entrada en el catálogo maestro, pero esta no es una buena práctica. El catálogo maestro se crea durante el proceso de generación del sistema y reside en el volumen del sistema. El catálogo maestro posee todos los recursos VSAM en el sistema operativo. Todos los archivos utilizados en VSAM están controlados por el catálogo maestro. El catálogo maestro es responsable de las siguientes operaciones:
- Autorización de contraseña para archivos
- Mejorando la seguridad
- Acceso VSAM para archivos
- Gestión de espacio de archivo
- Ubicación del archivo
- Espacio libre disponible en archivo
Cuando cambia cualquiera de los atributos de archivo anteriores, se actualizan automáticamente en el catálogo maestro. El catálogo maestro se define mediante programas IDCAMS.
Catálogo de usuario
El catálogo de usuario tiene la misma estructura y conceptos que el catálogo maestro. Está presente en el siguiente nivel jerárquico después del catálogo maestro. El catálogo de usuarios no es obligatorio en el sistema, pero se utiliza para mejorar la seguridad del sistema VSAM. El catálogo maestro apunta a archivos VSAM, pero si el catálogo de usuario está presente, el catálogo maestro apunta al catálogo de usuario. Los catálogos de usuario pueden ser numerosos según los requisitos del sistema. En la estructura de VSAM, si se elimina el catálogo maestro, no afectará al catálogo de usuarios. El catálogo de usuario contiene entradas sobre conjuntos de datos específicos de la aplicación. La información del catálogo de usuarios se almacena en el catálogo maestro.
Espacio de datos
El espacio de datos es un área del dispositivo de almacenamiento de acceso directo que se asigna exclusivamente para el uso de VSAM. Se debe crear un espacio de datos antes de crear clústeres VSAM. El área ocupada por el espacio de datos se registra en la Tabla de Contenido del Volumen (VTOC), por lo que el espacio no estará disponible para su asignación a ningún otro uso, ya sea VSAM o no VSAM. VTOC tiene entrada de área ocupada por espacio. VSAM crea un espacio de datos para contener las entradas del catálogo de usuarios. VSAM toma el control de este espacio y monitorea y mantiene este espacio según lo necesiten los archivos VSAM.
Clústeres únicos
Los clústeres únicos consisten en un espacio de datos separado que es utilizado completamente por el clúster creado dentro de él. Los clústeres únicos se crean a partir del espacio no asignado en el almacenamiento de acceso directo.
Clústeres subasignados
Un archivo VSAM subasignado comparte el espacio VSAM con otros archivos subasignados. Especifica que el archivo debe subasignarse dentro del espacio VSAM existente. La subasignación se utiliza para facilitar la gestión y el control de los espacios VSAM.
Conjuntos de datos que no son VSAM
Los conjuntos de datos que no son de VSAM residen tanto en cinta como en almacenamiento de acceso directo. Los conjuntos de datos que no son de VSAM pueden tener entradas tanto en el catálogo maestro como en los catálogos de usuario. La función principal de catalogar conjuntos de datos que no son de VSAM es retener la información de serie de unidades y volúmenes.
Mientras trabaja con conjuntos de datos VSAM, puede encontrar terminaciones anómalas. A continuación se muestran los códigos de estado de archivos comunes con su descripción que lo ayudarán a resolver los problemas:
Código | Descripción |
---|---|
00 | La operación se realizó con éxito |
02 | Se encontró una clave duplicada de índice alternativo no único |
04 | Registro de longitud fija no válido |
05 | Mientras realiza OPEN, el archivo y el archivo no está presente |
10 | Fin de archivo encontrado |
14 | Intentó LEER un registro relativo fuera del límite del archivo |
20 | Clave no válida para VSAM KSDS o RRDS |
21 | Error de secuencia al realizar WRITE o al cambiar de clave en REWRITE |
22 | Se encontró la clave principal duplicada |
23 | Registro no encontrado o Archivo no encontrado |
24 | Clave fuera del límite del archivo |
30 | Error de E / S permanente |
34 | Grabar fuera del límite del archivo |
35 | Mientras realiza OPEN, el archivo y el archivo no está presente |
37 | ABRIR archivo con modo incorrecto |
38 | Intenté ABRIR un archivo bloqueado |
39 | OPEN falló debido a atributos de archivo en conflicto |
41 | Intenté ABRIR un archivo que ya está abierto |
42 | Intenté CERRAR un archivo que no está ABIERTO |
43 | Intenté REESCRIBIR sin LEER un registro primero |
44 | Intenté REESCRIBIR un registro de diferente longitud |
46 | Intenté LEER más allá del final del archivo |
47 | Intenté LEER de un archivo que no se abrió IO o INPUT |
48 | Intenté ESCRIBIR en un archivo que no se abrió IO o OUTPUT |
49 | Intenté BORRAR o REESCRIBIR en un archivo que no se abrió IO |
91 | Error de contraseña o autorización |
92 | Error de lógica |
93 | Los recursos no están disponibles |
94 | Registro secuencial no disponible o error OPEN concurrente |
95 | Información de archivo no válida o incompleta |
96 | Sin declaración DD para el archivo |
97 | ABRIR correctamente y verificar la integridad del archivo |
98 | El archivo está bloqueado - OPEN falló |
99 | Registro bloqueado: error en el acceso al registro |