zos Operational System Z Índice Página Arquivo nativos do zos 2 Cartões de um JCL 3 Catalogo de Arquivos 2 Copiando um VSAM 11 Criação de um JOB 2 Criando um vsam ESDS 12 Criando um vsam KSDS 9 Criando um vsam RRDS 13 Imprimindo um VSAM 12 JOB Cartão de controle do trabalho 3 Layout do JCL 3 O que é o zos 1 STEP001 Deleção de arquivos 4 STEP002 Criação de arquivos 5 STEP003 Classificação de arquivos 7 Student Guide
O que é o zos 1 2 Arquivo nativos do zos z/os é um SO de 64 bits para mainframes, criado pela IBM. É o sucessor do OS/390, o qual, por sua vez, combinou o MVS e o UNIX System Services (uma implementação Unix POSIX-aderente para mainframes, anteriormente conhecida como MVS Open Edition ou OpenMVS). O z/os oferece muitos dos atributos de outros sistemas operacionais modernos, mas também conserva muito da funcionalidade originada nos anos 1970 e anos 1960, que frequentemente ainda estão em uso cotidiano. Isto inclui CICS, IMS, DB2, RACF e SNA. O z/os também executa Java de 64 bits, suporta APIs e aplicativos UNIX (Single UNIX Specification) e comunica-se diretamente com o [[Internet protocol suite TCP/IP. Um sistema operacional complementar IBM, z/vm, fornece o gerenciamento de sistemas virtuais múltiplos ("guests") no mesmo mainframe físico. Estas novas funções no z/os e z/vm, e o suporte ao Linux, tem encorajado o desenvolvimento de novos aplicativos para mainframes. Muitos deles utilizam o WebSphere Application Server para middleware z/os. A partir de 1 de abril de 2007, o z/os passou a ter suporte somente em mainframes de 64 bits (z/architecture). O z/os V1R5 foi a última versão a dar suporte ao ESA/390, uma arquitetura de hardware anterior com endereçamento de 31 bits. Aplicativos antigos ainda são suportados na mesma forma binária, usem eles 31 bits ou mesmo endereçamento de 24 bits. A IBM comercializa o z/os como um sistema operacional destacado [1], talhado para operações contínuas, de grande volume, com elevada segurança e estabilidade. Uma versão de baixo custo do z/os, z/os.e, possui código idêntico mas é processado com uma configuração de inicialização que impede a execução de tarefas "clássicas", tais como os compiladores COBOL e PL/I. O z/os.e era disponibilizado para os mainframes IBM z800, z890 e z9 BC, mas foi encerrado com a versão V1.8 e retirado de mercado em outubro de 2007. [2] Foi substituído pelo System z New Application License Charges (znalc), o qual oferece um z/os completo e mais barato, se usado para servir novos aplicativos ("new workloads") Importante: Neste manual veremos somente alguns utilitários e seus parâmetros, mais usados pelos programadores mainframe, pois os utilitários do zos são vários e diversificados para mais conhecimentos consulte no site da IBM o tópico IBM MANUALS. O ZOS pode ter vários tipos de arquivos, no nosso curso abordaremos 3 tipos de arquivos:. Tipo s de Arquivos 1) Particionado : São arquivos que contém membros (também chamados PDS), que podem ser: parâmetros do sistema, parâmetros de programa, programas fonte, jobs, etc. 2) Sequencial: Os dados são acessados de maneira sequencial, registro após registro, podendo ser os registros de dados de tamanho fixo ou variável. 3) Indexado: Arquivo de estrutura indexada, contendo uma área de controle, área de índices e uma área de dados. No caso do ZOS o arquivo usado é VSAM. Catalogo de Arquivos O catálogo é o endereçamento dos volumes para que possamos acessar um arquivo, este endereçamento está dividido em níveis, o primeiro nível (catálogo) apontará em que volume se encontra o arquivo que desejamos acessar, o segundo nível (VTOC) indicará qual será o endereço físico do arquivo. Existe o catálogo mestre que conterá a definição dos catálogos de sistema, no catálogo de sistema são definidos os prefixos dos arquivos que serão controlados por ele. A cada encerramento de um aplicativo que crie ou exclua um arquivo o catálogo é atualizado. LEGENDA Catálogo: Volume: VTOC: Lista de endereço Meio físico de armazenagem de dados (Disco) Volume Table of Contains (Tabela de conteúdo de volumes) Criação de um JOB Para criar um JOB no ambiente mainframe é necessário a codificação de uma linguagem chamada JCL, que é uma linguagem de programação necessária para gerar qualquer trabalho dentro do mainframe, que pode ser uma geração de um arquivo, execução de um programa, entre outros.
3 4 Cartões de um JCL Um JCL possui 3 diferentes tipos de cartões, onde cada um deles possui uma função específica dentro do JOB. Os cartões são: JOB EXEC DD Define o início da codificação do JCL, bem como sua parametrização. Executa um programa ou um utilitário do sistema operacional. Define uma entrada ou saída de sistema. Layout do JCL O JCL possui um layout específico para sua programação, e este deve ser respeitado durante toda a sua codificação. Coluna 01 a 02 : // Coluna 03 a 09 : Nome do procedimento, que pode ser o nome do JOB, do STEP ou da entrada e saída de informações Coluna 12 a 16 : Tipo de cartão, que pode ser JOB, EXEC ou DD Coluna 17 a 72 : Área de comandos Uma linha de comentário é assinalada por / nas 3 primeiras colunas. Para continuar uma linha em um JCL, devemos inserir uma, (vírgula) no último parâmetro informado, inserir // nas 2 primeiras colunas da linha posterior e continuar com os comando à partir da coluna 12 (abaixo do cartão). JOB Cartão de controle do trabalho //USERXXXX JOB 'ALUNO',CLASS=C,TIME=1,REGION=2048K,NOTIFY=&SYSUID USERXXX: É o nome do job, deverá ter até 8 caracteres, sempre começando com uma letra. JOB: Tipo do cartão de comando, indica as características do serviço ALUNO: Obrigatório, identifica o responsável pelo JOB CLASS: Define a classe que será executado o JOB na fila do JES, esta classe varia por instalação. TIME: Tempo em segundos de CPU, não obrigatório, mas é recomendado informar, pois se algum programa do job estiver em loop infinito, este terá um determinado tempo de execução em minutos. REGION: Alocação de memória necessária para processar este JOB, não é obrigatório. NOTIFY: Envia mensagem de término de execução do JOB para o usuário que o enviou (&SYSUID). / --------------------------------------------------------------------* //STEP001 EXEC PGM=IEFBR14 //DD01 DD DSN=MFS.USER.CADALUNO.SEQ,DISP=(MOD,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE) //DD02 DD DSN=MFS.USER.CADALUNO.SRT1,DISP=(MOD,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE) STEP001 Deleção de arquivos O JOB é formado por uma ou várias chamadas de programas (cartão EXEC), para cada cartão EXEC coloca-se um nome do stepname. EXEC: Tipo do cartão de comando, indica qual o programa ou utilitário que será executado PGM: Indicador de programa ou utilitário que será executado neste step. verificar a execução do job em nosso terminal. IEFBR14: Manutenção de arquivos sequenciais O IEFBR14 não executa nenhuma instrução, apenas solicita ao JES2 realizar as ações do DISP dos arquivos assinalados. SYSPRINT: Os relatórios serão direcionados para o sistema de impressão. DD SYSOUT=* Indica que a SYSPRINT será direcionada para o dispositivo de saída do JOB,, A SYSOUT (Sistema de saída) é o spool de relatórios. SYSOUT: As mensagens de controle do JOB terá o mesmo destino da SYSPRINT. DD01, DD02: Arquivos a serem excluídos dos volumes indicados DSN: Nome do arquivo que o utilitário/programa fará uso, na nossa instalação o padrão é: MFS.USER.XXXXXXXX.XXXXXXXX, onde XXXXXXXX será a extensão dos arquivos. DISP: Status do arquivo para o sistema operacional. Os status são agrupados em até três parâmetros para cada DSN.
5 6 OLD: Significa que o arquivo já existe e que o aplicativo exige exclusividade na leitura. NEW: Arquivo novo a ser criado no step em que ele se referência. MOD: Se o arquivo existir, o sistema operacional usará o existente, se não existir será criado um novo, conforme parâmetros de criação do arquivo. Ação a ser tomada no STEP no caso de término normal e anormal respectivamente. CATLG: Cataloga o arquivo esta opção deve estar sempre acompanhada de NEW no primeiro parâmetro. UNCATLG : Descataloga o arquivo (retira da VTOC). DELETE: Deleta o arquivo. KEEP: Mantenha o arquivo como estava antes da execução UNIT: Especifica o tipo de dispositivo onde será criado o arquivo VOL=SER: Volume onde será lido ou gravado o arquivo SPACE: Espaço a ser utilizado pelo arquivo TRK: Espaço reservado em trilhas, mas pode ser em REC(Registros) ou CYL(Cilindros). Os números a seguir são: Alocação principal (2) e alocação secundária(1), isto é, se as trilhas principais não comportarem os dados, as alocações secundária serão utilizadas. OBS: Um CYL contem várias TRKs que contem vários RECs RLSE: Libera as áreas de alocação que não forem usadas após a criação do arquivo. ICEGENER: Utilitário para cópia de arquivos. COND: Condição de execução do step, podemos vincular a execução do step corrente com as condições de término do steps anteriores: (0,NE) = Não será executado se o step anterior terminar com RC>0 (8,LT) = Será executado se o step anterior terminar com RC<8 (0,GT) =: Será executado se o step anterior terminar com RC>0 (8,EQ) = Será executado se o step anterior terminar com RC=8 (EVEN) = Será executado mesmo se o step anterior terminar com RC>0 (ONLY) = Executa somente se algum step tenha terminado com RC=0 SYSUT1: Indica o arquivo que será de entrada para o ICEGENER OBS: DD * indicará que o arquivo de entrada estará no próprio JOB logo abaixo do parâmetro. SYSUT2: Indicará o arquivo que será criado com os dados do arquivo de entrada (SYSUT1) DCB: Define os parâmetros do arquivo a ser criado (Definition Control Block) LRECL = Tamanho do registro RECFM = Formato do registro (F=Fixo, V=Variável FB=Fixo blocado VB = Variável blocado) BLKSIZE = Tamanho do bloco, será colocado o tamanho referente ao número de registros vezes o tamanho do mesmo, normalmente deixamos que o sistema operacional calcule, informando zero no tamanho do bloco. STEP002 Criação de arquivos / --------------------------------------------------------------------* //STEP002 EXEC PGM=ICEGENER,COND=(0,NE) //SYSUT1 DD * 00001JOAO DE BARRO FILHO 01/01/1977D 00002JOSE DE ALMEIDA 19/01/1965D 00003ANTONIO SOUZA LIMA 02/03/1978C 00004ELEONOR DE CASTRO 05/07/1954B 00005RIVALDO DOS SANTOS 07/09/1967E //SYSUT2 DD DSN=MFS.USER.CADALUNO.SEQ,DISP=(,CATLG,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE), // DCB=(LRECL=80,RECFM=FB,BLKSIZE=0
STEP003 Classificação de arquivos / --------------------------------------------------------------------* //STEP003 EXEC PGM=SORT,COND=(0,NE) //SORTIN DD DSN=MFS.USER.CADALUNO.SEQ,DISP=SHR //SORTOUT DD DSN=MFS.USER.CADALUNO.SRT1,DISP=(,CATLG,DELETE), // UNIT=3390,VOL=SER=TURMA?,SPACE=(TRK,(2,1),RLSE), // DCB=(LRECL=80,RECFM=FB,BLKSIZE=0) SORT FIELDS=(06,35,BI,A) OMIT COND=(06,04,CH,EQ,C JOSE ) SORT: Utilitário de classificação de arquivos, este programa é um utilitário que classifica os arquivos, seja sequenciais ou indexados SORTIN: Indica o arquivo que será classificado (entrada) SORTOUT: Indica o arquivo que será o resultado da classificação (saída) SORT FIELDS: Campos no registro de entrada que serão referências para a classificação, os parâmetros auxiliares que compõem este parâmetro são: (06,35,BI,A). Onde: 06 = Posição inicial do campo 35 = Tamanho do campo BI = Tipo do campo que podem assumir os valores: BI = Binário, PK= Decimal Compactado, ZD = Decimal zonado, CH = Caráter A = Tipo de ordenação que podem assumir os valores: A = Ascendente e D = Descendente OMIT COND: Serão omitidos os registros na entrada que estiverem nas condições especificadas no parâmetro auxiliar (06,04,CH,EQ,C JOSE ) onde: 06 = Posição inicial do campo 04 = Tamanho do campo CH = Tipo do campo EQ = Tipo de comparação: LT = Menor que, GT = Maior que, EQ = Igual, LE = Menor/Igual, GE = Maior/Igual C = Indica qual a comparação que será feita, neste caso com JOSE 7 8 INCLUDE COND: Serão incluídos os registros na entrada que estiverem nas condições especificadas no parâmetro auxiliar IMPORTANTE No parâmetro SORT FIELDS podemos usar vários campos para classificação. Ex:(Pos1, Tam1,Tip1,Ord1, Pos2,Tam2,Tip2,Ord2,...) No parâmetro INCLUDE e OMIT COND podemos usar os conectores OR, AND para concatenar duas ou mais condições. Ex: Pos1,Tam1,Tip1,Com1,C Arg1,OR,Pos2,Tam2,Tip2,Com2,C Arg2, AND,Pos3,Tam3,Tip3,Com3,Arg3). DEFINIÇÃO DE VSAM O VSAM é um método de acesso à que combina os índices e os dados separadamente, podemos acessar de várias maneiras possíveis os dados nele contidos, para isso podemos definir índices primários, alternados e até chaves compostas para um arquivo VSAM. Todo arquivo VSAM é controlado pela MASTER CATALOG, que controla os acessos aos arquivos.um VSAM é formado por CLUSTER, DADOS e ÍNDICES. CLUSTER é a combinação da área de dados com a área de índices separadamente, o controle dos dados e índices ficam a cargo do CLUSTER. TIPOS DE ARQUIVOS Existem 3 tipos de arquivos VSAM, o KSDS, ESDS e o RRDS. Veremos a seguir as definições de cada um deles: KSDS Key Sequential Data Set, é o mais conhecido e utilizado, sua arquitetura consiste em uma área de dados e uma área de índices, onde uma chave aponta para chave anterior e próxima, este arquivo pode ser acessado tanto direto pela chave quanto sequencialmente, mas neste caso o acesso seguirá a ordem da chave principal. ESDS Entry Sequential Data Set, ele é tratado como um arquivo sequencial que obedece a ordem de entrada de dados, mas possui uma área de índices que é chamada de RBA (Relative Byte Adress). Os programas CICS podem acessar pelo RBA como se fossem chaves, o mesmo não se dá com os programas BATCH. RBA É o endereço físico aonde se encontra o registro no dispositivo de armazenagem.
9 10 RRDS Relative Record Data Set, os dados são gravados ordinalmente ao começo do arquivo, dando um conceito de células que vão sendo preenchidas à medida que vão sendo gravados os registros, podendo ser acessado sequencialmente ou aleatório informando o número de ordem do registro. Criando um vsam KSDS Para criarmos um arquivo VSAM indexado (KSDS) devemos indicar para o IDCAMS vários parâmetros de criação, tais como: tamanho, chave, área de dados, área de índices entre outros. Veja o exemplo abaixo: //USERXXXX JOB ALUNO',CLASS=C,MSGCLASS=X,TIME=1,NOTIFY=&SYSUID /-------------------------------------------------------------* / DELETANDO E DEFININDO UM KSDS * /-------------------------------------------------------------* //STEP001 EXEC PGM=IDCAMS DELETE MFS.USER.ALUNOS.KSDS PURGE CLUSTER IF MAXCC = 8 THEN SET MAXCC = 0 DEFINE CLUSTER - (NAME (MFS.USER.CADALUNO.KSDS) - VOL (TURMA?) TRK (2,1) RECORDSIZE (80,80) - KEY (5,0) FREESPACE (10,5) SHAREOPTIONS (2,3)) - INDEX (NAME (MFS.USER.CADALUNO.INDEX)) - DATA (NAME (MFS.USER.CADALUNO.DATA)) Trilhas primárias: Local principal de armazenagem dos dados Trilhas secundárias: Local secundário de armazenagem de dados podendo estender até 23 vezes. Podemos alocar espaços também em cilindros (CYL), registros (REC). RECORDSIZE: Tamanho mínimo e máximo do registro. KEY: Tamanho da chave e posição relativa inicial, onde 0 é equivalente a 1 na posição física da chave. FREESPACE: Espaço livre na CONTROL-AREA e CONTROL-INTERVAL, pois se aumentarmos o tamanho do registro ou o número de registros no bloco, o VSAM não será fragmentado. SHR: Controle de compartilhamento de arquivos entre os serviços executados simultaneamente, onde a segunda opção (3) é o compartilhamento do serviço (JOB) corrente e a primeira opção (2) é o controle de compartilhamento do arquivo dos serviços (JOBs) concorrentes com o serviço que está sendo executado, os códigos de compartilhamento são: 1 = Um aplicativo abre o arquivo para leitura os demais não acessam 2 = Um aplicativo abre o arquivo para manutenção e os outros para leitura 3 = Um aplicativo abre o arquivo para manutenção e os outros para leitura e gravação INDEX: Nome da área de índices DATA: Nome da área de dados. DELETE: Cláusula que acionará a função de deleção do CLUSTER do VSAM MFS.USER.ALUNOS.KSDS: Nome do CLUSTER do VSAM que será deletado PURGE CLUSTER: Indica que o CLUSTER DO VSAM será purgado, apagado do catálogo VSAM. DEFINE: Define a criação do arquivo VSAM NAME: Nome do CLUSTER do VSAM VOL : Volume do dispositivo de armazenagem TRK : Alocação de espaço em trilhas primárias e secundárias para armazenar os dados e índices, sendo que o 2 é o número de trilhas primárias, e o 1 é o número de trilhas secundárias. NOTA: O IF MAXCC seta o valor do ERRO em zero quando não existir o arquivo a ser deletado (MAXCC=8) para que o JOB não encerre neste step.
11 12 Copiando um VSAM A copia de um arquivo tendo como origem um arquivo sequencial ou VSAM para um destino também sequencial ou VSAM será feito com o parâmetro REPRO do IDCAMS. /---------------------------------------------------------------------* / COPIANDO UM KSDS * /---------------------------------------------------------------------* //STEP002 EXEC PGM=IDCAMS,COND=(0,NE) //DD01 DD DSN=MFS.USER.ALUNO.SEQ,DISP=SHR //DD02 DD DSN=MFS.USER.ALUNO.KSDS,DISP=SHR REPRO INFILE(DD01) [FROMKEY(???')] [TOKEY(???')] [COUNT(???)] OUTFILE(DD02) INFILE: DD01 é o arquivo de origem da cópia (Existente) FROMKEY: Chave assinalada para início da cópia - válido somente para arquivos KSDS (Opcional) TOKEY: Chave assinalada para término da cópia - válido somente para arquivos KSDS (Opcional) COUNT: Quantidade de registros a serem processados para cópia (Opcional). Imprimindo um VSAM A impressão de um arquivo VSAM e dados pelo parâmetro PRINT do IDCAMS. INFILE: DD01 é o arquivo de origem da cópia (Existente) FROMKEY: Chave assinalada para início da cópia - válido somente para arquivos KSDS (Opcional) TOKEY: Chave assinalada para término da cópia - válido somente para arquivos KSDS (Opcional) COUNT: Quantidade de registros a serem processados para cópia (Opcional). CHAR: Indica que impressão dos dados será exibida em caracteres, na sua omissão os dados será impresso em caracteres e hexadecimal (Opcional). Criando um vsam ESDS A criação um arquivo VSAM sequencial (ESDS) devemos indicar para o IDCAMS os parâmetros de cluster, tamanho e volume. Veja o exemplo: //USERXX JOB 'ALUNO',CLASS=C,MSGCLASS=X,TIME=1,NOTIFY=&SYSUID //STEP001 EXEC PGM=IDCAMS DELETE MFS.USER.ALUNOS.ESDS PURGE CLUSTER IF MAXCC = 8 THEN SET MAXCC = 0 DEFINE CLUSTER - (NAME (MFS.USER.ALUNOS.ESDS) - VOL (TURMA?) TRK (2,1) RECORDSIZE (80,80) NONINDEXED)) NONINDEXED Indica que o VSAM é sequencial (ESDS) /---------------------------------------------------------------------* / IMPRIMINDO UM KSDS * /---------------------------------------------------------------------* //STEP003 EXEC PGM=IDCAMS,COND=(0,NE) //DD01 DD DSN=MFS.USER.ALUNOS.KSDS,DISP=SHR PRINT INFILE (DD01) FROMKEY(???') TOKEY('???') COUNT(???) CHAR
13 Criando um vsam RRDS A criação de um arquivo VSAM relativo (RRDS) devemos indicar para o IDCAMS o parâmetro NUMBERED. //USERXX JOB 'ALUNO',CLASS=C,TIME=1,NOTIFY=&SYSUID //STEP001 EXEC PGM=IDCAMS DELETE MFS.USER.CADALUNO.RRDS PURGE CLUSTER IF MAXCC = 8 THEN SET MAXCC = 0 DEFINE CLUSTER - (NAME (MFS.USER.CADALUNO.RRDS) - VOL (TURMA?) TRK (2,1) RECORDSIZE (80,80) NUMBERED)) NUMBERED Indica que o VSAM é indexado relativo (RRDS)