DB2

DB2 - Database 2

DB2 é um DBMS ( Database Management System ) relacional.

Este banco de dados está sendo usado em larga escala pelas companias, pois disponibiliza acessos Batch ( Jobs ) e Online ( usuários ) simultaneamente.

Os dados no DB2 são fáceis de entender, pois estão em formatos de tabela, iguais a uma tabela de excel por exemplo. O formato de tabela é fácil de se confirgurar também e ainda facilita o acesso aos dados. Muitos parecidos com o sistema EXCEL de planilhas.

O acesso aos dados pode ser feito via TSO, aplicativos de acesso por IMS e CICS, ou ainda por Batch ( Job ).

O DB2 usa a linguagem SQL ( Structured Query Language ) para acesso aos dados. Não só para acesso, mas para manipulação, definição e segurança dos dados.

A definição e modificação dos dados pode ser feita Online, sem interferir no funcionamento do DB2.

O System Catalog é o gerenciador das tabelas de DB2. Ele gerencia manutenção, cópias e acesso aos dados, e também os programas que o DB2 utiliza.

Os dados tem seu acesso controlado no que diz respeito a usuários. Existem os usuários que não tem acesso, os que tem acesso e os que são administradores dos dados.
Os acessos são controlados por usuários, quem faz isso é o RACF ou ACF2, que são aplicativos de segurança de sistema, essas ferramentas controlam acesso de TODO um sistema Mainframe, pois os acessos são feitos por usuários.

O DB2 foi criado com uma capacidade de Recovery ( recuperação ) por si só, ou seja, no caso de um parada repentina no sistema ele se recupera sozinho. O DB2 está programado para se recuperar de falha do sub-sistema, falha de aplicativo ou falha de equipamento. O DB2 faz um Back-Out, ou seja, o DB2 volta até o último ponto de sincronismo. Ele faz esses sincronismos de tempos em tempos justamente para esses casos.

O DB2 foi criado para funcionar por longos períodos sem a necessidade de se parar para nenhum tipo de situação. Para isso, foram criados utilitários que fazem manutenção de dados, carregar dados nas tabelas, fazer cópias, etc, tudo com o DB2 executando.

O DB2 usa uma forma de controle de acesso aos dados chamada THREAD. Imagine se dois usuários ao mesmo tempo pedissem acesso a mesma tabela, assim sendo quando uma solicitação de acesso á uma tabela se chama THREAD. Deste modo, cada pedido de acesso a tabelas gera uma THREAD, para que o DB2 possa controlar tudo.




Usando SQL

Não é muito comum um usuário ou operador estarem usando as tabelas de DB2.

As ferramentas para SQL são:

SPUFI
DSNTEP2
DSNTIAD
DSNTIAUL

Os comandos SQL mais usados no DB2 são:

SELECT*FROM YYYYYYYY.TABLE; - faz uma busca do que foi pedido, o asterisco traz tudo o que estiver na tabela pedida. Se os asterisco for tirado, terá que ter um nome de coluna no lugar. Já que as tabelas usam sitema de colunas e linhas.

O comando SELECT ainda pode ter várias extenções, exemplo:

SELECT*FROM YYYYYYYY.TABLE WHERE SEX='F'; - Vai trazer todas as entradas na tabela em que o SEX seja igual a 'F'.

Podem ser usados os critérios:

=
<>
<=
>=
Of
AND
BETWEEN x AND y
IN (x,y,z)

Pode se usar ainda o critério de ordenar as tabelas:

SELECT*FROM YYYYYYYY.TABLE ORDER BY SEX;

Para evitar que mais de uma coluna com o mesmo nome, é só colocar o parametro DISTINCT:

SELECT DISTINCT ZZZZZZ FROM YYYYYYYY.TABLE - Vai trazer somente o zzzzzz que está na table yyyyyyyy.

Existe ainda opção de usar o SELECT com formula matemática, caso queira por exemplo selecionar somente funcionário que ganhem mais de $500:

SELECT XXXXXXX, YYYYYYYY from ZZZZZZ.TABLE WHERE (SALARY/52)>500;

Vai trazer os funcionários das colunas xxxxxxxx e yyyyyyyyy da tabela zzzzzzzz com salário maior de 500.

Criando Tabelas

CREATE TABLE xxxxxxxxx (yyyyyyyy type); - onde xxxxxxx é o nome da tabela e yyyyyy a coluna. Existem diferentes tipos de coluna a serem criadas, dependendo do tipo de dado que se quer inserir nelas.

Tipos de colunas de dados:

CHAR(n)
VARCHAR(n)
SMALLINT
INTEGER
DECIMAL(p,s)
GRAPHIC(n)
DOUBLE
LONG VARCHAR
BLOB([K/M/G])
CLOB([K/M/G])
DBCLOB([K/M/G])
LONG VARGRAPHIC
TIME
TIMESTAMP
VARGRAPGIC(n)

Veja Exemplo:

CREATE TABLE STAFF
(STAFFNUM DECIMAL(6,0),
SURNAME VARCHAR930),
FIRSTNAME VARCHAR(15),
SALARY DECIMAL(8,2)
DEPTCODE CHAR(4),
SEX CHAR(1) );




Trabalhando com o DB2

Para se trabalhar com o DB2, é necessário usar o prefixo do mesmo, geralmente este é o sinal de - mais as quatro primeiras letras do DB2 Master instalado no sistema. Existe ainda a opção da automação do sistema, que dá ao operador a oportunidade de trabalhar com qualquer task, mas isso será abordado em outro topico.

O comando para ver todos os prefixos no sistema seria 'D O' , vão aparecer todos os prefixos de vários tipos de aplicativos usados neste sistema.

Os comandos para DB2 podem ser enviados de cinco maneiras e lugares diferentes. Via TSO, Console, terminal de IMS, terminal de CICS, e via Jobs.

Via console, os comandos são enviados com prefixo, como mostrados acima.

Pelo TSO tem que se preparar a tela de comandos com o seguinte comando:
'DSN SYSTEM(subsystem-id)' - Então uma opção de comando vai aparecer, daí é só digitar o comando com prefixo.

Via terminal de IMS, todo o comando de DB2 ( prefixo comando DB2 ) vem depois do parametro /SSR ou /SRR. Estes parametros possibilitam de dentro do terminal do IMS enviar um comando para um DB2.

Via terminal de CICS, o comando de DB2 deve ser precedido de DSNC, este parametro no comando possibilita enviar um comando a um DB2 de dentro de um terminal de CICS.

Para inicializar o DB2

prefixo START DB2 - Este comando inicializa o DB2 que já existe no sistema.

Para parar o DB2

prefixo STOP DB2 - Este comando para o DB2.

Para parar o DB2 com parametros

prefixo STOP DB2 MODE(QUIESCE) - Este comando para o DB2, suas conexões e faz um Checkpoint.

prefixo STOP DB2 MODE(FORCE) - Este comando pára o DB2 mas não garante a integridade dos dados.

Após o comando a mensagem que indica que o DB2 está pronto para ser reinicializado é:

DSN3100I - DSN3EC00 SUBSYSTEM XXXX READY FOR START COMAND


Comandos para Database ( Banco de Dados )

prefixo DISPLAY DATABASE (*)

prefixo START DATABASE(name) SPACENAM(space-name) PART(integer) ACCESS(type)

PART = INTEGER - pede o numero de partição (Partition Number ) que se quer inicializar.

ACESS MODE = RW ( read and write), RO ( read only), UT ( for utility ) and FORCE ( forces full acess ).

prefixo STOP DATABASE(name) SPACENAM(space-name)

As Opções para parar o DB2

prefixo STOP DATABASE(*) - Pára todos os Databases.

prefixo STOP DATABASE (name) - Pára um Database específico.

prefixo STOP DATABASE (name) PART (xxxxxxx) - Pára uma partição do Database específico.

prefixo DB (name) SPACe (table spacename) - Pára um específico Tablespace.

Para usar uma THREAD

prefixo DIS THREAD - Mostra o estado das Thread's, e quem é o ao usuário de DB2 que está gerando a mesma.

prefix DIS THREAD(thd name) - mostra os estado de uma Thread específica.

/SSR>DISPALY THREAD - comando usado quando se está em um MTO ( IMS Terminal ).

DSNC -DISPLAY THREAD - comando usado quando se está em um terminal de CICS.


IRLM - IMS Resource Lock Manager

Monitora e gerencia o mecanismo que o DB2 usa para checar integridade do Database, também é chamado de 'Locking'.

Alguns comando para IRLM:

f procname,abend,nodump (onde 'procname' é o nome do IRLM) - Termina o IRLM de modo anormal e sem um 'Dump' que neste caso não seria necessário para analise do problema;

f procname,status - Mostra o estado da IRLM;

start/stop procname - Usados para parar ou inicializar o IRLM. Se foi inicializado manualmente deve ser parado manualmente também.




A Log do DB2

O DB2 mantem um arquivo atualizado de todas as mudanças do seu banco de dados ou qualquer outra ação no seu sistema, este arquivo é chamado de Log Dataset. Esta Log age como um arquivo para recuperação em caso de um Crash do DB2.

Estes dados são escritos em disco (DASD) e o Dataset é chamado de Active Log.

Quando estes arquivos estão cheio vão para um Archive Log, que é um arquivo de Logs, que pode estar em outro disco ou em fita.

Fisicamente o Dataset da Log é um arquivo tipo VSAM Linear Dataset(LDS).

Existem tres tipos de arquivos gravados em um Log Dataset:

Unit Recovery Log Records - Marca dois pontos de consistência no DB2 para que se formem uma unidade de recuperação no caso de um problema e o DB2 precise voltar até o ponto em que estava tudo bem;

Checkpoint Log Records - Faz um Checkpoint de tempos em tempos, e em situações especificas, para que o DB2 não leve muito tempo para reinicializar no caso de uma inicialização de emergencia, pois a imagem do ponto de consistencia costuma ter muitos dados e voltar até o começo de uma desta imagem pode levar muito tempo;

Database Page Set Control Records - São arquivos gerados toda vez que uma tablela ou Index for acessado, aberto ou fechado.


BSDS - DB2 Boot Strap DataSet


É um arquivo tipo VSAM Key Sequenced DataSet (KSDS)

Este arquivo contem informações sobre os Datasets de Logs.

O DB2 mantém duas cópias do BSDS, para o caso de uma das cópias apresentar problemas.

Para recuperar o BSDS, no caso de um dos dois apresentar problemas, o comando é o seguinte:

RECOVER BSDS


O Restart do DB2

O DB2 entra em acordo com o outro sub-sistema que está trabalhando com ele, CICS ou IMS, para estarem em sintonia. Após esse passo, os sub-sistemas entram em sincronia.

O DB2 faz um Back-Out até um ponto de consistencia e verifica se os dados estão em acordo para que possa reinicializar deste ponto. Daí em diante os sub-sitemas estão andando juntos novamente.


Inicialização da Log

Como foi citado antes, todas as mudanças realizadas no DB2 são arquivadas em um Dataset chamado ACTIVE LOG DATASET.

Durante a inicialização da LOG o DB2 emite algumas mensagens, que são conhecidas por os seguintes códigos:

DSNJ130I, DSNJ120I e DSNJ001I

Quando esta última aparecer, a Log está inicialiada com sucesso.


CURRENT STATUS REBUILD ( Estado Atual de Reconstituição )

Neste estado o DB2 determina o estado de todas as unidades de recuperação e determina onde cada uma foi interrompida pela última vez, ou seja, verifica onde ocorreu o último Checkpoint.


FORWARD LOG RECOVERY


Fase na qual são processadas as mudanças dos Databases envolvidos. São encontrados fazendo Scanning da Log e procurando mudanças.

BACKWARD LOG RECOVERY


Fase final de inicialização do DB2, onde se verifica algumas unidades de recuperação específicas.

Despois desta fase o DB2 está oficialmente inicializado.



A seguir, alguns cenários de ERROS NO DB2.

FALHA 1:

IRLM Failure = O DB2 'ABENDA'

DXR013E IRLMname ABEND UNDER IRLM TCB/SRB
DXR017E IRLMname ABEND UNDER IMS/VS TCB/SRB ERROR ID=nn

O QUE SE PODE FAZER:

-Reinicializar o IRLM
-Reinicializar o DB2

E se necessário, conectar o IMS com o DB2:

/START SUSBSYS ssid

E com o CICS:

DSNC STRT x

FALHA 2:

O Sistema não Processa

O QUE SE PODE FAZER:

-Reinicializar o zOS/390
-Reinicialiar todos os aplicativos
-O DB2 deve se conectar ao CICS e IMS automaticamente, se não, usar o processo acima.

FALHA 3:

O DB2 Falha

DSNV086E - DB2 ABNORMAL TERMINATION REASON=xxxxxxxx - DSN3EC00
TERMINATION COMPLETE DSN3100I - DSN3EC00 - SUBSYSTEM db2n READY FOR - START CMD

O QUE SE PODE FAZER:

- Tentar reinicializar o DB2 e suas conexões com o IMS e o CICS
- Procurar possiveis causas do ABEND na LOG do DB2

FALHA 4:

I/O ERROR no BSDS

DSNJ126I - I/O ERROR FORCED SINGLE BSDS MODE
DSNJ107I - READ ERROR ON BSDSTION COMPLETE
DSNAME=name ERROR STATUS=code
DSNJ108I - WRITE ERROR ON BSDSTION COMPLETE
DSNAME=name ERROR STATUS=code

O QUE SE PODE FAZER:

-Um novo BSDS deve ser definido e um RECOVER de BSDS deve ser feito, mas pelo DB2 suporte.




ACESSANDO O DB2


Exitem algumas maneiras de acessar o DB2, uma delas, disponível para quem tem acesso ao TSO do sistema é o DB2I ( DB2 Interactive ). Assim que achar esta opção no ISPF, vai aparecer na primeira tela do DB2I é a DB2I PRIMARY OPTION MENU.
Este menu trará várias opções:

1 - SPUFI - (Proccess SQL Statements) - Work with DATASETS
2 - DCLGEN - (Generate SQL and source language declarations)
3 - PROGRAM PREPARATION - (Prepare a DB2 application program to run)
4 - PRECOMPILE - (Invoke DB2 compiler)
5 - BIND/REBIND/FREE - BIND, REBIND, or FREE applications plans)
6 - RUN - (RUN an SQL programm)
7 - DB2 COMMANDS - Issue DB2 commands)
8 - UTILITIES - (Invoke DB2 utilities)
D - DB2I DEFAULTS - Set global parameters)
X - EXIT - (leave DB2I)

Daí quem estiver trabalhando com o DB2 deve escolher a melhor opção para o que ele necessita.




Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License