domingo, 3 de junho de 2012

VSAM - Definições e Conceitos


VSAM (VIRTUAL STORAGE ACCESS METHOD) - PROGRAMAS BATCH

É UM METODO DE ACESSO QUE TRABALHA COM ORGANIZACOES DE ARQUIVOS RESIDENTES EM DISPOSITIVOS DE ACESSO DIRETO (DISCOS).

A CLAUSULA SELECT PERMITE ESPECIFICACOES DO ARQUIVO, TAIS COMO ORGANIZACAO, MODO DE ACESSO E OUTRAS INFORMACOES.

PARA O UNIBANCO, A ORGANIZACAO SERA GERALMENTE INDEXADA E O MODO DE ACESSO SERA DINAMICO, O QUE QUER DIZER QUE OS REGISTROS PODEM SER ACESSADOS TANTO SEQUENCIAL QUANTO RANDOMICAMENTE.

A CLAUSULA FILE STATUS É UTILIZADA PARA PROPICIAR A MONITORACAO DA EXECUCAO DE CADA COMANDO DE I-O (OPEN, READ, WRITE, REWRITE, START, DELETE, CLOSE). O FILE STATUS DEVE SER DEFINIDO NA WORKING-STORAGE COMO UM CAMPO NUMERICO DE DOIS BYTES. DURANTE A EXECUCAO DE QUALQUER PEDIDO PARA O ARQUIVO, O SISTEMA COLOCA UM VALOR NA STATUS KEY, QUE INDICA O ESTADO RESULTANTE DO PEDIDO.

SEMPRE QUE O PROGRAMA EMITIR QUALQUER UM DOS COMANDOS ESPECIFICADOS ACIMA, O FILE STATUS TEM QUE SER VERIFICADO PARA QUE SE POSSA DETERMINAR SE O COMANDO SOLICITADO FOI BEM SUCEDIDO OU NAO. (FILE-STATUS = ZEROS INDICA QUE O COMANDO FOI EXECUTADO COM SUCESSO).

OPEN à PODERA ABRIR O ARQUIVO COMO ENTRADA (OPEN INPUT), SAIDA (OPEN OUTPUT) OU ENTRADA E SAIDA (OPEN I-O).

CLOSE à SERVIRA PARA FECHAR O ARQUIVO.

START à FORNECE MEIOS PARA UM POSICIONAMENTO LOGICO PARA SUBSEQUENTE OBTENCAO SEQUENCIAL DE REGISTROS.

FORMATO: START NOME-DO-ARQ KEY IS EQUAL TO       DATA-NAME
                                       GREATER  THAN
                                       NOT LESS THAN

O PONTEIRO E' COLOCADO NO PRIMEIRO REGISTRO CUJA CHAVE SATISFACA A CONDICAO ESPECIFICADA. SE HOUVER UM OU MAIS REGISTROS QUE SATISFACAM A CONDICAO, O STATUS RETORNARA COM 00. SE NAO HOUVER NENHUM REGISTRO QUE SATISFACA A CONDICAO, O STATUS RETORNARA COM O VALOR 23.

O COMANDO START APENAS POSICIONA O PONTEIRO NO REGISTRO DESEJADO MAS NAO PERMITE ACESSO AOS DADOS. APOS O POSICIONAMENTO DEVE SER DADO UM READ SEQUENCIAL PARA A LEITURA DO REGISTRO.

READ à SERVE PARA ACESSO AOS DADOS DO REGISTRO.

FORMATO: READ NOME-DO-ARQ {NEXT} INTO AREA-DE-WORKING

SE USADO SEM A PALAVRA NEXT, SERVIRA PARA A LEITURA DO REGISTRO ATRAVES DO SEU CAMPO CHAVE, PORTANTO APENAS UM REGISTRO SERA LIDO.

O STATUS 23 INDICA QUE A CHAVE SOLICITADA NAO FOI ENCONTRADA NO ARQUIVO.

COM A PALAVRA NEXT, SERVIRA PARA A LEITURA SEQUENCIAL DE UM OU MAIS REGISTROS.
O STATUS 00 INDICA QUE O REGISTRO FOI LIDO SEQUENCIALMENTE COM SUCESSO.

O STATUS 10 INDICA QUE HOUVE FINAL DOS DADOS NO ARQUIVO.

WRITE à SERVE PARA GRAVACAO DE DADOS. O STATUS 22 INDICA QUE JA EXISTE UM REGISTRO NO ARQUIVO COM A MESMA CHAVE DA  TENTATIVA DE GRAVACAO.

REWRITE à SERVE PARA ATUALIZACAO DE DADOS.

DELETE à SERVE PARA A DELECAO DO REGISTRO.


Para criar um arquivo VSAM:

//DEFINE   EXEC PGM=IDCAMS                                                      
//SYSPRINT DD SYSOUT=*                                                         
//SYSIN    DD *                                                                
  DEL (nomedoarquivo) CLUSTER PURGE                                           
  DEFINE CLUSTER -                                                             
      (NAME(nomedoarquivo) UNIQUE INDEXED -                                  
      TRK(1 1) -                                                               
      KEYS(10 0) -                                                             
      ERASE -                                                                  
      CISZ(4096) -                                                             
      RECORDSIZE(460 460) -                                                    
      FREESPACE(10 5)) -                                                       
     DATA -                                                                    
      (NAME(nomedoarquivo.D)) -                                              
     INDEX -                                                                   
      (NAME(nomedoarquivo.I))                                                


ALTERNATE KEY


            É um recurso do VSAM que permite acessar um KSDS por um campo diferente da PRIME KEY.

            No programa:   arqW - arquivo "normal"
                                   arqI - chave alternada

Programas batch exemplo:  UN186, HPRB08

Programas online exemplo:
Arquivo C525OW/C525OI
BJTP - transação principal (opção "renovação")
                        BJB90 (menu) - BJB91 (menu renovação)
                        BJD01/02/03/04 - manutenção

Definir os dois arquivos no CICS, na FCT.

            O arquivo .PATH é o que será acessado com a chave alternada.

            Quando define arquivo .PATH, o .AIX é apenas a área onde o vsam guarda o índice.

Quando a chave alternada não fizer parte da chave primaria, no CLUSTER atentar-se ao tamanho correto das chaves nas definições dos arquivos.


Exemplo Define CLUSTER para ALTERNATE INDEX:

//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD   *
  DELETE   D.CO.BNH.C525OW CLUSTER PURGE
  DEFINE CLUSTER   (                   -
           NAME(D.CO.BNH.C525OW)           -
           RECSZ(100 100)              -
           FREESPACE(00 00)            -
           INDEXED                     -
           KEY(20 0)                   -
           TRK(1 1)                    -
           SHR(3 3)                    -
           SPEED                       -
           CONTROLINTERVALSIZE (4096)  -
           TO (99365)                  -
           IMBED                       -
           NOREUSE                     -
           UNIQUE )                    -
           DATA(NAME(D.CO.BNH.C525OW.D))     -
           INDEX(NAME(D.CO.BNH.C525OW.I))

   REPRO IDS (D.CO.BNH.C525OE)    -
         ODS (D.CO.BNH.C525OW)
 //********************************************************************
 //* DEFINIÇÃO  CHAVE ALTERNADA                                       *
 //********************************************************************
 //STEP02   EXEC PGM=IDCAMS
 //SYSPRINT DD   SYSOUT=*
 //SYSIN    DD   *
   DEFINE                         -
      ALTERNATEINDEX (            -
      NAME(D.CO.BNH.C525OW.AIX)   -
      RELATE (D.CO.BNH.C525OW)    -
      KEY (11  9))                -
å tamanho da chave alternada
      DATA (                      -
      NAME(D.CO.BNH.C525OW.AIX.D) -
      CISZ (4096)                 -
      TRK(1 1)                    -
      SHR (3 3))                  -
      INDEX (                     -
      NAME(D.CO.BNH.C525OW.AIX.I) -
      CISZ(2048))
 //********************************************************************
 //* DEFINIÇÃO  CHAVE PATH                                            *
 //********************************************************************
 //STEP03   EXEC PGM=IDCAMS
 //BASDD    DD   DSN=D.CO.BNH.C525OW,DISP=OLD
 //AIXDD    DD   DSN=D.CO.BNH.C525OW.AIX,DISP=OLD
 //SYSPRINT DD   SYSOUT=*
 //SYSIN    DD   *
   DEFINE                         -
     PATH (                       -
     NAME (D.CO.BNH.C525OW.PATH)  -
     PATHENTRY (D.CO.BNH.C525OW.AIX))
   BLDINDEX                       -
     INFILE (BASDD)               -
     OUTFILE(AIXDD)
 //*

Para maiores detalhes e esclarecimentos, consultar a apostila de Introdução à VSAM.


FILE STATUS VSAM
0002     - CHAVE DUPLICADA FOI ENCONTRADA, MAS O PROGRAMA ESPECIFICOU ESTA OPCAO.
            - DUPL. KEY EM INDICE ALTERNADO

0004     - FIM DE ARQUIVO DURANTE GET

0008     - CHAVE DUPLICADA DURANTE PUT OU WRITE
            - CHAVE DUPLICADA NO INDICE ALTERNATIVO

0010     - FIM DE ARQUIVO FISICO
            - ARQ OPCIONAL NAO DISPONIVEL NA HORA DA ABERTURA
            - "END-OF-FILE(EOF)" APOS COMANDO READ.

0012     - CHAVE FORA DE SEQUENCIA DURANTE UM "PUT"

0016     - REGISTRO NAO ENCONTARDO, ERRO DE GRAVACAO(FISICO) INDICE DE KSDS E PEQUENO

0020     - CHAVE INVALIDA

0021     - ERRO DE SEQUENCIA
            - ALTERACAO DO CONTEUDO DA CHAVE DURANTE A EXECUCAO DA "REWRITE" (SOMENTE PARA ARQ. KSDS)
            - REGISTRO FORA DE SEQUENCIA.
            PARA KSDS:
            1- WRITE SEQ. EXIGE CHAVES CLASSIF.
            2- 'ACCESS SEQUENTIAL' E /READ COM SKIP SEM 'START'.
            3- 'ACCESS SEQUENTIAL' COM STRNC=1 PARA RRDS.
            4- ACESSO SEQUENCIAL E/READ COM SKIP SEM 'START'.
            - REWRITE SEM READ PREVIO.
            - WRITE EM REGISTRO COM CHAVE DUPLICADA.

0022     - DUPLICATE KEY EM WRITE OU DUPLICATE KEY EM INDICE ALTERNADO C/UNIQKEY

0023     - REGISTRO NAO ENCONTRADO.
- END-OF-FILE APOS COMANDO 'START'
- OPCAO 'CREATER THAN' USADA E A CHAVE CONTEM HIGH-VALUES.
- READ SEQ EM CHAVE APOS A ULTIMA GRAVADA.

0024     - VIOLACAO DOS LIMITES DO ARQUIVO
- NAO EXISTE ESPACO DISPONIVEL EM ARQUIVOS 'VSAM' INDEXADO OU RELATIVO PARA INSERCAO DE REGISTROS
- ESTOURO DE AREA OVERFLOW
- VOLUME CHEIO (FALTA ESPACO) - PARA KSDS.
- SPLIT DE C.A COM SHROPT=4 DISP=SHR PARA KSDS.
- REGISTRO DO INDICE ALTERNADO ATINGIU TAMANHO MAXIMO.

0028     - AREA SECUNDARIA NAO SUFICIENTE
- EM CASO DE REPRO, FAZER DELETE/DEFINE DO ARQ.

0030     - ERRO I/O NA JFCB (IRRECUPERAVEL)
- ERRO DE I/O :
  . DATA CHECK
  . CHECK DE PARIDADE
  . ERRO DE TRANSMISSAO
- ERRO I/O NO USER-CATALOG-VSAM.
- ERRO I/O NO LABEL DO VOLUME.
- ERRO DE PAGINACAO (VIRTUAL X REAL)
- ERRO DE I/O OU REGISTRO 'SPANNED' COM ERRO.

0034     - VIOLACAO DOS LIMITES DO ARQUIVO ESDS
- NAO EXISTE ESPACO DISPONIVEL EM ARQUIVO 'VSAM' SEQUENCIAL PARA INSERCAO DE REGISTROS
- ESTOURO DE AREA DE OVERFLOW
- VOLUME CHEIO (FALTA ESPACO) - ESDS.
- SPLIT DE C.A COM SHROPT=4 E DISP=SHR PARA ESDS.

0088     - OPEN NOME EXTERNO DA SELECT NAO COMPATIVEL COM O JCL
- ARQ. JA SE ENCONTRA ABERTO E NAO ESTA DISPONIVEL

0090     - OPEN "INPUT" OU "I/O" EM ARQUIVO NAO INICIALIZADO.
- (O/C) "TIME-STAMP" DO "DATA/INDEX" NAO CHECA COM A VTOC OU SI.
- (O/C) FALTANDO PASSAR "VERIFY" NO ARQUIVO.
- (O/C) FALTANDO CARTAO "DD" PARA O ARQUIVO.
- RBA NAO CORRESPONDE A REGISTRO NENHUM.
- STRNO ESPECIF. ESTA INSUFICIENTE. AUMENTAR.
- TIPO  DE PROC. (OUTPUT) INVOMPATIVEL COM OPEN:
- OPEN INPUT COM WRITE, REWRITE OU DELETE.
- OPEN OUTPUT COM REWRITE OU DELETE.
- OPEN I/O COM ACCESS SEQ E WRITE.
- CLAUSULA 'ORGANIZATION INDEXED' INFORMA INDEVIDAMENTE PARA ESDS.
- WRITE VIA RBA PARA KSDS. INDEVIDO.
- TENTATIVA DE 'DELETE' EM ESDS.
- FALTA CLAUSULA: 'ORGANIZATION IS INDEXED' PARA KSDS.
- FALTA CLAUSULA: 'ORGANIZATION IS RELATIVE' PARA RRDS.
- START EM ARQUIVO ESDE/RRDS (INVALIDO).
- WRITE EM ARQUIVO VSAM COM SHROPT=1.
- TAMANHO DA CHAVE = '0' NA CLUSTER OU TAMANHO DA CHAVE NO PROGRAMA DIFERE DO DA CLUSTER.
- READ, REWRITE, DELETE, START EM ARQUIVO ABERTO COM OUTPUT.
- READ EM ARQUIVO SPANNED SEM CLAUSULA 'INTO'.
- READ PARA RBA EM ARQUIVO SPANNED.
- READ VIA PATH SEM BUILDINDEX ANTERIOR NO INDICE ALTERNADO.
- READ VIA RBA PARA UM RRDS, NAO PERMITIDO.
- READ VIA RBA PARA UM 'BASE' VIA 'PATH' NAO PERMITIDO.

0092     - ERRO LOGICO
- START: FOI DADO START EM ARQ. FECHADO
- READ : TAMANHO DO REGISTRO ERRADO
                        TAMANHO DA CHAVE ERRADA
                        LER ARQUIVO FECHADO
- ARQ. DE INPUT
  . LEITURA/GRAVACAO/REGRAVACAO DE REGISTRO COM TAMANHO DIFERENTE DO ESPECIFICADO NA DEFINICAO DO 'CLUSTER'
  . REGRAVACAO DA DELECAO SEQUENCIAL SEM LEITURA PRECEDENTE SER BEM SUCEDIDA.
  . QUALQUER ACESSO APOS E.O.F. TER SIDO ENCONTARDO
- OPEN EM ARQUIVO JA ABERTO.
- CLOSE EM ARQUIVO JA FECHADO.
- LAYOUT DEFINIDO NA WORKING-STORAGE PARA READ INTO NAO COMPORTA O REGISTRO LIDO
- REWRITE OU DELETE SEM READ PREVIO.
- TENTATIVA DE ALTERACAO DO TAMANHO DA CHAVE.
- TAMANHO DO REGISTRO NO PROGRAMA MAIOR QUE O DA CLUSTER, OU IGUAL A ZERO, OU MENOR QUE A SOMA DO TAMANHO DA CHAVE COM DESLOCAMENTO. OU TAMANHO DO REGISTRO DE UM RRDS DIFERE DO DEFINIDO NA CLUSTER.  NUMERO DE BUFFERS INSUFICIENTE PARA O PROCESSAMENTO DO ARQUIVO.
- READ APOS END-OF-FILE.
- ARQUIVO NAO ESTA ABERTO.

0093     - MEMORIAL VIRTUAL E' INSUFUCIENTE
- ARQ. NAO E' VALIDO PARA TIPO DE PROCESSAMENTO REQUISITADO
- VOLUME/EXTENT INVALIDO
- DADOS JA SOBRE CONTROLE EXCLUSIVO
- RECURSO NAO DISPONIVEL
- OPEN : ARQ JA ABERTO (EM OUTRO JOB DISP=OLD)
            AREA DE WORKING PEQUENA
- (O/C) MEMORIA VIRTUAL DA PARTICAO INSUFICIENTE PARA O PROGR
- (O/C) 'ACCESS' ESPECIFICADO PARA O ARQUIVO INVALIDO.
- TENTATIVA DE ABRIR COMO I/O OU OUTPUT POR OUTRA TASK OU PAR
- (O/C) DISP=OLD COM MAIS DE UM OPEN NO MESMO PROGRAMA (MUDAR DISP=SHR).
- CI PRESA POR OUTRA TASK.
- VOLUME NAO MONTADO.
- MEMORIA VIRTUAL DA PARTICAO INSUFICIENTE PARA O PROGRAMA.

0094     - READ SEM OPEN PREVIO OU WRITE SEM OPEN PARA RRDS.

0095     - INFORMACAO DO ARQ. INVALIDO OU INCOMPLETO
- OPEN : TAMANHO DA CHAVE ERRADA AO DEFINIR O "CLUSTER"
- ACESSO A CATALOGO INCORRETO
- ACESSO A UM ARQ. VAZIO COM OPCAO INPUT OU I/O
- ACESSO COM OPCAO OUTPUT A UM ARQ. NOREUSE.
- TAMANHO DA RECORD KEY OU SEU DESLOCAMENTO NO REGISTRO DO AR NAO CONFERE COM O ESPECIFICADO NO "CLUSTER"
- OPEN EM INDICE ALTERNADO INVAL DEVE SER PATH.
- (O/C) INFS. DO ARQUIVO NA 'VTOC' NAO CHECA COM A DA CLUSTER NO CATALOGO.
- ARQUIVO NAO CONSTA DO CATALOGO VSAM INFORMADO.
- (O/C) TAMANHO OU DESLOC. DA CHAVE NO PROGRAMA NAO CHECA COM AS DA CLUSTER NO CATALOGO.
- FALTA CLAUSULA INDEXED PARA KSDS -- OU -- CLAUSULA 'ORGANIZATION' INCOMPATIVEL COM A DA CLUSTER.
- OPEN OUTPUT PARA O ARQUIVO NAO RECEM-DEFINIDO.

0096     - NOME EXTERNO DO JCL NAO E' COMPATIVEL COM O PGM
- OPEN: DD STATEMENT MISSING
- FALTOU ESPECIFICAR CARTAO DD
- ARQ. NAO EXISTE NO CATALOGO 'VSAM' CORRESPONDENTE
- (O/C) FALTA CARTAO DD PARA O ARQUIVO.
- OPEN PARA O ARQUIVO JA ABERTO
- DD INVALIDO PARA VSAM.

0097     - O DATA-SET NAO FOI APROPRIAMENTE FECHADO
- O FLAG(VSAM) DE TERMINO ANORMAL LIGADO PASSAR UM VERIFY SOBRE O DATASET
- (O/C) FALTA VERIFY.

0099     - TERMINO ANORMAL
- PROVAVEL ERRO DE SUBROTINA DO VSAM

0160     - ARQUIVO VAZIO

0204     - ESTOURO DE AREA SAIDA (204-211)

090C     - VERIFICAR SE O PROTEST NAO CRIOU REG. COM CHAVE  REPETIDA PARA ARQ VSAM

2 comentários:

  1. Prezado, tento abrir um arquivo VSAM, porém o File Status me retorna mensagem de erro nr. 35, que não faz parte de sua lista de status. O que seria essa mensagem?

    ResponderExcluir
  2. Grato Leonardo pela observação , no caso do retorno 35 Vsam , favor verificar se o ddname do arquivo definido no programa está igual ao do JCL .

    ResponderExcluir