Curso
JCL (Job Control Language)
JCL (Job Control Language) Envía (submit) un trabajo al Sistema Operativo Solicita los dispositivos de entrada o salida Instrucciones para el S.O. En cuanto a planificación de recursos y ejecución de aplicaciones Es un medio de comunicación entre los programas y el S.O. Y el hardware hardware
JCL (Job Control Language) Envía (submit) un trabajo al Sistema Operativo Solicita los dispositivos de entrada o salida Instrucciones para el S.O. En cuanto a planificación de recursos y ejecución de aplicaciones Es un medio de comunicación entre los programas y el S.O. Y el hardware hardware
Proceso interactivo y “batch”
Interactivo (on-line): – El envío de un comando supone una respuesta del ordenador (conversación)
Batch (por lotes): – Se envían un conjunto de comandos y el ordenador responde cuando los ha tratado todos
Estructura de una sentencia JCL //JOBNAME JOB ‘ALBERTO’,MSGCLASS=H,NOTIFY=user
Operación Nombre Identificador
Parámetros
Restricciones del JCL Todas las sentencias comienzan con // Se escriben siempre en mayúsculas Nombre (opcional)
(cols. 1 y 2)
– Comienza en columna 3 – Debe empezar por letra – Se permiten A-Z, 0-9, @, #, $
Operación (JOB, EXEC, DD) – Separado de nombre y operando por al menos un blanco – Comienza antes de col. 17
Operandos (parámetros) – Terminan antes de col. 72 – Se separan por comas (sin blancos entre ellos)
Tipos de parámetros
Posiciónales – Se identifican por su posición – Se separan por comas – Si se omite alguno debe codificarse la coma – Si el parámetro omitido es el último no es necesario codificar la coma
De palabra clave
– Se identifican por la palabra que los define – Pueden ir en cualquier orden Tanto los parámetros posiciónales como los de palabra clave pueden contener subparámetros
Ejemplo: DISP=(NEW,CATLG,KEEP)
Continuación de una sentencia Ninguna sentencia puede exceder la col. 71 Se puede interrumpir una sentencia en cualquier parámetro o subparámetro, después de la coma que lo acompaña La siguiente línea comienza por // y se comienza a escribir entre las col. 4 y 16 (inc.)
//JOBNAME JOB ‘ALBERTO’,MSGCLASS=H,NOTIFY=user
Es equivalente a: //JOBNAME JOB ‘ALBERTO’,
// //
MSGCLASS=H, NOTIFY=user
Comentarios
Líneas completas – Se comienzan por //*
En una línea que contenga parámetros – Se separan de la coma del último parámetro por un blanco – Si la línea se continúa debe haber un carácter no blanco en la columna 72
//* Esto es una línea de comentario completa //JOBNAME JOB ‘ALBERTO’,
// //
MSGCLASS=H, NOTIFY=user esto es un comentario
Sentencias básicas
JOB (1) – Identifica el comienzo de un trabajo
EXEC (1-255) – Identifica un paso (ejecución de un programa o procedimiento)
DD (1-3273) – Identifica a cada uno de los ficheros que se utilizan en cada uno de los pasos
JES ISPF
JES
Iniciador 1 Iniciador 2 Iniciador 3 Clases = A,J,K,L
Clases = A,B,C
Clases = Z,D
SPOOL Colas de Entrada Impresora SPOOL Clase hold
Colas de Salida
Clases = A,X
Sentencia JOB I
Nombre – Se le aplican las restricciones mencionadas anteriormente
Parámetros posiciónales – Información de contabilidad. Propia de cada instalación – Nombre del programador o comentario. Máximo 40 caracteres
Ejemplo:
//JOBNAME JOB (2937,’A@7’),’ALBERTO’
Sentencia JOB II
Parámetros de palabra clave – Control de entrada
CLASS: Clase de entrada. Defecto la clase asignada en la instalación
TYPRUN: – HOLD se almacena en la cola de entrada, para ejecutarse es necesario que sea liberado por el operador – SCAN sólo se comprueba el JCL – Defecto el JOB se ejecuta normalmente
Ejemplo:
//JOBNAME JOB ‘ALBERTO’,CLASS=A,TYPRUN=SCAN
Sentencia JOB III
Control de ejecución I – ADDRSPC: (no utilizado) VIRT el JOB se ejecuta en memoria virtual (defecto) REAL el JOB se ejecuta en memoria real
– TIME: ([minutos][,segundos]) Máxima utilización de CPU por este JOB NOLIMIT no hay limite en la utilización de CPU MAXIMUN es lo mismo que TIME=357912
– PERFORM=grupo de rendimiento – PRTY: prioridad de ejecución
Valor de 0 a 15. 0 = mínima prioridad, 15 = máxima prioridad
Sentencia JOB IV
Control de ejecución II – REGION: tamaño de la memoria El sufijo K indica Kilobytes El sufijo M indica Megabytes El sistema ajusta automáticamente a múltiplos de 4K
– RESTART: nombre de paso, * Indica desde donde debe comenzarse el JOB * Indica que se ejecute desde el principio
Ejemplo:
//JOBNAME JOB ‘ALBERTO’,REGION=8192K,RESTART=PASO30
Sentencia JOB V
Control de salida – NOTIFY=nombre_usuario
El sistema envía un mensaje al usuario indicado cuado termina el JOB
– MSGCLASS=clase_salida (A-Z, 0-9)
Clase a la que se enviaran los mensajes y sentencias de control
– MSGLEVEL=([sentencias][,mensajes])
Sentencias – 0 sólo se imprime la sentencia JOB – 1 se imprimen las sentencias de entrada y la expansión de procedimientos catalogados – 3 sólo se imprimen las sentencias de entrada
Mensajes
– 0 no se imprimen los mensajes de asignación/desaginación – 1 se imprimen los mensajes de asignación/desaginación
//JOBNAME JOB NOTIFY=user,MSGCLASS=H,MSGLEVEL=(1,1)
Sentencia JOB VI A H //JOBNAME JOB CLASS=A,NOTIFY=user,MSGCLASS=H
Iniciador
SPOOL
Clases = X,A
Colas de Salida
Hold Impresora SDSF
Clases = A,X
Sentencia EXEC I
Nombre: – Se le aplican las restricciones mencionadas anteriormente
PGM: – especifica el nombre del programa a ejecutar
PROC: – Especifica el nombre del procedimiento a ejecutar
ACCT: Información contable – Igual a ficha JOB, aunque aquí es de palabra clave
PARM: pasa información al programa //PASO30 EXEC PGM=ALFA,PARM=‘LOAD,UNLOAD’
Sentencia EXEC II
Los siguientes parámetros tienen el mismo significado que en la ficha JOB: ADDRSPC REGION TIME PERFORM DPRTY (PRTY)
Sentencia EXEC III //NOMBRE EXEC PGM=PROGRAM1
Fichero Particionado, Librería o Biblioteca
PROGRAM1
//NOMBRE EXEC PROC=PROC1
Procedimientos //NOMBRE EXEC PROC1
PROC1 //paso1 exec … //file1 dd … //file2 dd …
Códigos de condición
Especifican que el JOB se interrumpa si se cumple la condición COND=((n,op,paso)...[,EVEN][,ONLY]) – N número con el que se comparará el código retorno – Op operación a realizar (GT, GE, LT, LE, EQ, NE) – Paso: nombre del paso cuyo código de retorno se quiere investigar, si no se codifica se investigan todos los pasos anteriores. – EVEN: incluso si algún paso anterior terminó mal – ONLY: sólo si algún paso anterior terminó mal A partir de MVS/ESA v4 se puede utilizar if-endif para controlar los códigos de condición
Sentencia DD La sentencia DD (Data Definition) identifica a cada uno de los ficheros que intervienen en el paso Su nombre, al que se le aplican las restricciones mencionadas anteriormente, debe coincidir con el asignado en el programa Se utiliza para describir los atributos del fichero (nombre, dispositivo, volumen, bloqueo, etc.)
Tipos de Ficheros
In-stream Secuencial Particionado Secuencial (PS) Indexado Relativo Temporales VSAM Impresora
Ficheros in-stream Se incluyen junto al JCL No pueden exceder de 80 columnas Se indica su comienzo por un * Se indica su finalización por /* (cols. 1 y 2) Normalmente se utiliza SYSIN como nombre //SYSIN DD * Ejemplo:
Registro 1 . . Registro n /*
Parámetros Comunes
Comunes a todos los ficheros, excepto in-stream o de impresora DSN o DSNAME identifica al fichero que estamos tratando UNIT identifica el dispositivo (disco, cinta, etc.) VOL o VOLUME identifica el volumen del que estamos hablando DISP disposición del fichero SPACE espacio a asignar (sólo ficheros en disco) DCB (Data Control Block) (Bloque de Control de Datos)
DSN ó DSNAME De 1 a 5 bloques de un máximo de 8 caracteres separados por puntos Normalmente el primer nivel debe ser un nombre “autorizado” A cada uno de los bloques se les aplica las restricciones de nombre Los ficheros temporales comienzan por &&
//FICHERO1 DD DSN=TESTAPP.MOVTO.CONTABLE //FICHERO2 DD DSN=usuario.STOCK.ALMACEN //FICHERO3 DD DSN=&&TEMP
DISP (disposition) Estado del fichero (inicial, fin-ok, fin-ko) Inicial:
– NEW: nuevo (se creará en este paso) – OLD: viejo (ya existe) (uso exclusivo) – SHR: viejo (ya existe) (uso compartido) – MOD: viejo (ya existe) (se añadirán datos)
Fin-ok: (si termina bien)
– CATLG: Catalogado – KEEP: Guardado sin catalogar – PASS: Catalogado para el JOB – DELETE: Borrado – UNCATLG: Descatalogado
Fin-ko: (si termina mal)
– CATLG: Catalogado – KEEP: Guardado sin catalogar – DELETE: Borrado – UNCATLG: Descatalogado
Ubicación de procedimientos //nombre JCLLIB ORDER=(P390A.PROCLIB, …)
P390A.PROCLIB
//NOMBRE EXEC PROC=PROC1
PROC1 //NOMBRE EXEC PROC1
//paso1 exec … //file1 dd … //file2 dd …
SYS1.PROCLIB
//NOMBRE EXEC PROC=PROC1
PROC1 //NOMBRE EXEC PROC1
//paso1 exec … //file1 dd … //file2 dd …
P390A.LOAD
Ubicación de programas PROGRAM1 //JOBLIB DD DSN=P390A.LOAD,DISP=SHR //NOMBRE1 EXEC PGM=PROGRAMA1 //NOMBRE2 EXEC PGM=PROGRAMA2
SYS1.LINKLIB
PROGRAM1 //NOMBRE1 EXEC PGM=PROGRAMA1 //NOMBRE2 EXEC PGM=PROGRAMA2
P390A.LOAD
//NOMBRE1 EXEC PGM=PROGRAMA1 //STEPLIB DD DSN=P390A.LOAD,DISP=SHR
PROGRAM1
//NOMBRE1 EXEC PGM=PROGRAMA1 //STEPLIB DD DSN=P390B.LOAD,DISP=SHR
P390B.LOAD
PROGRAM1
Unit
Especifica la unidad a utilizar para el fichero – UNIT=(nnn,unit_count, DEFER) (no usar) – UNIT=(tipo,P,DEFER) – UNIT=(grupo,,DEFER)
//FICHERO1 DD DSN=F1,DISP=OLD,UNIT=3480 //FICHERO2 DD DSN=F2,DISP=(,KEEP),UNIT=3480 //FICHERO3 DD DSN=F3,DISP=(,KEEP),UNIT=SYSDA
Vol o Volume Especifica el volumen donde se encuentra el fichero Sólo para ficheros nuevos o no catalogados VOL=SER=(nnnnnn ... [,nnnnnn]) VOL=REF=fichero VOL=REF=*.pason
//FICHERO1 DD DSN=F1,DISP=OLD,UNIT=TAPE, // VOL=SER=003276
DCB (Data Control Block)
Subparametros: – RECFM: (Formato de registro)
F (Longitud Fija) V (Longitud Variable) U (Indefinido) FB (Fijo Bloqueado) VB (Variable Bloqueado)
– LRECL: (Longitud del registro) – DSORG: (Data Set Organization)
PS (Secuencial) IS (Secuencial Indexado) PO (Particionado)
– KEYLEN: (Longitud de la clave) – BLKSIZE: (Longitud del bloque) A partir de MVS/ESA se pueden codificar como parámetros fuera de la DCB
Cilindro y pista Pista (trk)
Cilindro (cyl)
Space
SPACE=(tipo,(p,s,d),RLSE,CONTIG) – Tipo: TRK CYL Longitud de bloque
– P Cantidad primaria – S Cantidad secundaria – D Bloques de directorio (256) (sólo PO) – RLSE (liberar espacio sobrante) – CONTIG (contiguo)
Data definition (DD) //NOMBRE EXEC PGM=PROGRAM1
PROGRAM1 OPEN entrada1 OPEN salida1 OPEN entrada2
//entrada1 DD DSN=fichero.entrada,DISP=SHR c
DISCO2
DISCO3
Catálogo
Fichero.entrada VTOC
A //salida1 DD SYSOUT=A //entrada2 DD * dato1 dato2 …
/*
Impresora SPOOL Colas de Salida
Clases = A,X
Ejercicios I 1. Realizar y ejecutar un JOB que cree y catalogue un fichero llamado userid.primero.texto de longitud 80 2. Realizar y ejecutar un JOB que rellene el fichero anterior con registros numerados del 01 al 50 en sus dos primeras posiciones 3. Descatalogar el fichero anterior 4. Borrar el fichero anterior
Programas de Utilidad I IEFBR14 crear, catalogar y borrar ficheros Los ficheros se crean, catalogan o borran dependiendo de lo que indiquemos en el parámetro DISP de la sentencia DD Se pueden colocar cualquier número de DD‟s y con cualquier nombre
//PASO01 EXEC PGM=IEFBR14 //DD1 DD DSN=F1,DISP=(OLD,DELETE) //DD2 DD DSN=F2,DISP=(,CATLG,DELETE), // UNIT=DISK,VOL=SER=DSK0001, // DCB(RECFM=FB,LRECL=80,BLKSIZE=2400)
Procedimientos catalogados I
In-stream – Entre las sentencias PROC y PEND – No pueden estar anidados
Del sistema – Incluidos en SYS1.PROCLIB u otra librería de procedimientos
Pueden incluir variables simbólicas En la llamada se puede modificar el valor de las variables simbólicas, de algún parámetro o incluirse alguna DD inexistente
Procedimientos catalogados II //TESTPROC PROC A=IMB406,B=ABLE,C=3330,D=WXYZ1, // E=OLD,F=TRK,G='10,10,1' //STEP EXEC PGM=&A //DD1 DD DSNAME=&B,UNIT=&C,VOLUME=SER=&D,DISP=&E, // SPACE=(&F,(&G)) // PEND //LLAMADA EXEC PROC=TESTPROC,A=IEFBR14, // B=BAKER,E=(NEW,KEEP) //STEP EXEC PGM=IEFBR14 //DD1 DD DSNAME=BAKER,UNIT=3330,VOLUME=SER=WXYZ1, // DISP=(NEW,KEEP),SPACE=(TRK,(10,10,1))
Backward References //STEP EXEC PGM=IEFBR14 //DD1 DD DSNAME=FILE01,UNIT=3390, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(10,10,1)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000) //* //STEP2 EXEC PGM=IEBGENER //SYSUT1 DSNAME=*.STEP.DD1,DISP=SHR //SYSUT2 DSNAME=FILE02,REFDD=*.STEP.DD1 //…
//STEP3 EXEC PGM=IEBGENER //SYSUT1 DSNAME=*.STEP.DD1,DISP=SHR //SYSUT2 DSNAME=FILE03,UNIT=3390, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(10,10,1)), // DCB=*.STEP.DD1 //…
Sustitución en procedimientos //TESTPROC PROC C=A //STEP EXEC PGM=IEBGENER //SYSUT1 DD DSN=FILE01,DISP=SHR //SYSUT2 DD DSN=FILE02,DISP=(,CATLG,DELETE), // UNIT=SYSDA,SPACE=(TRK,(1,1)) //SYSPRINT DD SYSOUT=&C //SYSIN DD DUMMY // PEND //LLAMADA EXEC PROC=TESTPROC,C=HP) //STEP.SYSIN DD * GENERATE … RECORD FIELD …
//STEP.SYSUT2 DD SPACE=(CYL,(10,20),RLSE)
Concatenación de ficheros Unión de varios ficheros formando un único fichero lógico Los ficheros deben ser secuenciales y del mismo tipo (RECFM) La longitud de registro de todos los ficheros debe ser igual Si hay distintas longitudes de bloque (BLKSIZE) el más grande debe ir primero Sólo para ficheros de entrada
//FICHERO1 DD DSN=F1,DISP=OLD // DD DSN=F2,DISP=OLD
Ficheros sin etiqueta Normalmente los ficheros llevan asociada una etiqueta, donde se almacenan sus características En algunos casos no es recomendable el uso de etiquetas Los ficheros sin etiquetas debe estar en cinta o cartucho Para acceder a un fichero sin etiquetas codificaremos LABEL=(n,NL)
– N es el número del fichero en la cinta – NL indica que es un fichero sin etiquetas
Será nuestra responsabilidad indicar las características del fichero
Ficheros Temporales Sólo están “vivos” durante la ejecución del JOB Su nombre comienza por && y no pueden exceder los 8 caracteres Normalmente su disposition será DELETE o PASS Recomendables para las pruebas No puede investigarse su contenido una vez ha terminado el JOB
Ficheros ficticios
Se utilizan cuando: – No nos interesa un fichero salida de un programa, pero no queremos modificar el programa – Nos interesa que el programa considere que el fichero de entrada está vacío
Se indican de dos formas: – Con el parámetro posicional DUMMY – Con DSN=NULLFILE //FICHERO1 DD DUMMY,BLKSIZE=32000 //FICHERO2 DD DSN=NULLFILE,DISP=OLD
Grupos de Generación I Podemos considerar los grupos de generación como un fichero con distintas versiones Todas las versiones deben estar catalogadas El formato (tipo y longitud) de todos los ficheros debe ser el mismo Se usan para garantizar la seguridad de los datos Tienen un nombre específico
Grupos de Generación II
Nombres: – Absoluto: Nombre fichero (máx. 35 caracteres) Gnnnn Nº de generación (asignado por el sistema) Vnn Nº de versión (asignado por el sistema)
– Relativo: Nombre fichero (máx. 35 caracteres) (0), (+1), (-2), etc
Antes de utilizar un grupo de generación es necesario definirlo (IDCAMS, IEHPROGM) Los nombres relativos se consolidan a final de JOB
Ficheros de impresión
Se identifican por el parámetro posicional SYSOUT=(n,form) – N: es la clase de salida o *, en cuyo caso se tomará la clase especificada en el MSGCLASS de la ficha JOB – Form: es código del formulario a utilizar
Parámetros adicionales – COPIES: Nº de copias – DEST: Identificación de la impresora – FCB: Identificación programa impresora – UCS: Juego de caracteres
Campos decimales y empaquetados Representación Interna: 1 byte (carácter) = 8 bits A =
1
1
0
0
0
0
C
6 =
1
1
1
1
1
0
1 1
1
0
F
+
0
1 6
2
8
9
7
F 1 F 2 F 8 F 9 F 7 Al realizar una operación
Campos decimales y empaquetados Representación Interna: 1 byte (carácter) = 8 bits A =
1
1
0
0
0
0
C
6 =
1
1
1
1
1
0
1 1
1
0
F
+
0
1 6
2
8
9
7
F 1 F 2 F 8 F 9 C 7 Si el campo es negativo
Campos decimales y empaquetados Representación Interna: 1 byte (carácter) = 8 bits A =
1
1
0
0
0
0
C
6 =
1
1
1
1
1
0
1 1
1
0
F
-
0
1 6
2
8
9
7
F 1 F 2 F 8 F 9 D 7 Formato empaquetado
Campos decimales y empaquetados -
1
2
8
Decimal
9
7
Empaquetado
F 1 F 2 F 8 F 9 D 7
1 2 8 9 7 D
5 octetos
3 octetos
-
1
2
8
9
7
6
Decimal
F 1 F 2 F 8 F 9 F 7 D 6 6 octetos
Empaquetado
0 1 2 8 9 7 6 D 4 octetos
Programas de Utilidad II Copia ficheros manipulándolos Sentencias de control:
– Entrada: SYSUT1 Puede prefijarse con X – Salida: SYSUT2 PZ – Empaquetado Empaquetado a decimal – Mensajes: SYSPRINT ZP – Decimal Decimal a empaquetado – Control: SYSIN EXITS, LABELS, MEMBERS RECORD
Debe ir la primera
– [IDENT=(long.,'name ‘,pos.)] – [RECORD [FIELD=(long.in,pos.in|‘literal‘,conv.,pos. out)]]
... ] GENERATE [MAXLITS=máx.] , [MAXFLDS=máx]
Ejercicios II 1. El fichero P390.empl.texto tiene la siguiente estructura:
Pos. 1 a 5 Número Pos. 6 a 30 Nombre Pos. 31 a 80 Apellidos Pos. 81 a 87 Salario (decimal ( decimal con zonas)
2. Queremos obtener el fichero P390?.empl.textomod: P390?.empl.textomod:
Pos. 1 a 5 Número Pos 6 a 8 Siglas “Sr.” en todos los registros Pos. 9 a 33 Nombre Pos. 34 a 83 Apellidos Pos. 84 a 87 Salario (empaquetado) ( empaquetado)
Programas de Utilidad III Creación de ficheros Sentencias de control:
: cualquier nombre apuntando al disco donde se encuentren los ficheros – : SYSPRINT – : SYSIN –
DSNAME=nombre,VOL=device DSNAME=nombre DSNAME=nombre,VOL=device
DSNAME=nombre,VOL=device,NEWNAME=nombre INDEX=nombre,ENTRIES=n,EMPTY
Programas de Utilidad IV
Comprar ficheros Copiar ficheros Generar datos de prueba Editar JCL Mantiene carátulas impresora manejo de ficheros ISAM Imprimir ficheros Modificar ficheros Inicializar cintas Listar información s/ ficheros particionados
SORT
Clasificación de ficheros Entrada: SORTIN Salida: SORTOUT Control: SYSIN – ALTSEQ CODE=(oorr, ... ) COND=(condición ) – cambia formato antes proceso – COND=(condición ) – FNAMES=nombre,include – – OUTREC cambia formato después proceso – SORT FIELDS(p,l,f,[A|D], …) – SUM FIELDS(p,l,f)
Trabajo: SORTWK01 a SORTWK)) – Sólo especificar UNIT y SPACE
SORT
Clasificación de ficheros Entrada: SORTIN Salida: SORTOUT Control: SYSIN
Oo – valor hexadecimal origen Rr – valor hexadecimal a considerar
– ALTSEQ CODE=(oorr, ... ) COND=(condición ) – cambia formato antes proceso – COND=(condición ) – FNAMES=nombre,include – – OUTREC cambia formato después proceso – SORT FIELDS(p,l,f,[A|D]) – SUM FIELDS(p,l,f)
Trabajo: SORTWK01 a SORTWK)) – Sólo especificar UNIT y SPACE
SORT
P1,l1,f1,[EQ|NE |GT |GE |LT |LE],[c„literal‟|p2,l2,f2], [AND|OR] ...
F1 Y F2 [CH|ZD|PD|BI]
Clasificación de ficheros Entrada: SORTIN Salida: SORTOUT Control: SYSIN – ALTSEQ CODE=(oorr, ... ) COND=(condición ) – cambia formato antes proceso – COND=(condición ) – FNAMES=nombre,include – – OUTREC cambia formato después proceso – SORT FIELDS(p,l,f,[A|D] …) A = Ascendente D = Descendente – SUM FIELDS(p,l,f)
Trabajo: SORTWK01 a SORTWK)) – Sólo especificar UNIT y SPACE
SORT (OUTFIL)
OUTFIL permite definir los dnames de los ficheros de salida A cada ddname se le pueden asignar una condición distinta //PASO1
EXEC PGM=SORT
//SORTIN
DD DSN=P39OX.ENTRADA,DISP=SHR
//AES
DD DSN=P390X.AES,DISP=(,CATLG,DELETE), …
//BES
DD DSN=P390X.BES,DISP=(,CATLG,DELETE), …
//RESTO
DD DSN=P390X.RESTO,DISP=(,CATLG,DELETE), …
//SYSIN
DD *
OUTFIL INCLUDE=(1,1,CH,EQ,C‘A'),FNAMES=AES OUTFIL INCLUDE=(1,1,CH,EQ,C‘B'),FNAMES=BES
OUTFIL SAVE,FNAMES=RESTO SORT FIELDS=(1,1,CH,A) /*
Ejercicios III 1. El fichero user.PEDIDOS.ALMACEN tiene la siguiente estructura:
Pos. 1 a 1 Código (C=Cabecera, L=Línea) Pos. 2 a 6 Número de pedido Pos. 7 a 11 Número de cliente Para las cabeceras:
Pos. 12 a 41 Nombre del cliente
Para las líneas:
Pos. 12 a 21 Código de Artículo Pos. 22 a 26 Cantidad Pedida (empaquetado)
Ejercicios III
Se quiere: 1. Obtener el fichero user.PEDIDOS.LINEAS que sólo tendrá las líneas de pedido, ordenadas por: Artículo y Cliente (número). 2. Obtener el fichero user.ARTICULO.PEDIDOS que debe tener una línea por artículo con el total de las cantidades pedidas
Ejercicios IV
El fichero P390.EJERIV.DATA contiene los siguientes datos
Número empleado long. 5 caracteres Nombre long. 15 caracteres Domicilio long. 20 caracteres Salario long. 7 caracteres numéricos (sin empaquetar)
Obtener el fichero P390?.EJERIV.DATA con la
siguiente información:
Nombre long. 15 caracteres Salario long. 7 caracteres numéricos (empaquetados) ocupa 4 Domicilio long. 20 caracteres Número empleado long. 5 caracteres
Si el paso de transformación no termina con código cero borrar el fichero de salida
VSAM (Virtual Storage Acces Metod)
Tipos de organización: – KSDS (Key-sequenced Data Set) – ESDS (Entry-sequenced Data Set) – RRDS (Relative-record DataSet) – VRDS (Variable Relative-record DataSet)
KSDS (más utilizados) – Contienen un área de datos y otra de indices – Cada área es un fichero independiente – Cluster: nombre que agrupa las dos áreas – Acceso en secuencia o por clave – Borrados físicos
Organización VSAM Catálogo
Programa Leer
Registro lógico
Método de acceso VSAM
RLRL Intervalo de control
KSDS ESDS RRDS
VSAM KSDS 32
43
67
75
EL
Índice
23
28
30
32
33
35
40
43
47
52
56
67
68
70
75
Intervalos de Control (Datos)
Índice Nombre Apellidos Número empleado Campo clave
Categoría …
Catálogos Catálogo Maestro
Catálogo Usuario
Catálogo Usuario
Fichero7
Fichero1
Fichero2 Fichero3
Catálogo Usuario
Catálogo Usuario
Fichero8
Fichero9
Fichero4 Fichero5
Fichero1
Alias CATUSER1 Catálogo Maestro Alias Pagos CATUSER1 Alias BE18 Alias BE05 Alias BE25 CURSOS
Pagos.a11 Pagos.B22 Pagos.C33
CURSOS BE18.user1 BE18.user2 BE05.jcl BE05.vsam
DISCOS Pagos.B22 Pagos.a11 BE18.user1 BE05.jcl
Comandos IDCAMS I
ALTER : Modifica las características de un catálogo definido previamente
fichero no
: Construye índices para ficheros existentes : Convierte una en un catálogo : Define un nombre alternativo para uno
: Define un índice alternativo
: Define un “cluster” (data + index)
de generación
: Define un grupo
: Define un fichero no DEFINE PAGESPACE: Define un fichero PAGE SPACE (paginación)
Comandos IDCAMS II
: Define un enlace entre un cluster y un índice alternativo : Define un espacio VSAM : Define un catálogo : borra catálogos y ficheros VSAM y no VSAM : Informa de la consistencia de índices y datos en un KSDS : Exporta un cluster o índice alternativo EXPORT DISCONNECT: Desconecta un catálogo de su catálogo maestro
: Recupera entradas del catálogo, si se definió como recuperable IMPORT: Importaun cluster o índice alternativo
Comandos IDCAMS III
IMPORT CONNECT Conecta un catálogo de usuario IMPORTRA: Restaura entradas del catálogo, si se definió como recuperable LISTCAT: Lista entradas del catálogo LISTCRA: Lista o compara entradas del área de recuperación del catálogo, si se definió como recuperable PRINT: Lista catálogos y ficheros VSAM y no VSAM REPRO: Copia ficheros VSAM y no VSAM, descarga y carga catálogos RESETCAT: Compara entradas del catálogo con entradas de recuperación, si se definió como recuperable VERIFY Verifica el cierre correcto del fichero
Define Cluster DEFINE CLUSTER(parámetros) [DATA(parámetros)] [INDEX(parámetros)] [CATALOG(parámetros)]
Parámetros obligatorios: (NAME(nombre) – CYLINDERS|RECORDS|TRACKS(p,s) – VOLUMES(vol1, ...) )
Parámetros opcionales: CONTROLINERVALSIZE(n) -
ERASE|NOERASE FREESPACE(CI% [CA%]) KEYS(length offset ) RECORDSIZE(average maximum |default ) SHAREOPTIONS(crossregion [ crosssystem ]|1 3 )
Define GenerationDataGroup DEFINE GENERATIONDATAGROUP( parámetros) Parámetros obligatorios: (NAME(nombre) – LIMIT(n) 1:255
Parámetros opcionales: EMPTY|NOEMPTY OWNER(ownerid) SCRATCH| NOSCRATCH
Define AlternateIndex DEFINE ALTERNATEINDEX( parámetros) Parámetros obligatorios: Igual que para CLUSTER
Parámetros opcionales: Igual que en CLUSTER más RELATE(cluster-name ) UNIQUEKEY|NONUNIQUEKEY
Define Path DEFINE PATH( parámetros) Parámetros obligatorios: (NAME(nombre) – PATHENTRY(entryname ) )
Parámetros opcionales: OWNER(ownerid ) UPDATE|NOUPDATE
Delete DELETE( parámetros) Parámetros obligatorios: (NAME(nombre) )
Parámetros opcionales: ALIAS|ALTERNATEINDEX|CLUSTER| GENERATIONDATAGROUP| NONVSAM|PAGESPACE|PATH|SPACE|USERCATALOG ERASE|NOERASE FORCE|NOFORCE PURGE|NOPURGE SCRATCH|NOSCRATCH
Listcat LISTCAT( parámetros) Parámetros opcionales: [ALIAS][ALTERNATEINDEX][CLUSTER][DATA] [GENERATIONDATAGROUP][INDEX][NONVSAM] [PAGESPACE][PATH][SPACE][USERCATALOG]
CREATION(days ) ENTRIES([entryname [ entry name ]...][LEVEL(level )]) NAME |HISTORY|VOLUME|ALLOCATION|ALL NOTUSABLE
Print PRINT( parámetros) Parámetros obligatorios: INFILE(ddname ) | INDATASET(entryname ) Parámetros opcionales: CHARACTER|DUMP|HEX FROMKEY(key ) | FROMADDRESS(address ) | FROMNUMBER(number ) | SKIP(number) TOKEY(key ) | TOADDRESS(address ) | TONUMBER(number ) | COUNT(number )
Repro REPRO parámetros Parámetros obligatorios: INFILE(ddname ) | INDATASET(entryname ) OUTFILE(ddname ) | OUTDATASET(entryname ) Parámetros opcionales: CHARACTER|DUMP|HEX FROMKEY(key ) | FROMADDRESS(address ) | FROMNUMBER(number ) | SKIP(number) TOKEY(key ) | TOADDRESS(address ) | TONUMBER(number ) | COUNT(number ) REPLACE|NOREPLACE
Verify VERIFY( parámetros) Parámetros obligatorios: FILE(ddname ) | DATASET(entryname )