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.