0% found this document useful (0 votes)
103 views50 pages

Ims DB

The document provides an overview of the IMS DB (Information Management System Database). Some key points: - IMS DB is a hierarchical database where data is stored across different levels with each entity dependent on higher-level entities. - IMS uses DL/I (Data Language/I) as an interface language for programmers to access the database in application programs. - The database structure consists of segments, segment types, and occurrences. Segments can have fields and are the smallest unit of information transferred between programs and the database. - Data can be processed sequentially from the root segment down or randomly by providing a concatenated key to directly access a specific segment occurrence.

Uploaded by

Ale Gomes
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
103 views50 pages

Ims DB

The document provides an overview of the IMS DB (Information Management System Database). Some key points: - IMS DB is a hierarchical database where data is stored across different levels with each entity dependent on higher-level entities. - IMS uses DL/I (Data Language/I) as an interface language for programmers to access the database in application programs. - The database structure consists of segments, segment types, and occurrences. Segments can have fields and are the smallest unit of information transferred between programs and the database. - Data can be processed sequentially from the root segment down or randomly by providing a concatenated key to directly access a specific segment occurrence.

Uploaded by

Ale Gomes
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 50

Traduzido do Inglês para o Português - www.onlinedoctranslator.

com

IMS DB - Visã o geral


Uma Breve Visão Geral
Banco de dados é uma coleção de itens de dados correlacionados. Esses itens de dados são organizados e
armazenados de forma a fornecer acesso rápido e fácil. O banco de dados IMS é um banco de dados
hierárquico onde os dados são armazenados em diferentes níveis e cada entidade depende de entidades de
nível superior. Os elementos físicos em um sistema de aplicativo que usa o IMS são mostrados na figura a
seguir.

Gerenciamento de banco de dados


Um sistema de gerenciamento de banco de dados é um conjunto de programas aplicativos usados para
armazenar, acessar e gerenciar dados no banco de dados. O sistema de gerenciamento de banco de dados
IMS mantém a integridade e permite a recuperação rápida dos dados, organizando-os de forma que sejam
fáceis de recuperar. A IMS mantém uma grande quantidade de dados corporativos do mundo com a ajuda de
seu sistema de gerenciamento de banco de dados.
Gerenciador de transações
A função do gerenciador de transações é fornecer uma plataforma de comunicação entre o banco de dados e
os programas aplicativos. O IMS atua como um gerenciador de transações. Um gerenciador de transações
lida com o usuário final para armazenar e recuperar dados do banco de dados. O IMS pode usar o IMS DB
ou DB2 como seu banco de dados de back-end para armazenar os dados.

DL/I – Interface de Linguagem de Dados


DL/I é composto por programas aplicativos que concedem acesso aos dados armazenados no banco de
dados. O IMS DB usa DL/I, que serve como a linguagem de interface que os programadores usam para
acessar o banco de dados em um programa aplicativo. Discutiremos isso com mais detalhes nos próximos
capítulos.

Características do IMS
Pontos a observar -

 O IMS oferece suporte a aplicativos de diferentes linguagens, como Java e XML.


 Os aplicativos e dados do IMS podem ser acessados em qualquer plataforma.
 O processamento do IMS DB é muito rápido em comparação com o DB2.

Limitações do IMS
Pontos a observar -

 A implementação do IMS DB é muito complexa.


 A estrutura de árvore predefinida do IMS reduz a flexibilidade.
 IMS DB é difícil de gerenciar.
IMS DB - Estrutura
Estrutura hierárquica
Um banco de dados IMS é uma coleção de dados que acomodam arquivos físicos. Em um banco de dados
hierárquico, o nível mais alto contém as informações gerais sobre a entidade. À medida que avançamos do
nível superior para os níveis inferiores na hierarquia, obtemos mais e mais informações sobre a entidade.

Cada nível na hierarquia contém segmentos. Em arquivos padrão, é difícil implementar hierarquias, mas
DL/I suporta hierarquias. A figura a seguir descreve a estrutura do IMS DB.

Segmento
Pontos a observar -

 Um segmento é criado pelo agrupamento de dados semelhantes.


 É a menor unidade de informação que DL/I transfere de e para um programa aplicativo durante
qualquer operação de entrada-saída.
 Um segmento pode ter um ou mais campos de dados agrupados.

No exemplo a seguir, o segmento Aluno possui quatro campos de dados.

Aluna
Número do Número de
Nome Curso
Rolo celular

Campo
Pontos a observar-

 Um campo é um único pedaço de dados em um segmento. Por exemplo, Roll Number, Name, Course
e Mobile Number são campos únicos no segmento Student.
 Um segmento consiste em campos relacionados para coletar as informações de uma entidade.
 Os campos podem ser usados como uma chave para ordenar os segmentos.
 Os campos podem ser usados como um qualificador para pesquisar informações sobre um
determinado segmento.

Tipo de segmento
Pontos a observar -

 Tipo de segmento é uma categoria de dados em um segmento.


 Um banco de dados DL/I pode ter 255 tipos de segmentos diferentes e 15 níveis de hierarquia.
 Na figura a seguir, há três segmentos, a saber, Biblioteca, Informações sobre livros e Informações
sobre o aluno.

Ocorrência do Segmento
Pontos a observar -

 Uma ocorrência de segmento é um segmento individual de um tipo específico que contém dados do
usuário. No exemplo acima, Books Information é um tipo de segmento e pode haver qualquer
número de ocorrências dele, pois pode armazenar as informações sobre qualquer número de livros.
 No banco de dados do IMS, há apenas uma ocorrência de cada tipo de segmento, mas pode haver um
número ilimitado de ocorrências de cada tipo de segmento.
IMS DB - Terminologia DL/I
Bancos de dados hierárquicos trabalham nas relações entre dois ou mais segmentos. O exemplo a seguir
mostra como os segmentos estão relacionados entre si na estrutura do banco de dados do IMS.

Segmento Raiz
Pontos a observar -

 O segmento que está no topo da hierarquia é chamado de segmento raiz.


 O segmento raiz é o único segmento através do qual todos os segmentos dependentes são acessados.
 O segmento raiz é o único segmento no banco de dados que nunca é um segmento filho.
 Pode haver apenas um segmento raiz na estrutura do banco de dados do IMS.
 Por exemplo, 'A' é o segmento raiz no exemplo acima.

Segmento pai
Pontos a observar -

 Um segmento pai tem um ou mais segmentos dependentes diretamente abaixo dele.


 Por exemplo, 'A', 'B' e 'E' são os segmentos pai no exemplo acima.

Segmento Dependente
Pontos a observar -

 Todos os segmentos, exceto o segmento raiz, são conhecidos como segmentos dependentes.
 Os segmentos dependentes dependem de um ou mais segmentos para apresentar um significado
completo.
 Por exemplo, 'B', 'C1', 'C2', 'D', 'E', 'F1' e 'F2' são segmentos dependentes em nosso exemplo.

Segmento filho
Pontos a observar -

 Qualquer segmento que tenha um segmento diretamente acima dele na hierarquia é conhecido como
segmento filho.
 Cada segmento dependente na estrutura é um segmento filho.
 Por exemplo, 'B', 'C1', 'C2', 'D', 'E', 'F1' e 'F2' são segmentos filhos.

Segmentos Gêmeos
Pontos a observar -

 Duas ou mais ocorrências de segmento de um determinado tipo de segmento em um único segmento


pai são chamadas de segmentos gêmeos.
 Por exemplo, 'C1' e 'C2' são segmentos gêmeos, assim como 'F1' e 'F2'.

Segmento irmão
Pontos a observar -

 Segmentos irmãos são segmentos de tipos diferentes e do mesmo pai.


 Por exemplo, 'B' e 'E' são segmentos irmãos. Da mesma forma, 'C1', 'C2' e 'D' são segmentos irmãos.

Registro de banco de dados


Pontos a observar -

 Cada ocorrência do segmento raiz, mais todas as ocorrências do segmento subordinado formam um
registro do banco de dados.
 Cada registro de banco de dados tem apenas um segmento raiz, mas pode ter qualquer número de
ocorrências de segmento.
 No processamento de arquivo padrão, um registro é uma unidade de dados que um programa
aplicativo usa para determinadas operações. No DL/I, essa unidade de dados é conhecida como
segmento. Um único registro de banco de dados possui muitas ocorrências de segmento.

Caminho do banco de dados


Pontos a observar -

 Um caminho é a série de segmentos que começa no segmento raiz de um registro de banco de dados
para qualquer ocorrência de segmento específico.
 Um caminho na estrutura hierárquica não precisa ser completo até o nível mais baixo. Depende de
quanta informação exigimos sobre uma entidade.
 Um caminho deve ser contínuo e não podemos pular níveis intermediários na estrutura.
 Na figura a seguir, os registros filhos na cor cinza escuro mostram um caminho que começa em 'A' e
passa por 'C2'.
IMS DB - Processamento DL/I
O IMS DB armazena dados em diferentes níveis. Os dados são recuperados e inseridos pela emissão de
chamadas DL/I de um programa aplicativo. Discutiremos sobre as chamadas DL/I em detalhes nos próximos
capítulos. Os dados podem ser processados das duas maneiras a seguir -

 Processamento sequencial
 Processamento aleatório

Processamento sequencial
Quando os segmentos são recuperados sequencialmente do banco de dados, o DL/I segue um padrão
predefinido. Vamos entender o processamento sequencial do IMS DB.

Listados abaixo estão os pontos a serem observados sobre o processamento sequencial -

 O padrão predefinido para acessar dados em DL/I é primeiro para baixo na hierarquia e depois da
esquerda para a direita.
 O segmento raiz é recuperado primeiro, então DL/I se move para o primeiro filho esquerdo e desce
até o nível mais baixo. No nível mais baixo, recupera todas as ocorrências de segmentos gêmeos. Em
seguida, ele vai para o segmento certo.
 Para entender melhor, observe as setas na figura acima que mostram o fluxo de acesso aos
segmentos. A biblioteca é o segmento raiz e o fluxo começa a partir daí e vai até os carros para
acessar um único registro. O mesmo processo é repetido para todas as ocorrências para obter todos
os registros de dados.
 Ao acessar os dados, o programa usa a posição no banco de dados que ajuda a recuperar e inserir
segmentos.
Processamento aleatório
O processamento aleatório também é conhecido como processamento direto de dados no IMS DB. Vamos
dar um exemplo para entender o processamento aleatório no IMS DB −

Listados abaixo estão os pontos a serem observados sobre o processamento aleatório -

 A ocorrência de segmento que precisa ser recuperada aleatoriamente requer campos-chave de todos
os segmentos dos quais depende. Esses campos-chave são fornecidos pelo programa aplicativo.
 Uma chave concatenada identifica completamente o caminho do segmento raiz até o segmento que
você deseja recuperar.
 Suponha que você deseja recuperar uma ocorrência do segmento Commerce, então você precisa
fornecer os valores de campo-chave concatenados dos segmentos dos quais ele depende, como
Library, Books e Commerce.
 O processamento aleatório é mais rápido do que o processamento sequencial. No cenário do mundo
real, os aplicativos combinam os métodos de processamento sequencial e aleatório para obter os
melhores resultados.

Campo chave
Pontos a observar -

 Um campo-chave também é conhecido como campo de sequência.


 Um campo-chave está presente em um segmento e é usado para recuperar a ocorrência do segmento.
 Um campo-chave gerencia a ocorrência do segmento em ordem crescente.
 Em cada segmento, apenas um único campo pode ser usado como campo-chave ou campo de
sequência.

Campo de pesquisa
Conforme mencionado, apenas um único campo pode ser usado como um campo-chave. Se você deseja
pesquisar o conteúdo de outros campos de segmento que não são campos-chave, o campo usado para
recuperar os dados é conhecido como campo de pesquisa.
IMS DB - Blocos de Controle
Os blocos de controle IMS definem a estrutura do banco de dados IMS e o acesso de um programa a eles. O
diagrama a seguir mostra a estrutura dos blocos de controle do IMS.

DL/I usa os seguintes três tipos de blocos de controle -

 Descritor de banco de dados (DBD)


 Bloco de especificação do programa (PSB)
 Bloco de controle de acesso (ACB)

Descritor de banco de dados (DBD)


Pontos a observar -

 DBD descreve a estrutura física completa do banco de dados uma vez que todos os segmentos
tenham sido definidos.
 Ao instalar um banco de dados DL/I, um DBD deve ser criado, pois é necessário para acessar o
banco de dados IMS.
 Os aplicativos podem usar diferentes exibições do DBD. Eles são chamados de Application Data
Structures e são especificados no Program Specification Block.
 O administrador do banco de dados cria um DBD codificando instruções de controle DBDGEN.

DBDGEN
DBDGEN é um gerador de descritor de banco de dados. A criação de blocos de controle é responsabilidade
do Administrador do Banco de Dados. Todos os módulos de carga são armazenados na biblioteca IMS. As
instruções de macro da linguagem de montagem são usadas para criar blocos de controle. Abaixo está um
código de amostra que mostra como criar um DBD usando instruções de controle DBDGEN -

IMPRIMIR NOGEN
DBD NOME=BIBLIOTECA,ACESSO=HIDAM
CONJUNTO DE DADOS DD1=LIB,DISPOSITIVO=3380
SEGM NOME=LIBSEG,PARENTE=0,BYTES=10
CAMPO NOME=(LIBRARY,SEQ,U),BYTES=10,START=1,TYPE=C
SEGM NOME=BOOKSEG,PARENT=LIBSEG,BYTES=5
CAMPO NOME=(LIVROS,SEQ,U),BYTES=10,START=1,TIPO=C
SEGM NOME=MAGSEG,PARENT=LIBSEG,BYTES=9
CAMPO NOME=(REVISTAS,SEQ),BYTES=8,START=1,TIPO=C
DBDGEN
FINALIZAR
FIM

Vamos entender os termos usados no DBDGEN acima −

 Quando você executa as instruções de controle acima em JCL, ele cria uma estrutura física onde
LIBRARY é o segmento raiz e BOOKS e MAGZINES são seus segmentos filhos.
 A primeira instrução de macro DBD identifica o banco de dados. Aqui, precisamos mencionar o
NAME e ACCESS que é usado pelo DL/I para acessar esse banco de dados.
 A segunda instrução de macro DATASET identifica o arquivo que contém o banco de dados.
 Os tipos de segmento são definidos usando a instrução de macro SEGM. Precisamos especificar o
PAI desse segmento. Se for um segmento raiz, mencione PARENT=0.

A tabela a seguir mostra os parâmetros usados na instrução de macro FIELD -

S.Nã
Parâmetro e Descrição
o
Nome
1
Nome do campo, geralmente de 1 a 8 caracteres
bytes
2
Comprimento do campo
Começar
3
Posição do campo dentro do segmento
Modelo
4
Tipo de dados do campo
Tipo C
5
Tipo de dados de caractere
Tipo P
6
Tipo de dados decimal compactado
Tipo Z
7
Tipo de dados decimal zonado
Tipo X
8
Tipo de dados hexadecimais
Tipo H
9
Tipo de dados binários de meia palavra
Tipo F
10
Tipo de dados binários de palavra completa

Bloco de especificação do programa (PSB)


Os fundamentos do PSB são os seguintes -

 Um banco de dados tem uma única estrutura física definida por um DBD, mas os programas
aplicativos que o processam podem ter diferentes visualizações do banco de dados. Essas
visualizações são chamadas de estrutura de dados do aplicativo e são definidas no PSB.
 Nenhum programa pode usar mais de um PSB em uma única execução.
 Os programas aplicativos têm seu próprio PSB e é comum que programas aplicativos que tenham
requisitos de processamento de banco de dados semelhantes compartilhem um PSB.
 O PSB consiste em um ou mais blocos de controle chamados Blocos de Comunicação de Programa
(PCBs). O PSB contém um PCB para cada banco de dados DL/I que o programa aplicativo acessará.
Discutiremos mais sobre PCBs nos próximos módulos.
 O PSBGEN deve ser executado para criar um PSB para o programa.

PSBGEN

PSBGEN é conhecido como Gerador de Blocos de Especificação de Programa. O exemplo a seguir cria um
PSB usando PSBGEN −

IMPRIMIR NOGEN
PCB TYPE=DB,DBDNAME=LIBRARY,KEYLEN=10,PROCOPT=LS
SENSEG NOME=LIBSEG
SENSEG NOME=BOOKSEG,PARENT=LIBSEG
SENSEG NOME=MAGSEG,PARENT=LIBSEG
PSBGEN PSBNAME=LIBPSB,LANG=COBOL
FIM

Vamos entender os termos usados no DBDGEN acima −

 A primeira instrução de macro é o Bloco de Comunicação do Programa (PCB) que descreve o Tipo,
Nome, Comprimento da Chave e Opção de Processamento do banco de dados.
 O parâmetro DBDNAME na macro PCB especifica o nome do DBD. KEYLEN especifica o
comprimento da chave concatenada mais longa. O programa pode processar no banco de dados. O
parâmetro PROCOPT especifica as opções de processamento do programa. Por exemplo, LS
significa apenas LOAD Operations.
 SENSEG é conhecido como Sensibilidade no Nível do Segmento. Define o acesso do programa a
partes do banco de dados e é identificado no nível do segmento. O programa tem acesso a todos os
campos dentro dos segmentos aos quais é sensível. Um programa também pode ter sensibilidade em
nível de campo. Nele, definimos um nome de segmento e o nome pai do segmento.
 A última instrução de macro é PCBGEN. PSBGEN é a última instrução informando que não há mais
instruções para processar. PSBNAME define o nome dado ao módulo PSB de saída. O parâmetro
LANG especifica o idioma no qual o programa aplicativo é escrito, por exemplo, COBOL.

Bloco de controle de acesso (ACB)


Listados abaixo estão os pontos a serem observados sobre os blocos de controle de acesso -
 Os Blocos de Controle de Acesso para um programa aplicativo combinam o Descritor de Banco de
Dados e o Bloco de Especificação do Programa em um formato executável.
 ACBGEN é conhecido como Gerador de Blocos de Controle de Acesso. É usado para gerar ACBs.
 Para programas online, precisamos pré-criar ACBs. Portanto, o utilitário ACBGEN é executado
antes de executar o programa aplicativo.
 Para programas em lote, os ACBs também podem ser gerados em tempo de execução.
Banco de Dados IMS – Programaçã o
Um programa aplicativo que inclui chamadas DL/I não pode ser executado diretamente. Em vez disso, um
JCL é necessário para acionar o módulo em lote IMS DL/I. O módulo de inicialização em lote no IMS é
DFSRRC00. O programa aplicativo e o módulo DL/I são executados juntos. O diagrama a seguir mostra a
estrutura de um programa aplicativo que inclui chamadas DL/I para acessar um banco de dados.

O programa aplicativo faz interface com os módulos IMS DL/I por meio dos seguintes elementos do
programa -

 Uma instrução ENTRY especifica que os PCBs são utilizados pelo programa.
 Uma máscara de PCB correlaciona-se com a informação preservada no PCB pré-construído que
recebe informações de retorno do IMS.
 Uma área de entrada-saída é usada para passar segmentos de dados de e para o banco de dados IMS.
 As chamadas para DL/I especificam as funções de processamento, como buscar, inserir, excluir,
substituir, etc.
 Verificar Códigos de Status é usado para verificar o código de retorno SQL da opção de
processamento especificada para informar se a operação foi bem-sucedida ou não.
 Uma instrução Terminate é usada para finalizar o processamento do programa aplicativo que inclui o
DL/I.

Disposição dos Segmentos


A partir de agora, aprendemos que o IMS consiste em segmentos que são usados em linguagens de
programação de alto nível para acessar dados. Considere a seguinte estrutura de banco de dados IMS de uma
Biblioteca que vimos anteriormente e aqui vemos o layout de seus segmentos em COBOL −
01 BIBLIOTECA-SEGMENTO.
05 BOOK-ID PIC X(5).
05 DATA DE EMISSÃO PIC X(10).
05 DATA DE RETORNO PIC X(10).
05 ID DE ESTUDANTE PIC A(25).

01 LIVRO-SEGMENTO.
05 BOOK-ID PIC X(5).
05 LIVRO-NAME PIC A(30).
05 AUTOR PIC A(25).

01 SEGMENTO ALUNO.
05 ID DE ESTUDANTE PIC X(5).
05 NOME DO ALUNO PIC A(25).
05 DIVISÃO PIC X(10).

Visão geral do programa de aplicativos


A estrutura de um programa aplicativo IMS é diferente daquela de um programa aplicativo não-IMS. Um
programa IMS não pode ser executado diretamente; em vez disso, é sempre chamado como uma sub-rotina.
Um programa aplicativo IMS consiste em Blocos de Especificação de Programa para fornecer uma
visualização do banco de dados IMS.

O programa aplicativo e os PSBs vinculados a esse programa são carregados quando executamos um
programa aplicativo que inclui módulos IMS DL/I. Em seguida, as solicitações CALL acionadas pelos
programas aplicativos são executadas pelo módulo IMS.

Serviços IMS
Os seguintes serviços IMS são usados pelo programa aplicativo -

 Acessando registros do banco de dados


 Emitir comandos IMS
 Emitir chamadas de serviço IMS
 chamadas de ponto de verificação
 Sincronizar chamadas
 Enviar ou receber mensagens de terminais de usuários online
Banco de dados IMS – Noçõ es bá sicas de
Cobol
Incluímos chamadas DL/I dentro do programa aplicativo COBOL para se comunicar com o banco de dados
IMS. Usamos as seguintes instruções DL/I no programa COBOL para acessar o banco de dados -

 Declaração de entrada
 Declaração de retorno
 Extrato de Chamada

Declaração de entrada
É usado para passar o controle do programa DL/I para o COBOL. Aqui está a sintaxe da instrução de
entrada -

ENTRADA 'DLITCBL' USANDO pcb-name1


[pcb-name2]

A instrução acima está codificada na Divisão de Procedimento de um programa COBOL. Vamos entrar nos
detalhes da instrução de entrada no programa COBOL -

 O módulo de inicialização em lote aciona o programa aplicativo e é executado sob seu controle.
 O DL/I carrega os blocos e módulos de controle necessários e o programa aplicativo, e o controle é
dado ao programa aplicativo.
 DLITCBL significa DL/I para COBOL. A instrução de entrada é usada para definir o ponto de
entrada no programa.
 Quando chamamos um subprograma em COBOL, seu endereço também é fornecido. Da mesma
forma, quando o DL/I dá o controle ao programa aplicativo, ele também fornece o endereço de cada
PCB definido no PSB do programa.
 Todos os PCBs usados no programa aplicativo devem ser definidos dentro da Seção Linkage do
programa COBOL porque o PCB reside fora do programa aplicativo.
 A definição de PCB dentro da Seção de Ligação é chamada de Máscara de PCB.
 A relação entre máscaras de PCB e PCBs reais no armazenamento é criada listando os PCBs na
instrução de entrada. A sequência de listagem na declaração de entrada deve ser a mesma que
aparece no PSBGEN.

Declaração de retorno
Ele é usado para passar o controle de volta para o programa de controle IMS. A seguir está a sintaxe da
instrução Goback -

VOLTE

Listados abaixo estão os pontos fundamentais a serem observados sobre a declaração Goback -

 GOBACK é codificado no final do programa aplicativo. Ele retorna o controle para DL/I do
programa.
 Não devemos usar STOP RUN, pois ele retorna o controle para o sistema operacional. Se usarmos
STOP RUN, o DL/I nunca terá a chance de executar suas funções de terminação. É por isso que, em
programas de aplicativos DL/I, a instrução Goback é usada.
 Antes de emitir uma instrução Goback, todos os conjuntos de dados não DL/I usados no programa
aplicativo COBOL devem ser fechados, caso contrário, o programa será encerrado de forma anormal.
Extrato de Chamada
A instrução de chamada é usada para solicitar serviços DL/I, como a execução de determinadas operações
no banco de dados IMS. Aqui está a sintaxe da instrução de chamada -

CALL 'CBLTDLI' USANDO o código de função DLI


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

A sintaxe acima mostra os parâmetros que você pode usar com a instrução call. Discutiremos cada um deles
na tabela a seguir −

S.No. Parâmetro e Descrição


Código de Função DLI
1
Identifica a função DL/I a ser executada. Este argumento é o nome dos quatro campos de caracteres
que descrevem a operação de E/S.
Máscara PCB
2
A definição de PCB dentro da Seção de Ligação é chamada de Máscara de PCB. Eles são usados na
instrução de entrada. Nenhuma instrução SELECT, ASSIGN, OPEN ou CLOSE é necessária.
Área de E/S de Segmento
3
Nome de uma área de trabalho de entrada/saída. Esta é uma área do programa aplicativo na qual o
DL/I coloca um segmento solicitado.
Argumentos de pesquisa de segmento
4
Estes são parâmetros opcionais dependendo do tipo de chamada emitida. Eles são usados para
pesquisar segmentos de dados dentro do banco de dados do IMS.

Abaixo estão os pontos a serem observados sobre a declaração de chamada -

 CBLTDLI significa COBOL para DL/I. É o nome de um módulo de interface que é editado por link
com o módulo de objeto do seu programa.
 Após cada chamada DL/I, o DLI armazena um código de status no PCB. O programa pode usar esse
código para determinar se a chamada foi bem-sucedida ou falhou.

Exemplo

O exemplo a seguir mostra a estrutura de um programa COBOL que usa o banco de dados IMS e chamadas
DL/I. Discutiremos em detalhes cada um dos parâmetros usados no exemplo nos próximos capítulos.

DIVISÃO DE IDENTIFICAÇÃO.
PROGRAM-ID. TESTE1.
DIVISÃO DE DADOS.
SEÇÃO DE TRABALHO-ARMAZENAMENTO.
01 FUNÇÕES DLI.
05 DLI-GU PIC X(4) VALOR 'GU'.
05 DLI-GHU PIC X(4) VALOR 'GHU'.
05 DLI-GN PIC X(4) VALOR 'GN'.
05 DLI-GHN PIC X(4) VALOR 'GHN'.
05 DLI-GNP PIC X(4) VALOR 'PNB'.
05 DLI-GHNP PIC X(4) VALOR 'GHNP'.
05 DLI-ISRT PIC X(4) VALOR 'ISRT'.
05 DLI-DLET PIC X(4) VALOR 'DLET'.
05 DLI-REPL PIC X(4) VALOR 'REPL'.
05 DLI-CHKP PIC X(4) VALOR 'CHKP'.
05 DLI-XRST PIC X(4) VALOR 'XRST'.
05 DLI-PCB PIC X(4) VALOR 'PCB'.
01 SEGMENT-IO-AREA PIC X(150).
SEÇÃO DE LIGAÇÃO.
01 MÁSCARA PCB-ESTUDANTE.
05 STD-DBD-NAME PIC X(8).
05 STD-SEGMENT-LEVEL PIC XX.
05 STD-STATUS-CODE PIC XX.
05 STD-PROC-OPÇÕES PIC X(4).
05 FILLER PIC S9(5) COMP.
05 STD-SEGMENT-NAME PIC X(8).
05 STD-KEY-LENGTH PIC S9(5) COMP.
05 STD-NUMB-SENS-SEGS PIC S9(5) COMP.
05 STD-KEY PIC X(11).
DIVISÃO DE PROCESSO.
ENTRADA 'DLITCBL' USANDO STUDENT-PCB-MASK.
A000-LEIA-PARA.
110-GET-INVENTORY-SEGMENT.
LIGAR 'CBLTDLI' USANDO DLI-GN
ALUNO-PCB-MASK
SEGMENTO-IO-ÁREA.
VOLTE.
IMS DB - Funçõ es DL/I
A função DL/I é o primeiro parâmetro usado em uma chamada DL/I. Esta função informa qual operação
será executada no banco de dados IMS pela chamada IMS DL/I. A sintaxe da função DL/I é a seguinte -

01 FUNÇÕES DLI.
05 DLI-GU PIC X(4) VALOR 'GU'.
05 DLI-GHU PIC X(4) VALOR 'GHU'.
05 DLI-GN PIC X(4) VALOR 'GN'.
05 DLI-GHN PIC X(4) VALOR 'GHN'.
05 DLI-GNP PIC X(4) VALOR 'PNB'.
05 DLI-GHNP PIC X(4) VALOR 'GHNP'.
05 DLI-ISRT PIC X(4) VALOR 'ISRT'.
05 DLI-DLET PIC X(4) VALOR 'DLET'.
05 DLI-REPL PIC X(4) VALOR 'REPL'.
05 DLI-CHKP PIC X(4) VALOR 'CHKP'.
05 DLI-XRST PIC X(4) VALOR 'XRST'.
05 DLI-PCB PIC X(4) VALOR 'PCB'.

Essa sintaxe representa os seguintes pontos-chave -

 Para este parâmetro, podemos fornecer qualquer nome de quatro caracteres como um campo de
armazenamento para armazenar o código da função.
 O parâmetro da função DL/I é codificado na seção de armazenamento de trabalho do programa
COBOL.
 Para especificar a função DL/I, o programador precisa codificar um dos 05 nomes de dados de nível,
como DLI-GU em uma chamada DL/I, pois o COBOL não permite codificar literais em uma
instrução CALL.
 As funções DL/I são divididas em três categorias: Obter, Atualizar e Outras funções. Vamos discutir
cada um deles em detalhes.

Obter Funções
As funções get são semelhantes à operação de leitura suportada por qualquer linguagem de programação. A
função Get é usada para buscar segmentos de um banco de dados IMS DL/I. As seguintes funções Get são
usadas no IMS DB -

 Seja Único
 Obter o próximo
 Obter o próximo no pai
 Get Hold Unique
 Segure em seguida
 Get Hold Next dentro do Parent

Vamos considerar a seguinte estrutura de banco de dados IMS para entender as chamadas de função DL/I −
Seja Único

O código 'GU' é usado para a função Get Unique. Funciona de forma semelhante à instrução de leitura
aleatória em COBOL. Ele é usado para buscar uma determinada ocorrência de segmento com base nos
valores do campo. Os valores de campo podem ser fornecidos usando argumentos de pesquisa de segmento.
A sintaxe de uma chamada GU é a seguinte -

CHAMADA 'CBLTDLI' USANDO DLI-GU


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Se você executar a instrução de chamada acima fornecendo valores apropriados para todos os parâmetros no
programa COBOL, poderá recuperar o segmento na área de I/O do banco de dados. No exemplo acima, se
você fornecer os valores de campo Biblioteca, Revistas e Saúde, obterá a ocorrência desejada do segmento
Saúde.

Obter o próximo

O código 'GN' é usado para a função Get Next. Funciona de maneira semelhante à instrução read next em
COBOL. É usado para buscar ocorrências de segmento em uma sequência. O padrão predefinido para
acessar as ocorrências do segmento de dados está abaixo na hierarquia e da esquerda para a direita. A
sintaxe de uma chamada GN é a seguinte -

LIGAR 'CBLTDLI' USANDO DLI-GN


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Se você executar a instrução de chamada acima fornecendo valores apropriados para todos os parâmetros no
programa COBOL, poderá recuperar a ocorrência do segmento na área de E/S do segmento do banco de
dados em uma ordem sequencial. No exemplo acima, ele começa acessando o segmento Biblioteca, depois o
segmento Livros e assim por diante. Realizamos a chamada GN repetidas vezes, até atingirmos a ocorrência
do segmento que desejamos.

Obter o próximo no pai

O código 'GNP' é usado para Get Next dentro do Parent. Esta função é usada para recuperar ocorrências de
segmento em sequência subordinada a um segmento pai estabelecido. A sintaxe de uma chamada GNP é a
seguinte -

CHAMADA 'CBLTDLI' USANDO DLI-GNP


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Get Hold Unique

O código 'GHU' é usado para Get Hold Unique. A função Hold especifica que vamos atualizar o segmento
após a recuperação. A função Get Hold Unique corresponde à chamada Get Unique. Abaixo está a sintaxe
de uma chamada GHU -

CHAMADA 'CBLTDLI' USANDO DLI-GHU


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Segure em seguida

O código 'GHN' é usado para Get Hold Next. A função Hold especifica que vamos atualizar o segmento
após a recuperação. A função Get Hold Next corresponde à chamada Get Next. Dada a seguir está a sintaxe
de uma chamada GHN -

CHAMADA 'CBLTDLI' USANDO DLI-GHN


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Get Hold Next dentro do Parent

O código 'GHNP' é usado para Get Hold Next dentro do Parent. A função Hold especifica que vamos
atualizar o segmento após a recuperação. A função Get Hold Next no Parent corresponde à chamada Get
Next no Parent. Dada a seguir está a sintaxe de uma chamada GHNP -

CHAMADA 'CBLTDLI' USANDO DLI-GHNP


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Funções de atualização
As funções de atualização são semelhantes às operações de reescrita ou inserção em qualquer outra
linguagem de programação. As funções de atualização são usadas para atualizar segmentos em um banco de
dados IMS DL/I. Antes de usar a função de atualização, deve haver uma chamada bem-sucedida com a
cláusula Hold para a ocorrência do segmento. As seguintes funções de atualização são usadas no IMS DB -

 Inserir
 Excluir
 Substituir

Inserir

O código 'ISRT' é usado para a função Insert. A função ISRT é usada para adicionar um novo segmento ao
banco de dados. Ele é usado para alterar um banco de dados existente ou carregar um novo banco de dados.
Abaixo está a sintaxe de uma chamada ISRT -

CHAMADA 'CBLTDLI' USANDO DLI-ISRT


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Excluir

O código 'DLET' é usado para a função Excluir. Ele é usado para remover um segmento de um banco de
dados IMS DL/I. Abaixo está a sintaxe de uma chamada DLET -

CHAMADA 'CBLTDLI' USANDO DLI-DLET


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Substituir

O código 'REPL' é usado para Get Hold Next dentro do Parent. A função Substituir é usada para substituir
um segmento no banco de dados IMS DL/I. Abaixo está a sintaxe de uma chamada REPL -

CHAMADA 'CBLTDLI' USANDO DLI-REPL


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Outras funções
As outras funções a seguir são usadas em chamadas IMS DL/I −

 ponto de verificação
 Reiniciar
 PCB

ponto de verificação

O código 'CHKP' é usado para a função Checkpoint. Ele é usado nos recursos de recuperação do IMS.
Abaixo está a sintaxe de uma chamada CHKP -

CHAMADA 'CBLTDLI' USANDO DLI-CHKP


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Reiniciar

O código 'XRST' é usado para a função Reiniciar. Ele é usado nos recursos de reinicialização do IMS.
Abaixo está a sintaxe de uma chamada XRST -

CHAMADA 'CBLTDLI' USANDO DLI-XRST


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

PCB

A função PCB é usada em programas CICS no banco de dados IMS DL/I. Dada a seguir está a sintaxe de
uma chamada de PCB -

CHAMADA 'CBLTDLI' USANDO DLI-PCB


Máscara PCB
Área de E/S de Segmento
[Argumentos de pesquisa de segmento]

Você pode encontrar mais detalhes sobre essas funções no capítulo de recuperação.
IMS DB - Má scara PCB
PCB significa Bloco de comunicação do programa. PCB Mask é o segundo parâmetro usado na chamada
DL/I. É declarado na seção de vinculação. Dada a seguir está a sintaxe de uma máscara PCB -

01 PCB-NAME.
05 DBD-NAME PIC X(8).
05 SEG-LEVEL PIC XX.
05 STATUS-CODE PIC XX.
05 PROC-OPÇÕES PIC X(4).
05 RESERVADO-DLI PIC S9(5).
05 SEG-NAME PIC X(8).
05 LENGTH-FB-KEY PIC S9(5).
05 NUMB-SENS-SEGS PIC S9(5).
05 KEY-FB-AREA PIC X(n).

Aqui estão os pontos-chave a serem observados -

 Para cada banco de dados, o DL/I mantém uma área de armazenamento conhecida como bloco de
comunicação do programa. Armazena as informações sobre o banco de dados que são acessadas
dentro dos programas aplicativos.
 A instrução ENTRY cria uma conexão entre as máscaras PCB na seção Linkage e as PCBs dentro do
PSB do programa. As máscaras de PCB usadas em uma chamada DL/I informam qual banco de
dados usar para operação.
 Você pode assumir que isso é semelhante a especificar um nome de arquivo em uma instrução
COBOL READ ou um nome de registro em uma instrução COBOL write. Nenhuma instrução
SELECT, ASSIGN, OPEN ou CLOSE é necessária.
 Após cada chamada DL/I, o DL/I armazena um código de status no PCB e o programa pode usar
esse código para determinar se a chamada foi bem-sucedida ou falhou.

Nome do PCB
Pontos a observar -

 Nome do PCB é o nome da área que se refere a toda a estrutura dos campos do PCB.
 O nome do PCB é usado nas instruções do programa.
 O nome do PCB não é um campo no PCB.

Nome DBD
Pontos a observar -

 O nome do DBD contém os dados do caractere. Tem oito bytes de comprimento.


 O primeiro campo no PCB é o nome do banco de dados que está sendo processado e fornece o nome
DBD da biblioteca de descrições de banco de dados associadas a um banco de dados específico.

Nível do Segmento
Pontos a observar -

 O nível de segmento é conhecido como Indicador de Nível de Hierarquia de Segmento. Ele contém
dados de caracteres e tem dois bytes de comprimento.
 Um campo de nível de segmento armazena o nível do segmento que foi processado. Quando um
segmento é recuperado com sucesso, o número do nível do segmento recuperado é armazenado aqui.
 Um campo de nível de segmento nunca tem um valor maior que 15 porque esse é o número máximo
de níveis permitido em um banco de dados DL/I.

Código de estado
Pontos a observar -

 O campo de código de status contém dois bytes de dados de caracteres.


 O código de status contém o código de status DL/I.
 Os espaços são movidos para o campo de código de status quando DL/I conclui o processamento de
chamadas com sucesso.
 Valores sem espaço indicam que a chamada não foi bem-sucedida.
 O código de status GB indica o fim do arquivo e o código de status GE indica que o segmento
solicitado não foi encontrado.

Opções de processo
Pontos a observar -

 As opções de processo são conhecidas como opções de processamento que contêm campos de dados
de quatro caracteres.
 Um campo Opção de processamento indica que tipo de processamento o programa está autorizado a
fazer no banco de dados.

DL/I reservado
Pontos a observar -

 O DL/I reservado é conhecido como a área reservada do IMS. Ele armazena dados binários de quatro
bytes.
 O IMS usa esta área para sua própria ligação interna relacionada a um programa aplicativo.

Nome do segmento
Pontos a observar -

 O nome SEG é conhecido como área de feedback do nome do segmento. Ele contém 8 bytes de
dados de caracteres.
 O nome do segmento é armazenado neste campo após cada chamada DL/I.

Comprimento FB Chave
Pontos a observar -

 O comprimento da chave FB é conhecido como o comprimento da área de feedback da chave. Ele


armazena quatro bytes de dados binários.
 Este campo é usado para relatar o comprimento da chave concatenada do segmento de nível mais
baixo processado durante a chamada anterior.
 Ele é usado com a área de feedback chave.

Número de segmentos de sensibilidade


Pontos a observar -

 O número de segmentos de sensibilidade armazena dados binários de quatro bytes.


 Ele define a que nível um programa aplicativo é sensível. Representa uma contagem do número de
segmentos na estrutura lógica de dados.

Área de feedback chave


Pontos a observar -

 A área de feedback chave varia em comprimento de um PCB para outro.


 Ele contém a chave concatenada mais longa possível que pode ser usada com a visão do programa do
banco de dados.
 Após uma operação de banco de dados, DL/I retorna a chave concatenada do segmento de nível mais
baixo processado neste campo e retorna o comprimento da chave na área de feedback de
comprimento de chave.
IMS DB - SSA
SSA significa Segment Search Arguments. O SSA é utilizado para identificar a ocorrência do segmento que
está sendo acessado. É um parâmetro opcional. Podemos incluir qualquer número de SSAs, dependendo do
requisito. Existem dois tipos de SSAs -

 SSA não qualificado


 SSA qualificado

SSA não qualificado


Um SSA não qualificado fornece o nome do segmento que está sendo usado dentro da chamada. Abaixo está
a sintaxe de um SSA não qualificado -

01 NÃO QUALIFICADO-SSA.
05 SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALOR ESPAÇO.

Os pontos-chave do SSA não qualificado são os seguintes -

 Um SSA básico não qualificado tem 9 bytes de comprimento.


 Os primeiros 8 bytes contêm o nome do segmento que está sendo usado para processamento.
 O último byte sempre contém espaço.
 DL/I usa o último byte para determinar o tipo de SSA.
 Para acessar um segmento específico, mova o nome do segmento no campo SEGMENT-NAME.

As imagens a seguir mostram as estruturas de SSAs qualificados e não qualificados -

SSA qualificado
Um SSA qualificado fornece o tipo de segmento com a ocorrência específica de um segmento no banco de
dados. Abaixo está a sintaxe de um SSA qualificado -

01 QUALIFICADO-SSA.
05 SEGMENT-NAME PIC X(8).
05 FILLER PIC X(01) VALOR '('.
05 FIELD-NAME PIC X(8).
05 REL-OPR PIC X(2).
05 PESQUISA DE VALOR PIC X(n).
05 FILLER PIC X(n+1) VALOR ')'.

Os pontos-chave do SSA qualificado são os seguintes -

 Os primeiros 8 bytes de um SSA qualificado contêm o nome do segmento que está sendo usado para
processamento.
 O nono byte é um parêntese esquerdo '('.
 Os próximos 8 bytes a partir da décima posição especificam o nome do campo que queremos
pesquisar.
 Após o nome do campo, nas posições 18 e 19, especificamos o código do operador relacional de dois
caracteres.
 Em seguida, especificamos o valor do campo e no último byte, há um parêntese direito ')'.

A tabela a seguir mostra os operadores relacionais usados em um SSA qualificado.

Símbol
Operador relacional Descrição
o
equalizador = Igual
NE ~= ˜ Não igual
GT > Maior que
GE >= Maior ou igual
LT << Menor que
LE <= Menor ou igual

códigos de comando
Os códigos de comando são usados para aprimorar a funcionalidade das chamadas DL/I. Os códigos de
comando reduzem o número de chamadas DL/I, simplificando os programas. Além disso, melhora o
desempenho, pois reduz o número de chamadas. A imagem a seguir mostra como os códigos de comando
são usados em SSAs não qualificados e qualificados -
Os pontos-chave dos códigos de comando são os seguintes -

 Para usar códigos de comando, especifique um asterisco na 9ª posição do SSA, conforme mostrado
na imagem acima.
 O código de comando é codificado na décima posição.
 Da 10ª posição em diante, DL/I considera todos os caracteres como códigos de comando até
encontrar um espaço para um SSA não qualificado e um parêntese esquerdo para um SSA
qualificado.

A tabela a seguir mostra a lista de códigos de comando usados no SSA -

Código de
Descrição
comando
C Chave concatenada
D Chamada de caminho
F Primeira Ocorrência
eu Última Ocorrência
N Chamada de Caminho Ignorar
P Definir parentesco
Q Enfileirar Segmento
você Manter posição neste nível
Manter a posição neste e em todos os níveis
V
acima
– Código de comando nulo

Múltiplas Qualificações
Os pontos fundamentais de qualificações múltiplas são os seguintes -
 Várias qualificações são necessárias quando precisamos usar duas ou mais qualificações ou campos
para comparação.
 Usamos operadores booleanos como AND e OR para conectar duas ou mais qualificações.
 Múltiplas qualificações podem ser usadas quando queremos processar um segmento com base em
uma faixa de valores possíveis para um único campo.

Dada a seguir está a sintaxe de Qualificações Múltiplas -

01 QUALIFICADO-SSA.
05 SEGMENT-NAME PIC X(8).
05 FILLER PIC X(01) VALOR '('.
05 FIELD-NAME1 PIC X(8).
05 REL-OPR PIC X(2).
05 SEARCH-VALUE1 PIC X(m).
05 MUL-QUAL PIC X VALOR '&'.
05 FIELD-NAME2 PIC X(8).
05 REL-OPR PIC X(2).
05 VALOR DE PESQUISA2 PIC X(n).
05 FILLER PIC X(n+1) VALOR ')'.

MUL-QUAL é um termo curto para MULtiple QUALIification no qual podemos fornecer operadores
booleanos como AND ou OR.
IMS DB - Recuperaçã o de Dados
Os vários métodos de recuperação de dados usados em chamadas IMS DL/I são os seguintes -

 Chamada GU
 Chamada GN
 Usando Códigos de Comando
 Processamento Múltiplo

Vamos considerar a seguinte estrutura de banco de dados IMS para entender as chamadas de função de
recuperação de dados −

Chamada GU
Os fundamentos da chamada GU são os seguintes -

 A chamada GU é conhecida como chamada Get Unique. É usado para processamento aleatório.
 Se um aplicativo não atualizar o banco de dados regularmente ou se o número de atualizações do
banco de dados for menor, usaremos o processamento aleatório.
 A chamada GU é usada para colocar o ponteiro em uma posição específica para posterior
recuperação sequencial.
 As chamadas GU são independentes da posição do ponteiro estabelecida pelas chamadas anteriores.
 O processamento de chamadas GU é baseado nos campos-chave exclusivos fornecidos na instrução
de chamada.
 Se fornecermos um campo-chave que não seja exclusivo, DL/I retornará a primeira ocorrência de
segmento do campo-chave.

CHAMADA 'CBLTDLI' USANDO DLI-GU


PCB-NAME
IO-AREA
LIBRARY-SSA
LIVROS-SSA
ENGENHARIA-SSA
IT-SSA

O exemplo acima mostra que emitimos uma chamada de GU fornecendo um conjunto completo de SSAs
qualificados. Inclui todos os campos-chave desde o nível raiz até a ocorrência do segmento que desejamos
recuperar.

Considerações de chamada de GU

Se não fornecermos o conjunto completo de SSAs qualificados na chamada, o DL/I funcionará da seguinte
maneira -

 Quando usamos um SSA não qualificado em uma chamada GU, DL/I acessa a primeira ocorrência
de segmento no banco de dados que atende aos critérios especificados.
 Quando emitimos uma chamada GU sem nenhum SSA, DL/I retorna a primeira ocorrência do
segmento raiz no banco de dados.
 Se alguns SSAs em níveis intermediários não forem mencionados na chamada, então DL/I usa a
posição estabelecida ou o valor padrão de um SSA não qualificado para o segmento.

Códigos de status

A tabela a seguir mostra os códigos de status relevantes após uma chamada GU −

S.Nã
Código e descrição do status
o
Espaços
1
chamada bem-sucedida
GE
2
DL/I não encontrou um segmento que atendesse aos critérios
especificados na chamada

Chamada GN
Os fundamentos da chamada GN são os seguintes -

 A chamada GN é conhecida como chamada Get Next. É usado para processamento sequencial
básico.
 A posição inicial do ponteiro no banco de dados é antes do segmento raiz do primeiro registro do
banco de dados.
 A posição do ponteiro do banco de dados está antes da próxima ocorrência do segmento na
sequência, após uma chamada GN bem-sucedida.
 A chamada GN começa através do banco de dados a partir da posição estabelecida pela chamada
anterior.
 Se uma chamada GN não for qualificada, ela retorna a próxima ocorrência do segmento no banco de
dados independente do seu tipo, em seqüência hierárquica.
 Se uma chamada GN incluir SSAs, então DL/I recupera apenas os segmentos que atendem aos
requisitos de todos os SSAs especificados.

LIGAR 'CBLTDLI' USANDO DLI-GN


PCB-NAME
IO-AREA
LIVROS-SSA
O exemplo acima mostra que emitimos uma chamada GN fornecendo a posição inicial para ler os registros
sequencialmente. Ele busca a primeira ocorrência do segmento BOOKS.

Códigos de status

A tabela a seguir mostra os códigos de status relevantes após uma chamada GN −

S.Nã
Código e descrição do status
o
Espaços
1
chamada bem-sucedida
GE
2
DL/I não encontrou um segmento que atendesse aos critérios especificados na chamada.
GA
3
Uma chamada GN não qualificada sobe um nível na hierarquia do banco de dados para buscar o
segmento.
GB
4
O fim do banco de dados foi alcançado e o segmento não foi encontrado.
GK

Uma chamada GN não qualificada tenta buscar um segmento de um tipo específico diferente daquele
que acabou de ser recuperado, mas permanece no mesmo nível hierárquico.

códigos de comando
Os códigos de comando são usados com chamadas para buscar uma ocorrência de segmento. Os vários
códigos de comando usados com chamadas são discutidos abaixo.

Código de Comando F

Pontos a observar -

 Quando um código de comando F é especificado em uma chamada, a chamada processa a primeira


ocorrência do segmento.
 Os códigos de comando F podem ser usados quando queremos processar sequencialmente e podem
ser usados com chamadas GN e chamadas GNP.
 Se especificarmos um código de comando F com uma chamada GU, ele não terá nenhum
significado, pois as chamadas GU buscam a primeira ocorrência do segmento por padrão.

L Código de Comando

Pontos a observar -

 Quando um código de comando L é especificado em uma chamada, a chamada processa a última


ocorrência do segmento.
 Os códigos de comando L podem ser usados quando queremos processar sequencialmente e podem
ser usados com chamadas GN e chamadas GNP.

Código de Comando D
Pontos a observar -

 O código de comando D é usado para buscar mais de uma ocorrência de segmento usando apenas
uma única chamada.
 Normalmente, o DL/I opera no segmento de nível mais baixo especificado em um SSA, mas, em
muitos casos, também queremos dados de outros níveis. Nesses casos, podemos usar o código de
comando D.
 O código de comando D facilita a recuperação de todo o caminho dos segmentos.

Código de Comando C

Pontos a observar -

 O código de comando C é usado para concatenar chaves.


 O uso de operadores relacionais é um pouco complexo, pois precisamos especificar um nome de
campo, um operador relacional e um valor de pesquisa. Em vez disso, podemos usar um código de
comando C para fornecer uma chave concatenada.

O exemplo a seguir mostra o uso do código de comando C -

01 LOCALIZAÇÃO-SSA.
05 ENCHIMENTO PIC X(11) VALOR 'INLOCSEG*C('.
05 LIBRARY-SSA PIC X(5).
05 LIVROS-SSA PIC X(4).
05 ENGENHARIA-SSA PIC X(6).
05 IT-SSA PIC X(3)
05 ENCHIMENTO PIC X VALOR ')'.

CHAMADA 'CBLTDLI' USANDO DLI-GU


PCB-NAME
IO-AREA
LOCALIZAÇÃO-SSA

Código de Comando P

Pontos a observar -

 Quando emitimos uma chamada GU ou GN, o DL/I estabelece seu parentesco no segmento de nível
mais baixo que é recuperado.
 Se incluirmos um código de comando P, o DL/I estabelecerá seu parentesco em um segmento de
nível superior no caminho hierárquico.

Código de Comando U

Pontos a observar -

 Quando um código de comando U é especificado em um SSA não qualificado em uma chamada GN,
o DL/I restringe a busca pelo segmento.
 O código de comando U será ignorado se for usado com um SSA qualificado.

Código de Comando V

Pontos a observar -

 O código de comando V funciona de maneira semelhante ao código de comando U, mas restringe a


pesquisa de um segmento em um determinado nível e todos os níveis acima da hierarquia.
 O código de comando V é ignorado quando usado com um SSA qualificado.
Código de Comando Q

Pontos a observar -

 O código de comando Q é usado para enfileirar ou reservar um segmento para uso exclusivo de seu
programa aplicativo.
 O código de comando Q é usado em um ambiente interativo onde outro programa pode fazer uma
alteração em um segmento.

Processamento Múltiplo
Um programa pode ter várias posições no banco de dados do IMS, o que é conhecido como processamento
múltiplo. O processamento múltiplo pode ser feito de duas maneiras -

 Múltiplos PCBs
 Posicionamento Múltiplo

Múltiplos PCBs

Vários PCBs podem ser definidos para um único banco de dados. Se houver vários PCBs, um programa de
aplicativo poderá ter diferentes exibições dele. Esse método de implementação de processamento múltiplo é
ineficiente devido às sobrecargas impostas pelos PCBs extras.

Posicionamento Múltiplo

Um programa pode manter várias posições em um banco de dados usando um único PCB. Isso é conseguido
mantendo uma posição distinta para cada caminho hierárquico. O posicionamento múltiplo é usado para
acessar segmentos de dois ou mais tipos sequencialmente ao mesmo tempo.
IMS DB - Manipulaçã o de Dados
Os diferentes métodos de manipulação de dados usados nas chamadas IMS DL/I são os seguintes -

 Chamada ISRT
 Receber chamadas em espera
 Chamada REPL
 Chamada DLET

Vamos considerar a seguinte estrutura de banco de dados IMS para entender as chamadas de função de
manipulação de dados -

Chamada ISRT
Pontos a observar -

 A chamada ISRT é conhecida como chamada de inserção, que é usada para adicionar ocorrências de
segmento a um banco de dados.
 As chamadas ISRT são usadas para carregar um novo banco de dados.
 Emitimos uma chamada ISRT quando um campo de descrição de segmento é carregado com dados.
 Um SSA não qualificado ou qualificado deve ser especificado na chamada para que o DL/I saiba
onde colocar uma ocorrência de segmento.
 Podemos usar uma combinação de SSA não qualificado e qualificado na chamada. Um SSA
qualificado pode ser especificado para todos os níveis acima. Consideremos o seguinte exemplo −

CHAMADA 'CBLTDLI' USANDO DLI-ISRT


PCB-NAME
IO-AREA
LIBRARY-SSA
LIVROS-SSA
ENGENHARIA NÃO QUALIFICADA-SSA
O exemplo acima mostra que estamos emitindo uma chamada ISRT fornecendo uma combinação de SSAs
qualificados e não qualificados.

Quando um novo segmento que estamos inserindo possui um campo-chave exclusivo, ele é adicionado na
posição adequada. Se o campo-chave não for exclusivo, ele será adicionado pelas regras definidas por um
administrador de banco de dados.

Quando emitimos uma chamada ISRT sem especificar um campo-chave, a regra de inserção informa onde
colocar os segmentos relativos aos segmentos gêmeos existentes. Abaixo estão as regras de inserção -

 Primeiro− Se a regra for a primeira, o novo segmento será adicionado antes de quaisquer gêmeos
existentes.
 Último− Se a regra for a última, o novo segmento é adicionado após todos os gêmeos existentes.
 Aqui− Se a regra estiver aqui, ela será adicionada na posição atual em relação aos gêmeos existentes,
que podem ser o primeiro, o último ou qualquer outro.

Códigos de status

A tabela a seguir mostra os códigos de status relevantes após uma chamada ISRT −

S.Nã
Código e descrição do status
o
Espaços
1
chamada bem-sucedida
GE
2
Vários SSAs são usados e o DL/I não pode atender à chamada com o caminho especificado.
II
3
Tente adicionar uma ocorrência de segmento que já esteja presente no banco de dados.
LB/LC LD/LE
4
Obtemos esses códigos de status durante o processamento do carregamento. Na maioria dos casos, eles
indicam que você não está inserindo os segmentos em uma sequência hierárquica exata.

Obter chamada em espera


Pontos a observar -

 Existem três tipos de chamada Get Hold que especificamos em uma chamada DL/I:
o Obter Exclusivo (GHU)
o Get Hold Next (GHN)
o Get Hold Next dentro do Parent (GHNP)
 A função Hold especifica que vamos atualizar o segmento após a recuperação. Portanto, antes de
uma chamada REPL ou DLET, uma chamada de retenção bem-sucedida deve ser emitida
informando ao DL/I a intenção de atualizar o banco de dados.

Chamada REPL
Pontos a observar -
 Após uma chamada get hold bem-sucedida, emitimos uma chamada REPL para atualizar uma
ocorrência de segmento.
 Não podemos alterar o comprimento de um segmento usando uma chamada REPL.
 Não podemos alterar o valor de um campo-chave usando uma chamada REPL.
 Não podemos usar um SSA qualificado com uma chamada REPL. Se especificarmos um SSA
qualificado, a chamada falhará.

CHAMADA 'CBLTDLI' USANDO DLI-GHU


PCB-NAME
IO-AREA
LIBRARY-SSA
LIVROS-SSA
ENGENHARIA-SSA
IT-SSA.

*Mova os valores que deseja atualizar na ocorrência do segmento de TI*

CHAMADA 'CBLTDLI' USANDO DLI-REPL


PCB-NAME
IO-ÁREA.

O exemplo acima atualiza a ocorrência do segmento de TI usando uma chamada REPL. Primeiro, emitimos
uma chamada GHU para obter a ocorrência do segmento que queremos atualizar. Em seguida, emitimos
uma chamada REPL para atualizar os valores desse segmento.

Chamada DLET
Pontos a observar -

 A chamada DLET funciona da mesma maneira que uma chamada REPL.


 Após uma chamada get hold bem-sucedida, emitimos uma chamada DLET para excluir uma
ocorrência de segmento.
 Não podemos usar um SSA qualificado com uma chamada DLET. Se especificarmos um SSA
qualificado, a chamada falhará.

CHAMADA 'CBLTDLI' USANDO DLI-GHU


PCB-NAME
IO-AREA
LIBRARY-SSA
LIVROS-SSA
ENGENHARIA-SSA
IT-SSA.

CHAMADA 'CBLTDLI' USANDO DLI-DLET


PCB-NAME
IO-ÁREA.

O exemplo acima exclui a ocorrência do segmento de TI usando uma chamada DLET. Primeiro, emitimos
uma chamada GHU para obter a ocorrência do segmento que desejamos excluir. Em seguida, emitimos uma
chamada DLET para atualizar os valores desse segmento.

Códigos de status

A tabela a seguir mostra os códigos de status relevantes após uma chamada REPL ou DLET −

S.Nã
Código e descrição do status
o
1 Espaços
chamada bem-sucedida
AJ
2
SSA qualificado usado em chamada REPL ou DLET.
DJ
3
O programa emite uma chamada de substituição sem uma chamada get hold
imediatamente anterior.
DA
4
O programa faz uma alteração no campo-chave do segmento antes de emitir a chamada
REPL ou DLET

IMS DB - Indexaçã o Secundá ria


A indexação secundária é usada quando queremos acessar um banco de dados sem usar a chave concatenada
completa ou quando não queremos usar os campos primários da sequência.

Segmento de ponteiro de índice


DL/I armazena o ponteiro para segmentos do banco de dados indexado em um banco de dados separado. O
segmento de ponteiro de índice é o único tipo de índice secundário. É composto por duas partes -

 Elemento do prefixo

 elemento de dados

Elemento do prefixo

A parte do prefixo do segmento do ponteiro do índice contém um ponteiro para o segmento de destino do
índice. O segmento de destino do índice é o segmento acessível usando o índice secundário.

elemento de dados

O elemento de dados contém o valor da chave do segmento no banco de dados indexado sobre o qual o
índice é criado. Isso também é conhecido como o segmento de origem do índice.

Aqui estão os principais pontos a serem observados sobre a indexação secundária −

 O segmento de origem do índice e o segmento de origem de destino não precisam ser iguais.
 Quando configuramos um índice secundário, ele é mantido automaticamente pelo DL/I.
 O DBA define muitos índices secundários de acordo com os vários caminhos de acesso. Esses
índices secundários são armazenados em um banco de dados de índice separado.
 Não devemos criar mais índices secundários, pois eles impõem sobrecarga de processamento
adicional no DL/I.

Chaves Secundárias
Pontos a observar -
 O campo no segmento de origem do índice sobre o qual o índice secundário é construído é chamado
de chave secundária.
 Qualquer campo pode ser usado como uma chave secundária. Não precisa ser o campo de sequência
de segmentos.
 As chaves secundárias podem ser qualquer combinação de campos únicos no segmento de origem do
índice.
 Os valores da chave secundária não precisam ser exclusivos.

Estruturas de Dados Secundárias


Pontos a observar -

 Quando construímos um índice secundário, a aparente estrutura hierárquica do banco de dados


também é alterada.
 O segmento de destino do índice torna-se o segmento raiz aparente. Conforme mostrado na imagem
a seguir, o segmento de Engenharia torna-se o segmento raiz, mesmo que não seja um segmento raiz.
 O rearranjo da estrutura do banco de dados causado pelo índice secundário é conhecido como
estrutura de dados secundária.
 As estruturas de dados secundárias não fazem alterações na estrutura física principal do banco de
dados presente no disco. É apenas uma forma de alterar a estrutura do banco de dados antes do
programa aplicativo.
Operador E Independente
Pontos a observar -

 Quando um operador AND (* ou &) é usado com índices secundários, ele é conhecido como um
operador AND dependente.
 Um AND (#) independente nos permite especificar qualificações que seriam impossíveis com um
AND dependente.
 Esse operador pode ser usado apenas para índices secundários em que o segmento de origem do
índice depende do segmento de destino do índice.
 Podemos codificar um SSA com um AND independente para especificar que uma ocorrência do
segmento de destino seja processada com base nos campos em dois ou mais segmentos de origem
dependentes.

01 ITEM-SELEÇÃO-SSA.
05 FILLER PIC X(8).
05 FILLER PIC X(1) VALOR '('.
05 FILLER PIC X(10).
05 SSA-KEY-1 PIC X(8).
05 FILLER PIC X VALOR '#'.
05 FILLER PIC X(10).
05 SSA-KEY-2 PIC X(8).
05 FILLER PIC X VALOR ')'.

Sequenciamento Esparso
Pontos a observar -

 O sequenciamento esparso também é conhecido como indexação esparsa. Podemos remover alguns
dos segmentos de origem do índice usando sequenciamento esparso com banco de dados de índice
secundário.
 O sequenciamento esparso é usado para melhorar o desempenho. Quando algumas ocorrências do
segmento de origem do índice não são usadas, podemos removê-las.
 DL/I usa um valor de supressão ou uma rotina de supressão ou ambos para determinar se um
segmento deve ser indexado.
 Se o valor de um campo de sequência no segmento de origem do índice corresponder a um valor de
supressão, nenhum relacionamento de índice será estabelecido.
 A rotina de supressão é um programa escrito pelo usuário que avalia o segmento e determina se ele
deve ou não ser indexado.
 Quando a indexação esparsa é usada, suas funções são manipuladas pelo DL/I. Não precisamos fazer
provisões especiais para isso no programa de inscrição.

Requisitos do DBDGEN
Conforme discutido em módulos anteriores, DBDGEN é usado para criar um DBD. Quando criamos índices
secundários, dois bancos de dados estão envolvidos. Um DBA precisa criar dois DBDs usando dois
DBDGENs para criar um relacionamento entre um banco de dados indexado e um banco de dados indexado
secundário.

Requisitos do PSBGEN
Depois de criar o índice secundário para um banco de dados, o DBA precisa criar os PSBs. PSBGEN para o
programa especifica a sequência de processamento adequada para o banco de dados no parâmetro
PROCSEQ da macro PSB. Para o parâmetro PROCSEQ, o DBA codifica o nome DBD para o banco de
dados de índice secundário.
IMS DB - Banco de Dados Ló gico
O banco de dados IMS tem uma regra de que cada tipo de segmento pode ter apenas um pai. Isso limita a
complexidade do banco de dados físico. Muitos aplicativos DL/I requerem uma estrutura complexa que
permite que um segmento tenha dois tipos de segmento pai. Para superar essa limitação, o DL/I permite que
o DBA implemente relacionamentos lógicos nos quais um segmento pode ter pais físicos e lógicos. Podemos
criar relacionamentos adicionais em um banco de dados físico. A nova estrutura de dados após a
implementação do relacionamento lógico é conhecida como Banco de Dados Lógico.

Relacionamento Lógico
Um relacionamento lógico tem as seguintes propriedades -

 Um relacionamento lógico é um caminho entre dois segmentos que estão relacionados logicamente e
não fisicamente.
 Normalmente, um relacionamento lógico é estabelecido entre bancos de dados separados. Mas é
possível ter um relacionamento entre os segmentos de um determinado banco de dados.

A imagem a seguir mostra dois bancos de dados diferentes. Um é um banco de dados do Aluno e o outro é
um banco de dados da Biblioteca. Criamos um relacionamento lógico entre o segmento Livros Emitidos do
banco de dados Aluno e o segmento Livros do banco de dados Biblioteca.

É assim que o banco de dados lógico fica quando você cria um relacionamento lógico -
Segmento filho lógico
O segmento filho lógico é a base de um relacionamento lógico. É um segmento de dados físico, mas para
DL/I parece ter dois pais. O segmento Livros no exemplo acima tem dois segmentos pai. O segmento de
livros publicados é o pai lógico e o segmento da Biblioteca é o pai físico. Uma ocorrência de segmento filho
lógico tem apenas uma ocorrência de segmento pai lógico e uma ocorrência de segmento pai lógico pode ter
muitas ocorrências de segmento filho lógico.

gêmeos lógicos
Gêmeos lógicos são as ocorrências de um tipo de segmento filho lógico que são todas subordinadas a uma
única ocorrência do tipo de segmento pai lógico. DL/I faz com que o segmento filho lógico pareça
semelhante a um segmento filho físico real. Isso também é conhecido como um segmento filho lógico
virtual.

Tipos de Relações Lógicas


Um DBA cria relacionamentos lógicos entre segmentos. Para implementar um relacionamento lógico, o
DBA precisa especificá-lo nos DBDGENs dos bancos de dados físicos envolvidos. Existem três tipos de
relacionamentos lógicos -

 Unidirecional
 Bidirecional Virtual
 Bidirecional físico

Unidirecional

A conexão lógica vai do filho lógico para o pai lógico e não pode ser o contrário.

Bidirecional Virtual
Permite o acesso em ambas as direções. O filho lógico em sua estrutura física e o filho lógico virtual
correspondente podem ser vistos como segmentos emparelhados.

Bidirecional físico

O filho lógico é um subordinado fisicamente armazenado a seus pais físicos e lógicos. Para os programas
aplicativos, ele aparece da mesma forma que um filho lógico virtual bidirecional.

Considerações de programação
As considerações de programação para usar um banco de dados lógico são as seguintes -

 As chamadas DL/I para acessar o banco de dados também permanecem as mesmas com o banco de
dados lógico.
 O bloco de especificação do programa indica a estrutura que usamos em nossas chamadas. Em
alguns casos, não conseguimos identificar que estamos usando um banco de dados lógico.
 Os relacionamentos lógicos adicionam uma nova dimensão à programação do banco de dados.
 Você deve ter cuidado ao trabalhar com bancos de dados lógicos, pois dois bancos de dados são
integrados. Se você modificar um banco de dados, as mesmas modificações devem ser refletidas no
outro banco de dados.
 As especificações do programa devem indicar qual processamento é permitido em um banco de
dados. Se uma regra de processamento for violada, você receberá um código de status não em
branco.

Segmento concatenado
Um segmento filho lógico sempre começa com a chave concatenada completa do pai de destino. Isso é
conhecido como chave concatenada pai de destino (DPCK). Você precisa sempre codificar o DPCK no
início de sua área de E/S de segmento para um filho lógico. Em um banco de dados lógico, o segmento
concatenado faz a conexão entre os segmentos que estão definidos em diferentes bancos de dados físicos.
Um segmento concatenado consiste nas duas partes a seguir -

 Segmento filho lógico


 Segmento pai de destino

Um segmento filho lógico consiste nas duas partes a seguir -

 Chave concatenada pai de destino (DPCK)


 Dados lógicos do usuário filho
Quando trabalhamos com segmentos concatenados durante a atualização, pode ser possível adicionar ou
alterar os dados tanto no filho lógico quanto no pai de destino com uma única chamada. Isso também
depende das regras que o DBA especificou para o banco de dados. Para uma inserção, forneça o DPCK na
posição correta. Para uma substituição ou exclusão, não altere o DPCK ou os dados do campo de sequência
em nenhuma parte do segmento concatenado.
IMS DB - Recuperaçã o
O administrador do banco de dados precisa planejar a recuperação do banco de dados em caso de falhas do
sistema. As falhas podem ser de vários tipos, como falhas de aplicativos, erros de hardware, falhas de
energia, etc.

Abordagem Simples
Algumas abordagens simples para recuperação de banco de dados são as seguintes -

 Faça cópias de backup periódicas de conjuntos de dados importantes para que todas as transações
postadas nos conjuntos de dados sejam retidas.
 Se um conjunto de dados for danificado devido a uma falha do sistema, esse problema será corrigido
restaurando a cópia de backup. Em seguida, as transações acumuladas são postadas novamente na
cópia de backup para atualizá-las.

Desvantagens da Abordagem Simples

As desvantagens da abordagem simples para recuperação de banco de dados são as seguintes -

 Repassar as transações acumuladas consome muito tempo.


 Todos os outros aplicativos precisam aguardar a execução até que a recuperação seja concluída.
 A recuperação do banco de dados é mais demorada do que a recuperação do arquivo, se os
relacionamentos de índice lógico e secundário estiverem envolvidos.

Rotinas de Rescisão Anormal


Um programa DL/I falha de uma forma diferente da forma como um programa padrão trava porque um
programa padrão é executado diretamente pelo sistema operacional, enquanto um programa DL/I não é. Ao
empregar uma rotina de finalização anormal, o sistema interfere para que a recuperação seja feita após o
ABnormal END (ABEND). A rotina de finalização anormal executa as seguintes ações -

 Fecha todos os conjuntos de dados


 Cancela todos os trabalhos pendentes na fila
 Cria um despejo de armazenamento para descobrir a causa raiz do ABEND

A limitação dessa rotina é que ela não garante se os dados em uso são precisos ou não.

Registro DL/I
Quando um programa aplicativo ABEND, é necessário reverter as alterações feitas pelo programa
aplicativo, corrigir o erro e executar novamente o programa aplicativo. Para isso, é necessário ter o log DL/I.
Aqui estão os pontos-chave sobre o registro DL/I -

 Um DL/I registra todas as alterações feitas por um programa aplicativo em um arquivo conhecido
como arquivo de log.
 Quando o programa aplicativo altera um segmento, sua imagem anterior e posterior são criadas pelo
DL/I.
 Essas imagens de segmento podem ser usadas para restaurar os segmentos, caso o programa
aplicativo falhe.
 O DL/I usa uma técnica chamada log write-ahead para registrar alterações no banco de dados. Com o
log write-ahead, uma alteração no banco de dados é gravada no conjunto de dados de log antes de ser
gravada no conjunto de dados real.
 Como o log está sempre à frente do banco de dados, os utilitários de recuperação podem determinar
o status de qualquer alteração no banco de dados.
 Quando o programa executa uma chamada para alterar um segmento do banco de dados, o DL/I
cuida de sua parte de registro.

Recuperação – para frente e para trás


As duas abordagens de recuperação de banco de dados são -

 Recuperação avançada− DL/I usa o arquivo de log para armazenar os dados alterados. As
transações acumuladas são lançadas novamente usando este arquivo de log.
 Recuperação para trás− A recuperação para trás também é conhecida como recuperação de retorno.
Os registros de log do programa são lidos de trás para frente e seus efeitos são revertidos no banco de
dados. Quando o backout estiver completo, os bancos de dados estarão no mesmo estado em que
estavam antes da falha, assumindo que nenhum outro programa aplicativo alterou o banco de dados
nesse meio tempo.

ponto de verificação
Um ponto de verificação é uma etapa em que as alterações no banco de dados feitas pelo programa
aplicativo são consideradas completas e precisas. Listados abaixo estão os pontos a serem observados sobre
um ponto de verificação -

 As alterações do banco de dados feitas antes do ponto de verificação mais recente não são revertidas
pela recuperação reversa.
 As alterações do banco de dados registradas após o ponto de verificação mais recente não são
aplicadas a uma cópia de imagem do banco de dados durante a recuperação progressiva.
 Usando o método de ponto de verificação, o banco de dados é restaurado para sua condição no ponto
de verificação mais recente quando o processo de recuperação é concluído.
 O padrão para programas em lote é que o ponto de verificação seja o início do programa.
 Um ponto de verificação pode ser estabelecido usando uma chamada de ponto de verificação
(CHKP).
 Uma chamada de ponto de verificação faz com que um registro de ponto de verificação seja gravado
no log DL/I.

Abaixo está a sintaxe de uma chamada CHKP -

CHAMADA 'CBLTDLI' USANDO DLI-CHKP


PCB-NAME
ID DO PONTO DE VERIFICAÇÃO

Existem dois métodos de ponto de verificação -

 Ponto de verificação básico− Permite que o programador emita chamadas de ponto de verificação
que os utilitários de recuperação DL/I usam durante o processamento de recuperação.
 Ponto de verificação simbólico− É uma forma avançada de ponto de verificação usada em
combinação com o recurso de reinicialização estendida. Juntos, o ponto de verificação simbólico e a
reinicialização estendida permitem que o programador de aplicativos codifique os programas para
que possam retomar o processamento no ponto logo após o ponto de verificação.

You might also like