08/11/15

Trabalhando com o Catalogo - Mainframe



Este artigo pretende lançar alguma luz sobre o mundo enigmático de MVS (ou OS/390, z/OS, não importa). Vou tentar explicar como a estrutura do sistema de cataloga trabalho e como interagir com ele.

Introdução aos catálogos

Um catálogo é um tipo de arquivo que armazena os ponteiros para data sets, VSAM ou bibliotecas. Se uma biblioteca não estiver catalogada, usar ela seria necessário especificar o nome da biblioteca, e o disco onde ela esta armazenada, em um sistemas com um grande número de bibliotecas, imagina o trabalho que seria trabalhar.

Geralmente, quando uma biblioteca é criada o JCL, geralmente com o parâmetro DISP controla se é catalogado ou não. Por exemplo, um DISP=(NEW, CATLG, DELETE), você está dizendo que a biblioteca é nova (NEW), se não der nenhum erro na criação vamos catalogar (CATLG) a biblioteca e se der algum erro na hora da criação vamos apagá-la (DELETE).

Quando uma biblioteca é catalogada, o catalogo salva dentro dele o nome da biblioteca e o volume de disco onde reside: Então, essas duas coisas são mantidos. Mas onde estamos catalogando esta biblioteca? E como se catalogado?.

Estrutura do Catálogo do z/OS

Para responder a estas duas perguntas, é preciso conhecer a estrutura dos catálogos que podem ser formados antes de nossas instalações. Por um lado, temos o Master Catalog (MASTER CATALOG) que se torna o catálogo padrão que reside na raiz. Na verdade, o Master Catalog é o primeiro a que se refere quando você executa o IPL do sistema do membro SYS1.IPLPARM(LOADxx ou de outra forma, no PARMLIB.

Por outro lado, existem catálogos do usuário ou USER CATALOGS, que são todos aqueles catálogos não são o Master Catalog e que podemos criar ou apagar à vontade.

Estes outros catálogos são conectados ao usuário com o catálogo principal, de modo que existe um ponteiro dos catálogos do utilizador catálogo principal nós definidos, e também é possível que um utilizador catálogo depender de outro utilizador catálogo de nível mais elevado, para que possamos criar uma árvore de índices estrutura tão simples ou complexo como quisermos.

Funcionamento dos Catálogos

Uma biblioteca é catalogado em um catálogo por nome, especificamente, com o nome de seu HQL ou High Level Qualifier.

Se quando cria uma biblioteca eu penso, eu chamo de uma ou outra maneira, é classificada por padrão no Master Catalog. Mas se temos milhares de bibliotecas, procurando o Master Catalog subtraído desempenho porque ela deve procurar entradas uma a uma, e se o catálogo é muito grande, a pesquisa pode se prolongar por muito desnecessariamente.

Além disso, geralmente o Master Catalog deve ser usado para armazenar as entradas das bibliotecas do sistema, e as bibliotecas os dados do usuário devem ser catalogados separadamente para evitar problemas ou misturar maçãs com laranjas.

Portanto, quando nós criamos uma nova biblioteca, nós temos que levar em conta a nomenclatura que vai ter, e libertar o Master Catalog de entradas desnecessárias. Claro, mas como faço para dizer-lhe onde o catálogo da biblioteca e assim que eu quero fazer referência a eles mais tarde?.

Aliases

Para este aliases são criados. Um alias é uma maneira de dizer ao sistema onde procurar as bibliotecas sem percorridos todos os catálogos. O alias é uma entrada de Master Catalog, mas tem três fatos fundamentais: a HLQ da biblioteca, o catálogo do usuário onde o alias está relacionada e o volume onde o usuário reside catálogo.

Por exemplo, se eu quero todas as bibliotecas que começam com URD é catalogado em um catálogo chamado USERCAT.URD, basta definir um alias e a partir desse momento, toda a nova biblioteca que começa com URD, sempre catalogados no catálogo usuário, e não tocar em nada no Master Catalog. E olhar é muito simples, como todas as pesquisas começam no Master Catalog, a busca de URD em breve encontram a entrada do alias, que irá redirecionar o catálogo relacionadas ao usuário e procure lá, muito mais rápido e eficiente.

Bibliotecas SYS1

Todos os data set do sistema que começando com SYS1 são do sistema e, portanto, atenção especial. Essas bibliotecas são sempre listados no Master Catalog e removê-los da lista que pode levar a erros e problemas na inicialização do z/OS em geral, por isso tudo começa com SYS1 é melhor deixar no Master Catalog. Na verdade, se você criar uma biblioteca SYS1 ela será catalogado por padrão na Master independentemente do aliases ou qualquer coisa.

Utilidades da manejo dos catálogos

Há uma série de utilitários que pode nos servir para criar catálogos, gerenciar, diagnosticar, listar seu conteúdo, e também para catalogar e bibliotecas e data set não catalogadas. A grande maioria pode ser executado a partir da opção 6 do ISPF (TSO Commands) ou em um JCL, usando o utilitário IDCAMS.

Como criar um catálogo de Usuário

Para criar um catalógo do usuário (por exemplo USERCAT.URD) este é um modelo de jcl para fazer isso:
//DEFINCAT JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//DFNEWCAT EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DEFINE USERCATALOG -
(NAME(USERCAT.URD) -
VOLUME(PRODS1) -
MEGABYTES(15 5) -
ICFCATALOG -
FREESPACE(20 20) -
STRNO(3) -
REPLICATE ) -
DATA( CONTROLINTERVALSIZE(4096) -
BUFND(4) ) -
INDEX( BUFNI(4) )
/*
Com isso, definir JCL USERCAT.URD PRODS1 dentro do catálogo volume que se conecta automaticamente à Master Catalog. De qualquer forma, se não definir qualquer ALIAS relacionado a esse catálogo, este catálogo não chega a salvar nada e tudo vai continuar catalogado no catálogo principal, de modo a colocá-lo de usar e liberar o Master Catalog de entradas desnecessárias, definir um alias.

Definindo um alias

A partir do TSO na função ISPF opção 6 pode inserir um
DEFINE ALIAS (NAME(URD) RELATE(USERCAT.URD) 
mas você também pode iniciar o JCL com IDCAMS:
//DEFINCAT JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//DFNEWCAT EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DEFINE ALIAS (NAME(URD) RELATE(USERCAT.URD)
/*
Assim, a partir daí, tudo começa com a HLQ URD está catalogado no catálogo do usuário.

Você também pode definir mais ALIAS relacionadas ao catalogo do usuário, de modo que um ALIAS
ALIAS (NAME(BELDANDY) RELATE(USERCAT.URD) y DEFINE ALIAS (NAME(SKULD) RELATE(USERCAT.URD) 
Catalogando e descatalogando bibliotecas

Uma vez que a opção 3.4 ISPF, podemos listar os data set que deseja catalogar ou descontinuar, colocando um C para catalogar ou U para descatalogalos na frente, mas se fizermos isso para JCL, nós podemos utilizar o utilitário IEHPROGM que pode nos ajuda a resolver o problema:
//DESCATLG JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//PASO001 EXEC PGM=IEHPROGM,REGION=0M
//SYSPRINT DD SYSOUT=A
//DD1      DD UNIT=3390,VOL=SER=WORK01,DISP=OLD
//SYSIN    DD *
UNCATLG DSNAME=URD.GODDESS.LICNMBR
/*
Ou seja, este jcl descatalogará (não suprimido) dataset URD.GODDESS.LICNMBR só pode fazer referência e a catalogação de novo volume ou ir para onde ele vive e explorar a sua VTOC (no nosso caso o volume é chamado WORK01).

Se catalogá-lo novamente, basta alterar UNCATLG por CATLG e adicionar o (disco) VOLSER:
//CATLGDSN JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//PASO001 EXEC PGM=IEHPROGM,REGION=0M
//SYSPRINT DD SYSOUT=A
//DD1      DD UNIT=3390,VOL=SER=WORK01,DISP=OLD
//SYSIN    DD *
CATLG DSNAME=URD.GODDESS.LICNMBR,VOL=3390=WORK01
/*
NOTA: Esses utilitários servem apenas para catalogar e destacalogar particionado, sequencial ou HFS. Para VSAM, o procedimento é diferente.

Movendo e juntando catálogos

Pode ser que ocorra que tenha que migrar os catálogos o vários catálogos do usuário, um único catálogo muito grante para juntar os muitos catalogos de usuários pequenos e isso também pode afetar o desempenho. Então, para migrar os catálogos para uma maior, usaremos os IDCAMS mergecat REPRO.

Mas antes de tudo, vamos definir o novo catalogo de usuário que, em seguida, que caiba todas as informações. Uma vez definido, poderemos ser capazes de migrar documentação antiga dos catálogos para o nosso novo catálogo com este JCL:
//MERGECAT JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//STEP1    EXEC PGM=IDCAMS
//DD1      DD VOL=SER=WORK01,UNIT=SYSDA,DISP=OLD
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO -
INDATASET(USERCAT.BELDANDY) -
OUTDATASET(USERCAT.GODDESS) -
MERGECAT -
FILE(DD1)
/*
Isso fará com que todas as informações no catálogo dos usuário do USERCAT.BELDANDY para o USERCAT.GODDESS sejam migrados, deixando USERCAT.BELDANDY vazio.

Clique Aqui

0 comentários:

Enviar um comentário