Você está na página 1de 21

Concurso Mainframe IBM 2012 - Brasil Parte 1

Tempo para concluso aproximadamente 5 horas

Ajuda Voc poder achar as referncias abaixo teis para a concluso das tarefas: z/OS v1.11 Information Center: http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp

Antes de comearmos a parte 1, sugerimos que voc faa a Ambientao. No obrigatrio, porm, na Ambientao voc encontrar muitos conceitos importantes para o desenvolvimento do concurso inteiro!

Comeou o Concurso! Nesta etapa, voc conhecer alguns procedimentos usando o editor ISPF! Algumas tarefas bsicas sero passadas e, ao final, voc dever rodar um executvel! E ai, vamos brincar no mainframe agora??!!!

CONHECENDO OS TIPOS DE DATASETS


Conforme visto na ambientao, um data set pode ser sequencial ou particionado. O que isto significa, afinal de contas?

Dataset Sequencial: Este tipo de dataset contm dados que so acessados em sequncia. Cada acesso depende do outro e ocorre na ordem em que inserido, no estilo FIFO (first in first out primeiro a entrar, primeiro a sair).

Dataset Particionado (PDS): Este tipo de dataset pode conter vrios membros, como uma pasta pode conter vrias subpastas. Cada membro pode conter uma JCL, uma biblioteca ou at mesmo um executvel. Cada dado pode ser acessado separadamente.

Alocando um novo Dataset


Para as prximas etapas, precisaremos criar um dataset particionado. A partir do painel principal do ISPF, digite 3 (Utilities), pressione Enter e depois digite 2 (data set).

Voc ser levado para a tela de Data Set Utility. Na linha de comando (Option ===>), digite A (para alocar um novo dataset). No campo Data Set Name ... digite PARTE1.ESCOLA e pressione Enter. No se esquea! Data sets so nomeados com identificadores de 1 a 8 caracteres e separados por pontos. Digitando sem aspas, o sistema assumir automaticamente que o primeiro identificador ser seu ID. Desta forma, o dataset que estamos criando dever ficar como IBM####.PARTE1.ESCOLA observe no campo Data Set Name. Digitando 'IBM####.PARTE1.ESCOLA' ter o mesmo resultado que digitando apenas PARTE1.ESCOLA. Sem aspas simples, o sistema assume que seu ID ser o primeiro identificador, mesmo se voc no digit-lo, enquanto que, entre aspas simples, voc precisar digit-lo manualmente. Agora defina os seguintes atributos para o seu dataset: Space units = TRACK; Primary Quantify = 1; Secondary Quantify = 1; Record Format = FB (FIXED BLOCK); Record Length = 80; Block size = 32000; Data set name type = LIBRARY; Qualquer campo no mencionado pode ser deixado em branco.

Sua tela dever estar assim:

Pressione Enter! Recebeu a mensagem no canto superior direito: DATA SET ALLOCATED? Voc criou um data set no mainframe com sucesso!

Acesse o seu Dataset ISPF > 3 Utilities > 4 DsList > Dsname Level IBM#### > B (browser) > (Na frente do dataset que acabamos de criar) O Dataset que voc criou est vazio.

Criando um membro para o Dataset DESAFIO - 1


Um membro pode ser qualquer coisa cdigo de programa, sada de programa, dados binrios ou simplesmente texto.

Vamos criar um membro dentro do data set particionado (PDS): Volte ao menu principal do ISPF e digite 2 (Edit); Escreva PARTE1.ESCOLA(AULA1) no campo NAME embaixo de FROM OTHER PARTITIONED OR SEQUENTIAL DATA SET e pressione enter; Comece digitando o comando RES (RESET) na linha de comando, e dando enter para remover a mensagem na tela. Este comando poder ser usado sempre que for necessrio limpar a tela de algumas mensagens ou recursos. Digite i5 no campo com os ****** para inserir 5 linhas. Crie uma lista com 5 ideias para um mundo mais inteligente, cada ideia em uma linha. Depois que criar a lista, digite SAVE na linha de comando e volte ao painel principal do ISPF pressionando F3.

Agora comea a diverso. Vamos ao trabalho!! A instituio de ensino XPTO realiza todos os anos uma prova para avaliar o desempenho dos alunos e a qualidade dos cursos. A instituio no tem um sistema to inteligente o quanto precisa para organizar os dados dos seus alunos. Precisamos reunir os dados dos alunos que fizeram a prova em um relatrio para a instituio. Voc precisar copiar uma lista com os dados do resultado da prova de CLASSE3.

Copiando um membro
Copie o membro CLASSE3 j existente para o seu Dataset ISPF > 3 Utilities > 3 Move/Copy > Option = C From Name = 'BRASIL.PUBLIC.PARTE1.ESCOLA(CLASSE3)' D enter e na prxima tela digite onde iremos salvar o membro To Other Name = PARTE1.ESCOLA. Se estiver tudo certo uma mensagem vai aparecer: Member CLASSE3 copied

Inserindo novos dados no membro


Quando temos uma pgina com muita informao, algumas dessas informaes no aparecem na tela, para isso, podemos apertar as teclas F7 e F8 para subir e descer a pgina, respectivamente. Precisamos cadastrar dois novos alunos que realizaram a prova com um pequeno atraso. Para isso, insira os novos dados no membro que copiamos. Edite o membro CLASSE3: Na ltima linha deste dataset, insira as duas linhas abaixo que representam os alunos que realizaram a prova com atraso:
O000072-A3 JOAO PEDRO 06 098% R AAA ***** IBM000#12345678901 O000073-A3 MARIA CLARA 07 089% R AAA ***** IBM000#12345678901

onde, o cabealho o seguinte:


Matrcula / Nome / Sobrenome / Nota / Frequncia / Estado / Tipo / ***** / ID

Insira os dados seguindo exatamente a formatao atual da CLASSE3. No se esquea de salvar!!!

Existe um comando que permite exibir uma linha formatada, mostrando a identificao das colunas, o COLS. O comando COLS exibe uma linha com a indicao das colunas, como no exemplo : 000300 COLS - - - + - - - 1 - - - + - - - 2 - - - + - - - 3 - - - + - - - 4 - - - + etc. 000400

Vamos aprender um pouco de JCL para continuar o nosso trabalho?!!


Job Control Language (JCL) como voc descreve esta informao ao z/OS, onde um job representa uma tarefa.

Para cada job que voc submete, voc precisa falar ao z/OS onde encontrar a entrada (input) apropriada, como processar a entrada (isto , qual programa ou quais programas sero rodados) e o que fazer com o output resultante. Use o JCL para transmitir esta informao para o z/OS atravs de uma srie de comandos conhecidos como JOB CONTROL STATEMENT (JCL).

Dentro de cada job, os comandos de controle so agrupagos em dois passos. Um passo consiste em todo o controle necessrio para rodar um programa. Se o job precisa rodar mais de um programa, o job pode conter um passo diferente para cada um dos programas.

Job Control Statements


Cada job dever conter: Um JOB statement (ou declarao JOB) marcando o incio do job para designar um nome. Esta declarao tambm usada para providenciar informaes administrativas, incluindo segurana, contabilizao e identificao de informao. Cada job tem uma e apenas uma declarao JOB. Pelo menos uma declarao EXEC (execute), marcando o incio de um passo, um nome para o passo e o programa ou procedimento a ser executado. Voc pode adicionar vrios parmetros para a declarao EXEC para customizar o modo como o programa ir executar e as condies nas quais ele dever ser executado. A maioria dos programas requerem dados de entrada ou geram dados de sada, e geralmente contm: Uma ou mais declaraes DD (data definition), para identificar e descrever os dados de entrada e sada a serem usados neste passo. Esta declarao pode ser usada para requerer um dataset criado previamente, para definir um novo dataset ou para definir e especificar as caractersticas do arquivo de sada, ou output. Cada job control statement tem cinco campos: 1. Um campo identifier, que tipicamente duas barras (//). A linha inteira ser tratada como comentrio se as barras duplas forem seguidas de um asterisco (//*). 2. Um campo name, identificando a declarao de forma que ela possa ser referida mais tarde. 3. Um campo operation, identificando o tipo de declarao, i.e. JOB, EXEC, DD. 4. Um campo parameter 5. Qualquer informao seguindo o campo parameter tratada como comentrio e ignorada.

Declaraes JCL podem ser escritas at a coluna 71. Voc pode estar se perguntando o porque deste formato. Historicamente, o JCL era lido usando cartes perfurados de 80 colunas, sendo as ltimas 8 utilizadas para numerar as linhas.

DESAFIO - 2
Crie um dataset particionado chamado PARTE1.JCL com as mesmas configuraes de PARTE1.ESCOLA. Se precisar, volte na atividade 1 para refrescar a sua memria ;) Dentro desse dataset iremos copiar um membro chamado JCL0001 que se encontra em 'BRASIL.PUBLIC.PARTE1.JCL(JCL0001)', e depois edit-lo. Digite o comando HILITE ON Digite o comando CHANGE ALL IBM#### IBM(seu id) E depois submeta-o digitando o comando SUB

Esse job recebe o membro que voc criou AULA1 e exibe o contedo na sada padro do sistema. Algo deu errado aps submeter o nosso primeiro job, vamos aprender um pouco sobre o SDSF para verificar esse erro.

Usando o SDSF
System Display and Search Facility (SDSF) fornece a informao que voc precisa para monitorar, gerenciar e controlar um sistema z/OS. Voc pode usar o SDSF para visualizar o log do sistema e o status dos jobs que esto rodando no sistema ou que terminaram de rodar, inclundo qualquer output destes jobs que ainda no foram descartados. Voc pode acessar o SDSF pelo painel principal do ISPF usando o comando SD. No SDSF, use a opo DA para visualizar os jobs ativos, incluindo qualquer tarefa iniciada, que so um tipo de job especial. ST pode ser usado para visualizar o status dos jobs que esto ativos, dos que ainda sero processados e daqueles que j completaram. Uma vez que voc esteja vendo a lista de status dos jobs, no campo de comando possvel definir um filtro para visualizar apenas os jobs que voc possui digitando OWNER IBM#### (IBM#### o seu ID) Para reverter a ao e visualizar todos os jobs, digite: OWNER * Similarmente, voc pode filtrar a lista de jobs por nome digitando: PREFIX ABC* O que dever mostrar apenas os jobs cujo nome comece com as letras ABC. Para remover este filtro, digite: PREFIX * possvel usar ambos os filtros owner e prefix ao mesmo tempo. Estes filtros so teis pois mostram apenas os jobs com os quais voc ir querer trabalhar. Porm, saiba que o SDSF memoriza os filtros que voc est usando. Se voc no est vendo o job que procura, remova os filtros para que todos os jobs sejam visveis.

Nos painis DA e ST voc apresentado com uma lista de jobs. Use as teclas F7 e F8 para subir ou descer na lista. Para visualizar mais informaes a respeito de um job em particular, possvel usar o comando S ao lado do job, na coluna da esquerda, e pressionar Enter. Isso ir disponibilizar alguns dados a respeito da execuo deste job. Caso queira visualizar o output separadamente, voc pode digitar ? no lugar de S. Voc poder ento usar S para selecionar o output individualmente. Use a tecla F3 para sair desta tela e retornar ao painel ISPF.

Verifique o log no SDSF do job JCL0001 e corrija o erro no membro. Aps submeter o JOB sem erros ir retornar a seguinte mensagem: MAXCC=0000.

Salvando o OUTPUT do SDSF


ISPF > SDSF > ST > Procure pelo JOBNAME PRIMJOB que executou com sucesso, deve ser o ltimo da lista (Owner IBM####) Digite ? na frente o jobname PRIMJOB Digite S na frente do DDNAME SORTOUT Observe as 5 ideias no data set classificados em ordem alfabtica! Volte para a tela anterior (F3) Digite XDC SORTOUT > (Na frente do seu JOB) e d enter Insira os dados abaixo: Data set name ===> PARTE1.ESCOLA Member to use ===> AULA2 Disposition ===> OLD e enter!

Procure pelo membro AULA2 e veja se este foi criado. Configure o seu arquivo como na tela abaixo. Lembrando que no campo Data Set Name voc deve indicar o nome do SEU Dataset.

Aqui vai uma dica!!!! =D Existe um comando que cria uma nova tela do ISPF. Com essa nova tela voc no precisa ficar dando voltas pelo painel do ISPF a cada tarefa e pode fazer duas coisas ao mesmo tempo. Este comando o SPLIT (F2).

Coloque o indicador do cursor em qualquer parte da barra superior, como na primeira imagem, e aperte (F2). Aparecer uma linha pontilhada como na segunda imagem. Isso indica que voc criou uma nova tela do ISPF. Para alternar entre as telas aperte (F9).

Imagem 1

Imagem 2

DFSORT
Vamos ver rapidamente alguns comandos do DFSORT para continuar com o nosso projeto. Esses comandos so usados para executar funes de classificao no texto que estamos editando nos membros dos datasets. DFSORT um programa que voc usa para ordenar, mesclar e copiar informaes.

Nesta lista abaixo, esto as principais comandos do DFSORT. SORT - Descreve os campos para uma aplicao de classificao, ou solicitar uma cpia de aplicao. MERGE Descreve os campos para uma aplicao de fuso, ou solicita uma cpia da aplicao. OPTION - substitui padres de instalao e fornece informaes opcionais, como o nmero de registros para pular antes da separao INCLUDE - Descreve os critrios a serem utilizados para incluir os registros antes de serem classificados, copiados ou fundidos. OMIT - Descreve os critrios a serem utilizados para omitir registros antes de serem classificados, copiado ou fundidos. OUTFIL - Permite criar um ou mais conjuntos de dados de sada para uma espcie de cpia, ou mesclar a aplicao de uma nica passagem sobre os dados de um ou mais conjuntos de entrada. INREC - Descreve como os registros devem ser reformatado antes de serem ordenados, copiado ou fundidos. OUTREC - Descreve como os registros devem ser reformatada depois de serem classificados, copiado ou fundidos. SUM - Descreve como os campos devem ser somados, aps separao ou fuso. JOINKEYS - Funo poderosa do DFSORT que ajuda voc a executar vrias aplicaes "join" em dois conjuntos de dados por um ou mais teclas.

ATENO: Para realizar as prximas tarefas voc vai precisar aprender como funcionam alguns desses comandos. Os prximos JOB incluem os comandos DFSORT, mas sua tarefa ser completar os parmetros de acordo com o comando e a atividade. Complete apenas os espaos com (_), pois o restante do comando est certo!

DESAFIO 3
Copie os membros CLASSE1, CLASSE2 e CLASSE4 de 'BRASIL.PUBLIC.PARTE1.ESCOLA' para dentro do seu dataset PARTE1.ESCOLA. Copie os membros JCL0002, JCL0003, JCL0004, JCL0005 de 'BRASIL.PUBLIC.PARTE1.JCL' para dentro do seu dataset PARTE1.JCL. Se no lembra como copiar os membros, ento volte nas atividades!

Vamos organizar os relatrios das classes antes de enviar para nossa central. Precisamos que voc utilize o job JCL0002. Edite o job JCL0002 alterando IBM#### para IBM(seu id) Este JOB criar um membro de sada para cada classe com os dados ordenados pela NOTA do aluno. Sua tarefa aqui passar os parametros que faltam do comando SORT e ordenar os membros CLASSE1, CLASSE2, CLASSE3 e CLASSE4 criando respectivamente para cada um desses, um membro de sada OUTPUT1, OUTPUT2, OUTPUT3 e OUTPUT4 todos membros de PARTE1.ESCOLA. Talvez o seu JCL precise de algumas alteraes, ento preste ateno! Submeta o JOB e garanta que retornou MAXCC=0000

DESAFIO - 4
timo, j temos os relatrios prontos. A instituio de ensino recebeu todos os relatrios, mas agora ela precisa organizar os relatrios em um nico membro seguindo a mesma ordenao anterior, a nota do aluno. Edite o job JCL0003 e altere o seu ID. Este JOB pega o contedo de OUTPUT1, OUTPUT2, OUTPUT3 e OUTPUT4 e une tudo dentro de um nico membro chamado OUTPUT5 Sua tarefa aqui ser completar o comando do DFSORT, passando os parmetros que faltam para o job JCL0003 executar com sucesso. Lembre-se que voc pode editar o JCL caso falte alguma linha (e falta). Ateno! Submeta o JOB e garanta que retornou MAXCC=0000 Antes de continuar, edite o membro gerado no desafio 4 chamado OUTPUT5 Execute o comando CHANGE ALL IBM000# IBM(seu id) Salve as alteraes no membro

DESAFIO - 5
Com todos os dados em um nico membro iremos descobrir quais os alunos obtiveram nota acima de 6. Utilize o job JCL0004 que vai criar um novo dataset e informar os alunos aprovados. Edite o JCL0004 e altere o seu ID Este JOB l o contedo de OUTPUT5 e inclui em OUTPUT6 apenas os alunos com nota superior ou igual a 7 (sete) Sua tarefa aqui completar os parmetros do comando que faz a incluso seguindo determinada lgica, no nosso caso NOTA superior ou igual a 7. Submeta o JOB e garanta que retornou MAXCC=0000

DESAFIO - 6
Com esses dados j podemos realizar nosso trabalho comparando as classes e cursos iremos descobrir o desempenho de todos na nossa instituio. Aps algumas anlises e clculos com os dados recebidos, iremos enviar um relatrio geral por curso. Utilize o job JCL0005 para criar um relatrio para cada curso! A identificao do curso se encontra na matrcula do aluno. Ex.: O0000009-XN (Onde o X indica o curso e N a classe) Abra o membro OUTPUT6 e localize a matrcula do aluno. Edite o JCL0005 e altere o seu ID Este JOB deve criar dois membros de sada CURSOA e CURSOB a partir do membro de entrada OUTPUT6 identificando o CURSO atravs da matrcula do aluno. Sua tarefa aqui completar os parmetros dos comandos OUTFIL e INCLUDE para identificar o curso de cada aluno e salv-los no respectivos membros. Lembre-se de verificar a coluna da matrcula do aluno. Submeta o JOB e garanta que retornou MAXCC=0000

Muito bom! Com os relatrios entregues poderemos analisar o desempenho dos alunos nos cursos e tambm a qualidade do nosso ensino. Agora vamos criar um relatrio mais elegante e mais complexo para publicar no nosso site, mas fique tranquilo o nico trabalho que precisamos de voc agora que submeta um job! Voc ainda lembra como copiar os membros e datasets?? Copie o membro 'BRASIL.PUBLIC.PARTE1.JCL(JCLF00X)' dentro do seu data set PARTE1.JCL Edite-o alterando o seu id: CHANGE ALL IBM#### IBM(seu id) Ento submeta-o com o comando SUB Este JOB cria um membro chamado REPORT, o qual ser o nosso relatrio final. Verifique como ficou o relatrio.

DESAFIO - 7
Preparamos uma surpresa para voc =D Vamos testar os seus conhecimentos em um pequeno desafio e depois disso a parte 1 estar terminada hahahahahaha que divertido.

Todas as informaes que voc precisa esto aqui: Copie o membro 'BRASIL.PUBLIC.PARTE1.QUIZ(QUIZP1)' para seu data set PARTE1.QUIZ. Escolha a opo 2 (Allocation Options), e especifique os mesmos valores utilizados na criao do nosso primeiro data set (PARTE1.ESCOLA). Edite o membro QUIZP1 e responda as perguntas contidas.

CONCLUINDO O TRABALHO
Copie o membro 'BRASIL.PUBLIC.PARTE1.QUIZ(CHECK001)' para dentro de PARTE1.QUIZ Execute o programa CHECK001 Para executar digite: EX CHECK001 (na frente do nome do membro). Este programa vai verificar todos os desafios e corrigi-los. Se voc conseguir 100% em todas as atividades voce poder prosseguir, caso contrrio, retorne ao desafio e verifique alguma pendncia. Verifique a mensagem >>> PARTE 1 CONCLUIDA COM SUCESSO! <<< esta mensagem indica que voce concluiu com sucesso. Crie um dataset chamado 'IBM####.IBM####.PARTE1.FINAL' e copie os membros AULA2 e REPORT para este dataset. Encontre o membro e digite C. Ex.: C AULA2 e C REPORT (enter) Iremos copiar dois membros. Especifique onde ser salvo. (To Other Data Set Name) e digite o nome do data set de destino: IBM####.PARTE1.FINAL Nos envie os membros. ISPF > 6 (Command) > Digite o comando: ===> XMIT N1.JUDGE1 DA('IBM####.IBM####.PARTE1.FINAL') Verifique a mensagem: Transmission occurred

Pronto!! Este foi o fim da Parte 1.

Nossa equipe ir verificar se seu programa executou corretamente. Caso seja um dos 250 primeiros a terminar corretamente voc ganhar uma camiseta do Concurso Mainframe! Voc j fez muito! Agora sabe criar datasets e membros no mainframe, alm de submeter JCLs e executar programas! Existem muitas empresas como a nossa que usam o mainframe para operaes em larga-escala. A atual gerao de programadores mainframe est gradualmente se aposentando, portanto grandes empresas esto buscando profissionais com conhecimento em mainframe. Parabns pela sua conquista! Nos vemos na Parte 2!