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
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?
ResponderExcluirGrato 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