Escolar Documentos
Profissional Documentos
Cultura Documentos
1. INTRODUÇÃO..........................................................................................6
Quando um DBMS pode ser considerado RELACIONAL?.....................................6
1.2 Notas................................................................................................7
1.3 Tabela relacional.................................................................................8
1.4 Notas................................................................................................9
2. OBJETOS DO DB2....................................................................................11
2.1 Notas..............................................................................................12
3. PROJETOS COM DB2................................................................................14
3.1 Integridade de referência.....................................................................14
3.2 Notas..............................................................................................15
4.ACESSO AO DB2......................................................................................16
4.1 Notas..............................................................................................16
5. DB2 INTERACTIVE...................................................................................17
5.1 SPUFI..............................................................................................17
5.2 QMF................................................................................................19
5.3 Editando Relatório..............................................................................22
5.4 Salvando a memória............................................................................24
6. LINGUAGEM SQL...................................................................................25
6.1 Notas..............................................................................................25
7. SELECT..............................................................................................26
7.1 Instrução SELECT...............................................................................26
7.2 Tabelas usadas nos exemplos................................................................28
7.3 QUERY............................................................................................30
7.4 Notas..............................................................................................31
7.5 Query em formato livre.......................................................................32
7.6 SELECT .... FROM..............................................................................33
7.7 SELECT de todas as colunas..................................................................34
7.8 Controle de Linhas.............................................................................35
7.9 Exemplos de WHERE...........................................................................36
7.10 Operadores de comparação................................................................36
7.11 Nulidade.......................................................................................37
7.12 Not null with default........................................................................37
7.13 Seleção de nulos.............................................................................37
7.14 Múltiplas Condições.........................................................................38
7.15 In................................................................................................39
7.16 Between.........................................................................................39
7.17 Pesquisas parciais............................................................................40
7.18 Negação........................................................................................41
7.19 User.............................................................................................41
7.20 Manipulando tabela resultante............................................................41
7.21 Order by.......................................................................................42
571774784.doc 1 de 175
DB2
571774784.doc 2 de 175
DB2
571774784.doc 3 de 175
DB2
571774784.doc 4 de 175
DB2
571774784.doc 5 de 175
DB2
1. INTRODUÇÃO
Quando um DBMS pode ser considerado RELACIONAL?
INDEPENDÊNCIA
DOS
DADOS
ESTRUTURA OPERADORES
TABULAR DE DE
DADOS TABELAS
UNIFORMIDADE
E INTEGRIDADE
DOS DADOS
571774784.doc 6 de 175
DB2
1.2 Notas
571774784.doc 7 de 175
DB2
Tabelas EMPREGADOS
Colunas
571774784.doc 8 de 175
DB2
1.4 Notas
Todos os dados e relacionamentos entre dados são representados por valores de campo.
Pointers físicos não são utilizados.
Cada ocorrência de tabela é chamada de linha. Os atributos são chamados de colunas. As
tabelas DB2 são definidas e manipuladas usando-se a linguagem SQL. Todas as tabelas são
referenciados pelo seu NOME.
571774784.doc 9 de 175
DB2
DPROP
IMS DM DB2
DXT
Notas
O DB2 pode ser acessado através do IMS, CICS, TSO e jobs BATCH
simultaneamente. Dados que estiverem em IMS/DM (antigo IMS/DB) podem ser
transferidos para o DB2 através do DPROP (Data Propagator) ou do DXT (Data
Extract).
571774784.doc 10 de 175
DB2
2. OBJETOS DO DB2
Data Base
Tablespace 1
Índice 1 Tabela 1
Tablespace 2
Índice 2 Tabela 2 View X
571774784.doc 11 de 175
DB2
2.1 Notas
Database
Conjunto de tabelas, índices e tablespaces agrupados sob um critério administrativo.
Table (tabelas)
Conjunto de linhas com as mesmas colunas. Representam uma entidade de um modelo
entidade-relacionamento.
Tablespace
Conjunto de datasets VSAM LDS (linear data sets) que contém dados de uma ou mais
tabelas. Suas páginas podem ser de 4k ou 32k. Existem três tipos de tablespaces:
Simples
As páginas de seus data sets podem conter dados de uma ou mais tabelas;
Segmentado
É dividido em segmentos que são constituídos de 4 a 64 páginas e
sempre múltiplos de 4. Cada segmento só pode conter dados de uma
tabela.
Utilização recomendada pois administra melhor o espaço.
Particionado
Recomendado para tabelas gigantes. Pode ser dividido em até 254 partições.
Requer um índice cluster que serve de filtro para determinar a distribuição das
linhas entre as partições.
Índice
Utilizado para agilizar a leitura de dados ou para garantir a unicidade dos dados.
Existem três tipos de índices:
Unique
Força a unicidade dos dados através dos valores de uma coluna escolhida como
chave única.
571774784.doc 12 de 175
DB2
Cluster
A seqüência física das linhas procura obedecer a seqüência das entradas do
índice. Existem utilitários que reorganizam um tablespace através do índice
cluster de suas tabelas.
Normal
View
É uma tabela lógica que é um subconjunto de uma ou mais tabelas. Sua utilização em
nada difere com a de uma tabela. Conforme o caso uma View pode ser somente para
leitura. Mais detalhes no item de definição de uma View no capítulo de DDL.
Storage Group
É um conjunto de volumes (discos) onde estarão os tablespaces e índices. Os discos
devem ser do mesmo device type (3375, 3380, etc..)
A utilização do storage group nos poupa da codificação do AMS de VSAM para definir os
data sets de um tablespace.
Os discos de um storage group não precisam ser dedicados ao DB2.
Sinônimo (SYNONYM)
É um NOME alternativo (apelido) para uma tabela ou uma View. Uma vez criado, a sua
utilização é restrita a um auth-id e válido em nível de subsistema DB2.
Alias
É um NOME alternativo (apelido) para uma tabela ou View. Um alias é de uso
compartilhado ao contrário do sinônimo. É utilizado mais como apelido para uma tabela
remota e é válido em nível de subsistema DB2.
571774784.doc 13 de 175
DB2
Chave Chave
Estrangeira primária
EMPR DEPT
(dependent) (parent)
MATR NOME DEPT DCODIGO DNOME
491 MARIA A00 A00 VENDAS
003 CARLOS Z13 V75 CONTABILIDADE
: : : Z13 RESERVA
: :
INTEGRIDADE
REFERENCIAL
571774784.doc 14 de 175
DB2
3.2 Notas
A integridade de referência garante que qualquer valor apontado pela chave
estrangeira tenha uma valor correspondente na chave primária à qual está
associada.
A integridade de referência é implementado no DB2 via DDL (instruções de definição de
objetos da linguagem SQL).
No DB2 a integridade de referência obedece às seguintes regras.
Uma chave primária tem valor único e não nulo.
Uma chave estrangeira é nula ou tem valor correspondente na chave primária
Tanto na inserção como na atualização de linhas, o DB2 força a observação destas regras.
Todas as tabelas associadas entre si via regra de integridade de referência formam um conjunto
chamado de estrutura referencial ou referencial structure.
Uma tabela com chave primária definida é chamada de parent table ou tabela mãe.
Uma tabela com chave estrangeira definida é chamada de dependent table ou tabela
dependente.
Uma linha de uma parent table é chamada de parent row ou linha mãe se existir pelo
menos uma linha na tabela dependente com chave estrangeira correspondente à sua
chave primária.
Uma linha de uma dependent table é chamada de dependent row ou linha dependente
se existir uma linha mãe com valor de chave primária correspondente a da sua chave
estrangeira. Em outras palavras a chave estrangeira não deve ter valor nulo para ser
uma linha dependente.
Na eliminação de uma linha da tabela mãe, podem ocorrer situações conforme a regra
de deleção estabelecida pela chave estrangeira.
CASCADE : regra onde todas as linhas dependentes são eliminadas juntamente com a
mãe.
SET NULL : regra onde as chaves estrangeiras das linhas dependentes são atualizadas
com valor nulo após eliminação da mãe.
RESTRICT : regra onde a eliminação da linha mãe é impedida. Neste caso somente as
linhas que não são mães podem ser eliminadas.
571774784.doc 15 de 175
DB2
4.ACESSO AO DB2
TSO ATT. TSO ATT CAF CICS ATT. CICS ATT. IMS ATT.
DB2
BANCO
DE DADOS
4.1 Notas
Os Attachment Facilities são interfaces que permitem aos programas a emissão de CALL’s
para o DB2.
Para cada monitor de transação (CICS, IMS, TSO) temos um attachment
específico. Para aqueles que não vão trabalhar com estes monitores existe a
alternativa de ser utilizar o CAF (Call Attachment Facility).
O DB2 é um programa que é instalado com o DB2 e utiliza o TSO Attachment. O DB2
oferece uma série de recursos e é basicamente uma ferramenta para os que atuam na área
de suporte.
O QMF é um programa produto que pode ser executado sob TSO ou sob CICS, lançando mão
do TSO Attachment ou do CICS Attachment.
O QMF é um gerador de relatórios que acessa tabelas relacionais. É voltado
para o usuário final, mas é comum a sua utilização pelo pessoal de suporte.
571774784.doc 16 de 175
DB2
5. DB2 INTERACTIVE
Ferramenta interativa
Recursos
Execução de instruções SQL (SPUFI)
Execução de comandos DB2
Preparação de programas de aplicação
Execução de utilitários
5.1 SPUFI
DB2
SPUFI
Edit Execute Browse
INPUT DS OUTPUT DS
(SELECT..) (Relatório)
5.1.1. Notas
571774784.doc 17 de 175
DB2
O SPUFI dirige o seu usuário para um ciclo de trabalho que consiste basicamente de três
fases:
Edit
Edição de arquivo de entrada onde é codificada uma ou mais instruções SQL
Execute
O DB2 interpreta a instrução SQL do arquivo de entrada e a executa.
Browse
Mostra o arquivo de saída com um relatório do resultado da execução.
571774784.doc 18 de 175
DB2
5.2 QMF
DB 2
5.2.1 Notas
571774784.doc 19 de 175
DB2
PF6 PF9
Edita Altera
QUERY FORMATO
PF2 PF12
Examina Relatório
571774784.doc 20 de 175
DB2
5.2.3 Notas
571774784.doc 21 de 175
DB2
REPORT REPORT
RELATÓRIO RH
NOME SAL FUNCIONÁRIO SALÁRIO
SILVA 45000,00 SILVA $45.000,00
JOHNSON 20000,00 JOHNSON $20.000,00
SERRA 30000,00 SERRA $30.000,00
OLIVEIRA 190000,00 OLIVEIRA $190.000,00
5.3.1 Notas
Uma das características principais do QMF está na sua capacidade de permitir
a elaboração de relatórios complexos.
Para se editar um relatório, a área de dados deve estar carregada via execução de uma
query, por exemplo.
Digitada a tecla PF9, o QMF exibe a área de FORM, que vem inicialmente
carregado com um formato default.
No exemplo são mostrados quatro alterações no formato default.
1. Acréscimo do cabeçalho “RELATÓRIO RH”.
2. Alteração do NOME do cabeçalho da coluna NOME para FUNCIONÁRIO.
3. Alteração do NOME do cabeçalho da coluna SAL para SALÁRIO.
571774784.doc 22 de 175
DB2
4. Alteração do código de edição da coluna SALÁRIO para que seja exibida o caracter “$”.
Outras alterações possíveis no formato default:
Acréscimo de rodapé
Quebra de página por valor de coluna
Cabeçalho e rodapé para cada quebra de página
Quebras encadeadas em múltiplos níveis
Cabeçalhos e rodapés com texto dependente dos dados
Expansão dos dados de uma linha em múltiplas linhas
Quebra e relatórios grandes (> 132 caracteres por exemplo) em páginas físicas menores
Etc.
571774784.doc 23 de 175
DB2
QMF DB2
FORM
QUERY
REPORT DATA
QUERIES DATA
FORMS
TABELAS DE QMF
5.4.1 Notas
571774784.doc 24 de 175
DB2
6. LINGUAGEM SQL
SQL
STRUCTURED
QUERY
LANGUAGE
SELECT
UPDATE CREATE GRANT
DELETE ALTER REVOKE
INSERT DROP COMMIT
6.1 Notas
A linguagem SQL pode ser separado em três grupos :
DML
Data Manipulation Language, utilizado para fazer pesquisas e atualizações
nas tabelas DB2;
DDL
Data Definition Language, utilizado para definir, alterar e eliminar objetos DB2.
CONTROL
Utilizado para administrar a segurança dos recursos DB2;
571774784.doc 25 de 175
DB2
7. SELECT
Não é procedural
Conceito da teoria dos conjuntos
Fácil
7.1.1 Notas
A instrução SELECT não é procedural. Em outras palavras não precisam fornecer todos os
procedimentos necessários para fazer uma pesquisa tais como:
1. Zere o contador
2. Abra o arquivo
3. Leia um registro
4. Verifique se satisfaz o critério de pesquisa
5. Incremente o contador
6. Etc.
571774784.doc 26 de 175
DB2
União A B
A B
Intersecção A B
A B
Diferença A – B
A B
Produto cartesiano
A X B = { (x,y) : x A e y B }
571774784.doc 27 de 175
DB2
X.STAFF
ID NOME DEPT CARGO ANOS SALÁRIO COMIS
10 SANTANA 20 GER 7 18357,50 -
20 ORSINI 20 VENDAS 8 18171,50 612,45
30 DANTAS 38 GER 5 17506,75 -
40 D’BRIEN 38 VENDAS 6 18006,00 846,55
50 SOUZA 15 GER 10 20659,80 -
60 SUZUKI 38 VENDAS - 16808,30 650,25
70 ALMEIDA 15 VENDAS 7 16502,83 1152,00
80 JAMES 20 ATEND - 13504,60 128,20
90 KOONITZ 42 VENDAS 6 18001,75 1386,70
100 PLOTZ 42 GER 7 18352,80 -
110 NGAN 15 ATEND 5 12508,20 206,60
120 NAUGHTON 38 ATEND - 12954,75 180,00
130 YAMAGUCHI 42 ATEND 6 10505,90 75,60
140 FRAYE 51 GER 6 21150,00 -
150 OLIVEIRA 51 VENDAS 6 19456,50 637,65
160 MOLINARI 10 GER 7 22959,20 -
170 KERMISCH 15 ATEND 4 12258,50 110,10
180 ABRAHAMS 38 ATEND 3 12009,75 236,50
190 SNEIDER 20 ATEND 8 14252,75 126,50
200 SCOUTTEN 42 ATEND - 11508,60 84,20
210 LU 10 GER 10 20010,00 -
220 SMITH 51 VENDAS 7 17656,50 992,80
230 LUNDQUIST 51 ATEND 3 13369,80 189,65
240 DANIELS 10 GER 5 19260,25 -
250 WHEELER 51 ATEND 6 14460,00 513,30
260 JONES 10 GER 12 21234,00 -
270 LEA 66 GER 9 18555,50 -
280 WILSON 66 VENDAS 9 18674,50 811,50
290 PINHO 84 GER 10 19818,00 -
300 DAVIS 84 VENDAS 5 15454,50 806,10
310 GRAHAM 66 VENDAS 13 21000,00 200,30
320 GONZALES 66 VENDAS 4 16858,20 844,00
330 BURKE 66 ATEND 1 10988,00 55,50
340 VIEIRA 84 VENDAS 7 17844,00 1285,00
571774784.doc 28 de 175
DB2
X.ORG
DEPTCOD DEPTNOME GERENTE DIVISAO LOCAL
10 MATRIZ 160 CENTRO SÃO PAULO
15 CAMPINAS 50 SUDESTE CAMPINAS
20 RIO 10 SUDESTE RIO JANEIRO
38 MINAS 30 SUDESTE B. HORIZONTE
42 BAHIA 100 NORDESTE SALVADOR
51 RECIFE 140 NORDESTE RECIFE
66 RIO GRANDE 270 SUL PORTO ALEGRE
84 PARANÁ 290 SUL CURITIBA
571774784.doc 29 de 175
DB2
7.3 QUERY
Seqüência obrigatória :
571774784.doc 30 de 175
DB2
7.4 Notas
571774784.doc 31 de 175
DB2
7.5.1 Notas
Uma instrução SELECT pode ser escrita em formato livre desde que as cláusulas estejam
obedecendo à seqüência obrigatória.
571774784.doc 32 de 175
DB2
Resultado :
DEPTONOME DEPTOCOD
MATRIZ 10
CAMPINAS 15
RIO 20
MINAS 38
571774784.doc 33 de 175
DB2
Para selecionar todas as colunas de uma tabela na mesma seqüência em que foram
definidas :
Resultado:
571774784.doc 34 de 175
DB2
WHERE
Traz certas linhas
Estabelece condições
Exemplo :
Listar empregados do departamento 20
571774784.doc 35 de 175
DB2
= Igual
<> or = Diferente
> Maior
>= Maior ou igual
< Menor
<= Menor igual
> Não maior
< Não menor
Exemplos :
SELECT NOME, DEPT, ANOS FROM X.STAFF WHERE CARGO <> ‘GER’
571774784.doc 36 de 175
DB2
7.11 Nulidade
571774784.doc 37 de 175
DB2
Resultado:
NOME CARGO COMIS
Orsini Vendas 612.45
O’brien Vendas 846.55
Suzuki Vendas 650.25
Almeida Vendas 1152.00
James Atend 128.20
Resultado :
NOME CARGO SALÁRIO
Suzuki Vendas 16808.30
Almeida Vendas 16502.83
Re su lt ad o :
NOME CARGO SALÁRIO
Orsini Vendas 18171.25
O’brien Vendas 18006.00
Suzuki Vendas 16808.30
Almeida Vendas 16502.83
James Atend 13504.60
571774784.doc 38 de 175
DB2
Re su lta do :
NOME CARGO ANOS SALÁRIO
Koonitz Vendas 6 1386.70
Jones Ger. 12 -
Graham Vendas 13 200.30
Vieira Vendas 7 1285.00
Não eqüivale a :
WHERE CARGO = ‘VENDAS’ AND (COMIS > 1200 OR ANOS > 10)
Resultado :
7.15 In
7.16 Between
571774784.doc 39 de 175
DB2
Eqüivale a
SELECT NOME, CARGO, ANOS FROM X.STAFF
WHERE ANOS >= 9 AND ANOS <=1
Resultado :
NOME CARGO ANOS
Souza Ger. 10
Lu Ger. 10
Lea Ger. 9
Wilson Vendas 9
Pinho Ger. 10
O operador ESCAPE permite que seja utilizado outro caracter no lugar do ‘%’
Exemplo :
WHERE COLUNA LIKE ‘100+%%’ ESCAPE ‘+’
571774784.doc 40 de 175
DB2
7.17.1 Notas
No exemplo estamos procurando strings que começam por ‘100%’.
O primeiro ‘%’ é interpretado como um caracter comum pois é precedido pelo caracter ‘+’
que foi definido através do operador ESCAPE.
O segundo ‘%’ é interpretado como um conjunto de caracteres quaisquer pois não é
precedido por nenhum caracter escape.
Neste exemplo, quaisquer ocorrência do ‘+’ que não sejam ‘++’, ou ‘+%’ ou ‘+_’ provoca
erro.
7.18 Negação
7.19 User
Registro especial
Authorization ID do tempo de execução
Comprimento fixo de 8
Útil para query dependente de executor
571774784.doc 41 de 175
DB2
7.21 Order by
Resultado :
NOME CARGO ANOS
Davis Vendas 5
Gafney Atend 5
Pinho Ger. 10
Vieira Vendas 7
Resultado :
571774784.doc 42 de 175
DB2
7.21.1 Notas
571774784.doc 43 de 175
DB2
Múltiplas - colunas
SELECT DISTINCT DEPT, CARGO FROM X.STAFF
DEPT CARGO
10 Ger.
15 Atend
15 Ger.
15 Vendas
20 Atend
20 Ger.
20 Vendas
38 Atend
571774784.doc 44 de 175
DB2
7.22.1 notas
Exemplo :
SELECT DISTINCT DEPT, CARGO FROM X.STAFF ORDER BY CARGO
DEPT CARGO
15 Atend
20 Atend
38 Atend
: :
10 Ger.
15 Ger.
20 Ger.
: :
15 Vendas
20 Vendas
+ SOMA * MULTIPLICAÇÃO
- SUBTRAÇÃO / DIVISÃO
571774784.doc 45 de 175
DB2
Resultado :
ID SALÁRIO COMIS
10 18357.50 - -
20 18171.25 612.45 18783.70
80 13504.60 128.20 13632.80
190 14252.75 126.50 14379.25
Obs.: Quando qualquer operação envolver nulo o resultado é nulo
Resultado :
NOME
Oliveira 20094.15
Graham 21200.30
Exemplo 1:
SELECT NOME, SALÁRIO + COMIS FROM X.STAFF
WHERE SALÁRIO + COMIS > 20000 ORDER BY 2 DESC
Exemplo 2 :
SELECT CARGO, SALÁRIO + COMIS FROM X.STAFF
ORDER BY CARGO, 2
571774784.doc 46 de 175
DB2
Resultado :
Jones.john p.
Marques.franco x.
Obs.: O caracter ! ! também pode ser utilizado para concatenação
571774784.doc 47 de 175
DB2
8. SELECT AVANÇADO
Dados numéricos
SUM - Total dos valores de uma coluna
AVG - Média dos valores de uma coluna
Quaisquer tipos de dados
MIN - Menor valor de uma coluna
MAX - Maior valor de uma coluna
COUNT – Número de ocorrências
8.2.1 Notas
Informações detalhadas não podem ser mostradas. Por exemplo se for pedida a média
salarial por departamento, os valores da coluna NOME não podem ser mostrados.
Nulos são ignorados nos cálculos
Exemplo :
Resultado :
---------------------- ----------------------- ----------------------- -----------------------
86076.20 17215.240000000 55.50 844.00
571774784.doc 48 de 175
DB2
8.3.1 Notas
8.4 Count
Resultado :
------------------------ ------------------------------- ------------------------
8 16 19604.190625000
571774784.doc 49 de 175
DB2
8.5 Literais
Resultado :
------------------------------- --------------------------------
513.31 12319.45
8.5.1 Notas
8.6 Group by
Com o GROUP BY, a column function calcula um valor para cada agrupamento.
SELECT SUM(SALÁRIO), SUM(COMIS) FROM X.STAFF
WHERE CARGO <> ‘GER’ GROUP BY DEPT
Resultado :
------------------------ ----------------------------
41269.53 1468.70
571774784.doc 50 de 175
DB2
45928.60 867.15
59778.80 1913.30
Resultado :
DEPT ------------------- ------------------
15 41269.53 1468.70
20 45928.60 867.15
38 59778.80 19123.30
8.6.1 Notas
A função desta cláusula é mostrar informações calculadas por grupo de dados. Note que o
resultado é classificado.
Isto porque o GROUP BY classifica a tabela numa fase intermediária para
facilitar o cálculo para os grupos.
A classificação se dá em ordem ascendente a menos que exista um índice definido para a
coluna. Neste caso a classificação não é feita.
A seqüência obedecerá a seqüência do índice que pode estar definida como sendo de
ordem descendente.
Resultado :
DEPT
20 45928.60 867.15
: : :
571774784.doc 51 de 175
DB2
15 41269.53 1468.70
: : :
38 59778.80 1913.30
8.7.1 Notas
Podemos fazer GROUP BY sobre múltiplas colunas. Isto faz com que sejam
formados subgrupos dentro de grupos.
GROUP BY DEPT, CARGO
Colunas ‘GROUP BY’ não precisam ser referenciadas pelo SELECT.
Mas colunas referenciadas pelo SELECT que não sejam função precisam ser agrupadas
pelo ‘GROUP BY’ . Isto é um erro muito freqüente.
O resultado contém uma linha sumário para cada grupo.
Todos os valores nulos são considerados como um grupo.
Filtros
GROUP BY ....
HAVING ...
571774784.doc 52 de 175
DB2
8.8.1 Notas
A função desta cláusula é eliminar alguns grupos gerados pela cláusula GROUP BY. Os
próximos exemplos ilustram o efeito do HAVING.
8.8.2 Exemplos
DEPT -----------------
10 83463.45
15 61929.33
20 64286.10
38 77285.55
42 58369.05
DEPT -----------------
10 83463.45
38 77285.55
: :
571774784.doc 53 de 175
DB2
SELECT DEPT, AVG(SALÁRIO) FROM X.STAFF WHERE CARGO <> ‘GER’ GROUP BY DEPT
HAVING MIN(ANOS) >= 5 ORDER BY 2 DESC
8.8.3 Notas
O primeiro exemplo mostra que o SELECT e o HAVING podem usar funções diferentes
O segundo exemplo ilustra que a tabela resultante pode ser classificada
571774784.doc 54 de 175
DB2
8.10.1 Notas
Resultado :
DEPTNOME ---------------------------------
Matriz Matri
Campinas Camp
Rio Rio
Minas Mina
Bahia Bahi
571774784.doc 55 de 175
DB2
8.11.1 Notas
Se o comprimento não for especificado, a função será aplicada para todo o resto
Se a posição do início ultrapassar o final do string teremos erro
Se o inicio + comprimento ultrapassar o final do string teremos erro
Substring de nulo é nulo.
Resultado :
NOME ----- CARGO ----
Santana 7 Ger. 6
Orsini 6 Vendas 6
Gonzales 8 Vendas 6
8.12.1 Notas
571774784.doc 56 de 175
DB2
Resultado :
ID COMIS -----------------
10 - 0.00
20 612.45 612.45
30 - 0.00
40 846.55 846.55
8.13.1 Notas
Dada uma lista de argumentos, esta função faz a varredura da esquerda para a
direita até encontrar o primeiro valor não nulo.
Todos os argumentos devem ter data types compatíveis (todos numéricos ou todos
caracteres).
Se todos os argumentos forem nulos, o resultado será nulo.
17506.7 17506
571774784.doc 57 de 175
DB2
8. 15 . 1 Not as
571774784.doc 58 de 175
DB2
Duração simples
Duração rotulada
Número “n” seguido da palavra chave :
- YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MICROSECONDS
Somando / Subtraindo duração
Data + ou – duração(data) - Resulta em data
DATACOL1 + 3 MONTHS
Horário + ou – duração(tempo) - Resulta em horário
TEMPCOL1 – 30 MINUTES – 20 SECONDS
Timestamp + or – duração(data) - Resulta em
Timestamp + or – duração(tempo) – Timestamp
TSTCOL + 2 DAYS – 3 HOURS
TMSTCOL + 50000 MICROSECONDS
Subtraindo datas e tempos
Data – data - Resulta em duração
DATACOL1 – DATACOL2
DATACOL1 – ‘1984-12-20’
Horário – horário - Resulta em duração
TEMPCOL1 – TEMPCOL2
’11:30 PM’ – TEMPCOL1
571774784.doc 59 de 175
DB2
8.19 Exemplos
Table DT
Resultado :
PRJCOD ----------------- ---------------------
AX001 31/01/1991 31/01/2005
AX002 28/02/1989 30/06/1988
AX003 01/02/1988 01/12/1986
571774784.doc 60 de 175
DB2
Days
Número de dias desde 31/12/0000
SELECT DATAFIM – DATAINI, DAYS(DATAFIM) – DAYS(DATAINI)
FROM DT WHERE PRJCOD = ‘AX001’
Resultado :
------------------------- -----------------------
00150200 5538
(aaaammdd) (n.º dias)
Date, time
Current date
Data de corrente (do dia)
Current time
Horário corrente
Current timestamp
Data e horário corrente convertido para timestamp
SELECT * FROM DT WHERE DATAINI < CURRENTE DATE – 90 DAYS
571774784.doc 61 de 175
DB2
Mesmo domínio
ID NOME DEPT
10 Santana 20
20 Orsini 20
30 Dantas 38
40 O’Brien 38 Deptcod Deptnome Gerente
50 Souza 15 10 Matriz 160
60 Suzuki 38 15 Campinas 50
70 Almeida 15 20 Rio 10
80 James 20 38 Minas 30
90 Koonitz 42 42 Bahia 100
100 Plotz 42 51 Recife 140
: : : : : :
Esta técnica serve para obtermos informações que estão espalhadas em uma ou mais
tabelas
Tabelas são relacionadas via dados comuns
Join implementado pela cláusula FROM
Resultado é subconjunto do produto cartesiano das tabelas
Para capturar linhas que não possuam correspondência, pode-se utilizar o chamado
“outer join”.
571774784.doc 62 de 175
DB2
X.ORG X.STAFF
DEPTNOME GERENTE DIVISÃO ID NOME
: : 30 DANTAS
MINAS 30 SUDESTE : :
BAHIA 100 : 100 PLOTZ
: : : : :
Resultado :
DEPTONOME NOME
Rio Santana
Minas Dantas
Campinas Souza
: :
571774784.doc 63 de 175
DB2
SELECT ID, NOME, DEPT, DEPTNOME, CODPEDIDO FROM X.STAFF, X.ORG, X.VENDAS
WHERE DEPT=DEPTCOD AND ID=COD_RVENDA
Resultado:
ID NOME DEPT DEPTNOME CODPEDIDO
20 Orsini 20 Rio 3456
20 Orsini 20 Rio 6667
20 Orsini 20 Rio 3580
20 Orsini 20 Rio 7010
40 O’Brien 38 Minas 4567
8.24 Qualificadores
Solução :
Qualificar com NOME de tabela
SELECT NOME, X.ORG.CODIGO, DEPTNOME FROM X.STAFF, X.ORG
WHERE CARGO = ‘GER’ AND DEPT = X.ORG.CODIGO
Qualificador correlacionado
571774784.doc 64 de 175
DB2
8.24.1 Notas
Aqui neste exemplo temos um caso onde duas colunas de tabelas distintas tem o mesmo
NOME.
A solução para distingui-las é qualificar o NOME da coluna com o NOME da tabela.
Outra técnica é a utilização do qualificador correlacionado onde atribuímos um rótulo à
tabela.
No nosso exemplo a tabela X.ORG foi rotulada como “O”. Assim a coluna O.CÓDIGO é uma
referência à coluna X.ORG.CÓDIGO
Esta rotulação não é permanente e vale somente durante a execução da instrução SELECT
que faz uso da mesma.
Solução :
SELECT E.NOME, E.SALÁRIO, G.NOME, G.SALÁRIO FROM VEMPR E, VEMPR G WHERE
E.GER = G.MATR AND E.SALÁRIO > G.SALÁRIO
571774784.doc 65 de 175
DB2
Resultado :
NOME SALÁRIO NOME SALÁRIO
Oliveira 19456.50 Santana 18357.50
: : : :
8.25.1 Notas
Algumas pesquisas podem ser feitas mediante o artifício de tratar uma tabela como se
fossem duas tabelas distintas. No nosso exemplo a tabela VEMPR foi tratada como as
tabelas “E” de empregados e “G” de gerentes.
Este problema é clássico e poderia ser resolvido pela técnica de subquery que é o nosso
próximo tópico.
8.26 Union
: :
UNION
SELECT B3, B4 + B2 FROM TBLB WHERE B1 >= ‘N’
Resultado :
: :
8.26.1 Notas
571774784.doc 66 de 175
DB2
Resultado :
CARGO
Vendas 21420.0000
- -
- -
- -
Vendas 17144.4660
Atend 16918.2000
Vendas 16832.8866
- -
571774784.doc 67 de 175
DB2
Do primeiro SELECT
NOME NOME
Jacobs Arantes
Marques Jacobs
Arantes Marques
Silva Silva
Marques
Jacobs
8.27.1 Notas
9. SUBQUERY
SNOME DEPARTAMENTO
DCOD DSUPER
571774784.doc 68 de 175
DB2
9.1.1 Notas
571774784.doc 69 de 175
DB2
Resultado :
NOME SALÁRIO
Santana 18357.50
Orsini 18171.25
: :
Resultado:
NOME SALÁRIO
Molinari 22959.20
571774784.doc 70 de 175
DB2
9.4.1 Notas
Quando o SELECT interno retorna mais que uma linha, passa a ser necessário o emprego de
um dos seguintes operadores : ALL, ANY, SOME ou IN.
571774784.doc 71 de 175
DB2
Lista classificada dos funcionários com salário maior que a média salarial de
algum departamento
.
Encontrar a média salarial para cada departamento
(SELECT AVG(SALÁRIO) FROM X.STAFF GROUP BY DEPT)
Resultado :
20865.862500000
15482.332500000
9.6 In
571774784.doc 72 de 175
DB2
SELECT DEPT, NOME FROM X.STAFF WHERE ID IN (SELECT GERENTE FROM X.ORG WHERE
DIVISÃO=’SUL’)
SELECT DEPT, AVG(SALÁRIO) FROM X.STAFF WHERE CARGO <> ‘GER’ GROUP BY DEPT
HAVING AVG(SALÁRIO) < (SELECT AVG(SALÁRIO) FROM X.STAFF WHERE CARGO <> ‘GER’)
ORDER BY 2 DESC
Resultado :
DEPT
66 16880.175000000
51 16235.200000000
84 15443.000000000
20 15309.530000000
571774784.doc 73 de 175
DB2
SELECT ID, NOME, SALÁRIO, DEPT FROM X.STAFF WHERE CARGO =’GER’ AND SALÁRIO <
18000 AND EXISTS (SELECT * FROM X.STAFF WHERE CARGO = ‘GER’ AND SALÁRIO > 22000)
9.9.1 Notas
571774784.doc 74 de 175
DB2
VALUE [expression ]
, ISO
, USA
, EUR
, JIS
, LOCAL
Resultado :
PCODIGO PNOME DEPT RESP EQUIPE DATAINI DATAFIM
------------ ---------- ------ --------- ---------- --------- -----------
------------ ---------- ------ --------- ---------- ---------- -----------
OP2011 Suporte sistema E21 000320 001.00 19820101 19880201
OP2012 Suporte aplicação E21 000330 001.00 19820101 19880201
OP2013 Suporte DB/DC E21 000340 001.00 19820101 198800201
---------- ---------- ----- --------- --------- ---------- -----------
MA2114 B01 -------- ? 19880920 ?
571774784.doc 75 de 175
DB2
TESTPROJ
PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM
Resultado :
PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM
PL2100 -------- B01 000020 001.00 19870101 19870915
OP1010 Operação E11 000090 005.00 19860101 19880501
OP2010 Suporte sistema E21 000100 004.00 19820101 19880201
OP2011 -------- E21 000320 001.00 19820101 19880201
OP2013 -------- E21 000340 001.00 19820101 19880201
Antes :
PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM
----------- ----------------- -------- -------- ----------- ------------ -------------
MA2113 W L Controle D11 000090 005.00 19840215 19870201
PL2100 ---------------- B01 000020 002.00 19870601 ?
--------- ---------------- ---- --------- ---------- ------------ -------------
OP2012 Suporte aplicação E21 000330 001.00 19820101 19880201
OP2013 Suporte DB/DC E21 000340 001.00 19820101 19880201
MA2114 B01 ? 19870601 ?
Um subconjunto de linhas
UPDATE PESSOAL SET SALÁRIO = SALÁRIO + 300 WHERE CARGO = ‘ATEND’
Todas as linhas
UPDATE PESSOAL SET ANOS = ANOS + 1
571774784.doc 76 de 175
DB2
Ant es :
Depoi s :
Ant es
571774784.doc 77 de 175
DB2
Depoi s
Create
Definição de objetos
Alter
Alteração da definição dos objetos
Drop
Eliminação de objetos
12.1 Notas
A Data Definition Language (DDL) faz parte das instruções SQL e divide-se em três
grupos.
Instruções CREATE
Definição de um objeto com fornecimento de vários parâmetros
Instrução ALTER
Alteração da definição de um objeto já existente. Nem todas as características são
alternáveis
Instruções DROP
Eliminação da definição de um objeto existente
A execução de DDL é permitido somente à auth-id’s devidamente autorizados.
O criador (auth-id) do objeto é normalmente o proprietário (owner) do mesmo. Mas o DB2
permite que sejam criados objetos para outros auth-id, isto é, posso criar objetos das quais
não serei o proprietário.
O proprietário de um objeto tem todos os privilégios sobre o mesmo.
A equipe de suporte (SYSADM, SYSCTRL, DBADM) ou proprietário do objeto é o responsável
pela concessão de autorização para acesso e/ou uso dos objetos.
A execução das instruções ALTER ou DROP estão reservadas à equipe de suporte ou ao
proprietário dos objetos.
571774784.doc 78 de 175
DB2
12.2.1 Notas
O nome de um storage group não deve ultrapassar 8 caracteres.
Podem ser especificados até 133 volumes do mesmo device type (3375, 3380, 3390) no
parâmetro VOLUMES.
VCAT aponta para o catálogo ICF que qualificará os datasets dos tablespaces e dos
indexspaces.
13. DATABASE
13.1 Notas
571774784.doc 79 de 175
DB2
13.2 Tablespace
13.2.1 Notas
571774784.doc 80 de 175
DB2
SECQTY
Alocação secundária em Kbytes para o dataset do tablespace. O número deve ser
inteiro.
ERASE
Especifica se o espaço ocupado pelos datasets devem ser preenchidos com zero quando
forem eliminados (DROP). Default é No.
LOCKSIZE
Especifica a glanularidade do locking. Portanto é um importante parâmetro de
performance. Pode ser :
ROW / PAGE
Locking em nível de linha ou página
ANY
É o valor default para o parâmetro LOCKSIZE. Com este valor a decisão pela
glanularidade fica por conta do DB2.
TABLE
Locking em nível de tabela
TABLESPACE
Locking em nível de tablespace
BUFFERPOLL
Importante parâmetro que determina o tamanho das páginas do tablespace. Este valor
aponta para o conjunto de buffers que será associado com o tablespace. As opções são
BP0 (pág. De 4K), BP1 (pág. De 4K) ou BP32K (pág. De 32K).
CLOSE
Especifica se o dataset do tablespace deve ser fechado quando não está sendo
utilizado. O default é YES.
FREEPAGE
Especifica o intervalo de páginas que devem existir entre as páginas livres quando um
tablespace é carregado ou reorganizado. O intervalo pode variar de 0 (sem página livre)
571774784.doc 81 de 175
DB2
13.3 Tabela
571774784.doc 82 de 175
DB2
ALTER TABLE.DB01.DETP
ADD COLX DECIMAL(8.2)
13.3.1 Notas
Especificação de Chaves
PRIMARY KEY
Especifica a chave primária da tabela
A chave pode ser composta de até 64 colunas.
571774784.doc 83 de 175
DB2
A palavra chave LIKE especifica que a tabela a ser criada deverá ter as mesmas colunas
com todos os seus atributos de nome, tipo de dado e nulidade. Demais atributos da tabela
como chave primária, chave estrangeira e rotinas de exit não são reproduzidos.
571774784.doc 84 de 175
DB2
Integer
Inteiros + or – 2 G
Int
Decimal(x,y) x dígitos Até 31
Dec(x,y) com y decimais Dígitos
Float(m) Precisão simples 5.4E-79 to
Real Ponto flutuante** 7.2E + 75
Float
Dupla precisão 5.4E – 79 to
Float(n)
Ponto flutuante** 7.2E + 75
Double precision
* Aproximadamente
** 1 <= m <= 21
22 <= n <= 53
Para decimal, defina X como número ímpar, para melhor utilização de espaço.
571774784.doc 85 de 175
DB2
571774784.doc 86 de 175
DB2
Date aaaammdd
Time hhmmss
Timestamp aaaammddhhmmssnnnnnn
(nnnnnn = microsegundos)
13.4 Índice
571774784.doc 87 de 175
DB2
PRIQTY 40 SECQTY 4
ERASE NO
BUFFERPOOL BPO
CLOSE NO
FREEPAGE 4
PCTFREE 15
13.4.1 Notas
571774784.doc 88 de 175
DB2
13.6 View
13.6.1 Notas
571774784.doc 89 de 175
DB2
A VIEW acima não permite que o usuário atualize a coluna SALÁRIO de qualquer linha
para um valor maior ou igual a 1000.
COMMENT ON EMPR
(MATR IS ‘ MATRÍCULA ÚNICA DO FUNCIONÁRIO’
COMIS IS ‘COMISSÃO DO FUNCIONÁRIO’)
LABEL ON EMPR
(MATR IS ‘MATRÍCULA’
DEPT IS ‘DEPARTAMENTO’
DATADIM IS ‘DATA_ADMISSÃO’)
571774784.doc 90 de 175
DB2
13.8 Drop
CRIE
Objetos DATA BASE STORAGE GROUP
571774784.doc 91 de 175
DB2
Nesta
Ordem
TABLE SPACE
TABLE
INDEX S
Y
VIEW N
O
N
SYNONYM Y
M
13.9.1 Notas
Os objetos DB2 são quase todos dependentes entre si. A figura ilustra a hierarquia entre
eles.
Assim, quando definimos um índice é preciso associá-lo à uma tabela. Se esta tabela for
eliminada, o índice perde a razão de sua existência e também será eliminado.
Um storage group pode ser eliminado sem problemas. À partir de sua eliminação os data
sets não serão mais criados nos seus volumes. Os eventuais dados que estiverem residindo
em um storage group permanecerão lá até que seja aplicado um utilitário de recuperação
ou de reorganização. A eliminação de uma tabela não implica em eliminação do ALIAS que
o aponta. Este passa a ser inválido.
571774784.doc 92 de 175
DB2
A diferença entre o SQL estático e o dinâmico está no instante em que o plano é montado.
No estático o plano é montado antes da primeira execução do programa. É recomendado
para aqueles casos onde a instrução SQL é completa e estável.
No dinâmico o plano é montado dinamicamente, pouco antes da execução da instrução. No
SQL dinâmico a instrução é parcial ou totalmente desconhecida e o DB2 não tem como
determinar previamente a estratégia de acesso, validar autorização, etc.
Uma instrução onde o desconhecido é apenas o valor que está sendo comparado com uma
coluna na cláusula WHERE é candidata a estático.
Ex.: WHERE SALÁRIO = : SAL AND NOME LIKE : STR
Como exemplos de programas que usam o SQL dinâmico podemos citar o QMF e o SPUFI.
571774784.doc 93 de 175
DB2
N ÃO RE LACI ON AL RE LACI ON AL
COBOL
ASSEMBLER
C SQL SQL
PLI EMBUTIDO
FORTRAN
15.1.1 Notas
571774784.doc 94 de 175
DB2
As colunas não são manipuladas diretamente pelas linguagens tradicionais. Para contornar
isto são utilizadas as chamadas variáveis HOST que “hospedam” o conteúdo das colunas.
15.2.1 Notas
571774784.doc 95 de 175
DB2
COBOL
MOVE ‘C01’ TO DEPT.
DEPT
SQL
EXEC SQL ... WHERE DEPT =: DEPT END-EXEC.
15.3.1 Notas
Variáveis HOST são utilizadas para permuta de valores entre a linguagem SQL e a
linguagem de programação.
Uma das possíveis utilizações de variável HOST é a de fornecer um valor a uma instrução
SQL, tornando- assim uma instrução genérica.
O exemplo mostra um SQL com valor à variável HOST.
1. O programa atribui um valor à variável HOST.
2. O programa executa a instrução SQL onde a referência à variável HOST é substituída
pelo valor previamente atribuído.
A referência à variável HOST deve ser precedida pelo caracter “:”. Seu uso é facultativo
mas recomenda-se sua utilização para evitar possibilidades de confusão.
O uso da variável HOST é opcional. Seu uso é obrigatório somente para as instruções
SELECT.
571774784.doc 96 de 175
DB2
A variável HOST deve ser compatível com a coluna quanto ao seu data type e ao seu
tamanho.
Variáveis adicionais chamadas de variáveis indicadoras são necessárias quando a coluna
pode ter valor nulo. Serão apresentadas mais tarde.
As variáveis HOST não devem ser utilizadas para referenciar NOME de tabelas ou de
colunas.
MATR SNOME
CARGO PERCENT
Variáveis HOST podem ser utilizadas para que o programa passe um valor para a
instrução SQL.
EXEC SQL
571774784.doc 97 de 175
DB2
15.4 Estrutura
EXEC SQL
SELECT SOBRENOME, DEPT SNOME
INTO :SNOME, : DEPT
FROM EMPR DEPT
WHERE MATR = : MATR
END-EXEC. MATR
571774784.doc 98 de 175
DB2
15.4.1 Notas
Uma série contígua de variáveis HOST podem ser agrupadas em um conjunto chamado de
estrutura. Esta estrutura pode ser referenciada e tratada como uma unidade conforme
mostra o exemplo.
Está técnica só é válida para o COBOL e PL/1.
Da do s Nu mé rico s:
DB2 PL/1 COBOL ASSEMBLER FORTRAN
DCL N1 BIN N1 DS H
Smallint 01 N1 PIC S9(4) COMP. INTEGER*2 N1
FIXED(15);
Integer or DCL N2 BIN N2 DS F
01 N2 PIC S9(9) COMP. INTEGER*4 N2
Int FIXED(31);
Decimal (5,2) DCL N3 DEC 01 N3 PIC S9(3)V9(2) N3 DC PL5
REAL*8 N3
Dec(5,2) FIXED(5,2); COMP-3. ‘000.00’
Float(21) or DCL N4 BIN REAL*4 or
01 N4 COMP-1. N4 DS E
Real FLOAT (21); REAL N4
Float or DCL N5 BIN REAL*8 N5 or
Float(53) or FLOAT(53); 01 N5 COMP-2. N5 DS D DOUBLE PRECISION
Double precision N5
15.5.1 Notas
Estas tabelas mostram as correspondências em data type que devem ser observadas na
declaração das variáveis HOST.
O programador pode usar o programa DCLGEN, para gerar variáveis HOST. Ver item
DCLGEN.
571774784.doc 99 de 175
DB2
Dad o s da te / t ime :
DB2 DATE TIME TIMESTAMP
COBOL 01 DT PIC X(10). 01 TM PIC X(8) 01 TS PIC X(26);
PL/I DCL DT CHAR(10). DCL TM CHAR(8); DCL TS CHAR(26);
ASSEMBLER DCL DT CHAR(10); TM DS CL8 TS DS CL26
FORTRAN CHARACTER*10 DT CHARACTER*8 TM CHARACTER*26 TS
Observação:
Dados DATE/TIME são sempre convertidos para o formato caracter no assinalamento às
variáveis host. Definições mostradas são para o padrão USA.
Dat e
ISO : yyy-mm-dd
JIS : yyy-mm-dd
USA : mm/dd/yyyy
EUR : dd.mm.yyyy
Ti me
ISO : hh.mm.ss
EUR : hh.mm.ss
JIS : hh.mm.ss
USA : hh:mm AM ou PM
Ti mest amp :
yyyy-mm-dd-hh.mm.ss.nnnnnn (26 caracteres)
15.6 Processamento de múltiplas linhas
OPEN
(SELECT)
MATR SOBRENOME
000030 KWAN
000290 PARKER
000300 SMITH MATR SNOME
FETCH
MATR SOBRENOME
000030 KWAN
000290 PARKER 000030 KWAN
000300 SMITH MATR SNOME
FETCH
MATR SOBRENOME
000030 KWAN
000290 PARKER 000290 PARKER
000300 SMITH MATR SNOME
15.6.1 Notas
Se o resultado de um SELECT pode ter múltiplas linhas, o programa deve trabalhar com um
CURSOR, pois não tem como prever o tamanho da tabela resultante.
Quando o programa executa um OPEN de um cursor, o DB2 executa o SELECT e a tabela
resultante fica presa, esperando pelo processamento.
O programa deve prover variáveis HOST para cada coluna do cursor.
O programa executa a instrução SQL “FETCH”, para movimentar o cursor para o “próximo
registro”. As variáveis HOST conterão os valores do registro (linha) apontado.
Defi ni r um cursor
EXEC SQL
DECLARE K9, CURSOR FOR
SELECT MATR, SOBRENOME
FROM EMPR
WHERE DEPT = : DEPT
END-EXEC.
Abrir o cursor
EXEC SQL OPEN K9 END-EXEC,
FETCH das linhas resultantes
EXEC SQL
FETCH K9 INTO :MATR, :SNOM END-EXEC.
15.7.1 Notas
A instrução DECLARE CURSOR define a seleção dos dados que deverão compor a tabela
resultante. Um NOME deve ser atribuído à esta tabela, para futuras referências dentro do
programa.
A instrução DECLARE CURSOR não retorna nenhum valor ao programa. Isto é feito pela
instrução FETCH.
No nosso exemplo foi declarado um cursor definido como K9.
A instrução OPEN executa a seleção, que está limitada pelos valores da variável HOST
DEPT. O cursor não está apontando para nenhuma linha.
O FETCH aponta para a primeira linha da tabela resultante. O programa lê o valor das
colunas através das variáveis MATR e SNOM.
Um programa típico emite FETCHs sucessivamente até receber o SQLCODE + 100 na SQLCA,
indicando fim da tabela resultante.
Um programa pode ter vários cursores abertos simultaneamente.
O cursor deve ser fechado com CLOSE quando não é mais necessário. Quando o programa
chega ao fim, o DB2 fecha todos os cursores que não foram fechados.
:
:
EXEC SQL CLOSE CE ;
15.8.1 Notas
Um programa tem a opção de eliminar algumas das linhas apontada pelo cursor.
A instrução DELETE, com a cláusula “WHERE CURRENT OF nome_do_cursor”, faz com que a
linha apontada pela última instrução FETCH seja eliminada.
A estrutura do programa exemplo foi preparada para eliminar linhas apontadas por um
cursor. Isto permite uma decisão pela eliminação ou não da linha pelo exame prévio do
conteúdo das mesmas.
“DELETE WHERE CURRENT OF” não deve ser usado para o cursor cuja instrução
SELECT contém:
ORDER BY
GROUP BY
DISTINCT
UNION
FUNÇÃO
JOIN
EXEC SQL
DECLARE CX CURSOR FOR
SELECT MATR, SOBRENOME
FROM EMPR
WHERE DEPT = : DPT
FOR UPDATE OF SOBRNOME
END-EXEC.
:
:
EXEC SQL OPEN CX END-EXEC.
FETCH CX INTO : MATR, :SNOME END-EXEC.
:
:
EXEC SQL UPDATE EMPR
SET SOBRENOME=:NOVOSN
WHERE CURRENT OF CX END-EXEC.
:
:
EXEC SQL CLOSE CX END-EXEC.
15.9.1 Notas
Um programa pode fazer a atualização de algumas linhas apontadas pelo cursor.
A atualização deve ser feita na linha que está sendo apontada pelo cursor especificado na
cláusula “WHERE CURRENT OF nome_do_cursor”.
Somente as colunas especificadas na cláusula “FOR UPDATE OF lista_de_colunas” da
instrução DECLARE podem ser atualizadas.
A atualização via cursor não é obrigatória.
A instrução DECLARE não pode ter a cláusula “FOR UPDATE OF”, se a instrução SELECT
contiver :
ORDER BY
GROUP BY
DISTINCT
UNION
FUNÇÃO
JOIN
Posicionamento
OPEN
....... ............
....... .............
....... .............
CLOSE
15.10.1 Notas
15.11.1 Notas
Commit
Indica término bem sucedido e uma unidade de trabalho
Alterações dos dados serão gravadas
Todos os LOCKs serão liberados
CURSOR fechado.
Rollback
Unidade de trabalho
Atualização dos dados desde o último COMMIT são desfeitas
Todos os PAGE LOCKS são liberados
CURSOR fechado
COMMIT
CONTA CONTA A B
A B 100 100
t
PONTO DE Novo ponto de
CONSISTÊNCIA UPDATE A UPDATE B consistência
LUW
0 ROLLBACK
LUW
Abortada t
15.13.1 Notas
Uma Logical Unit of Work (LUW) também é conhecida como Unit of Work ou Unit of
Recovery.
Alguns processamentos devem ser logicamente divididos em unidades de processamento ao
término da qual os dados estão consistentes. Estas duas unidades de processamento são
conhecidos como LUW.
No nosso exemplo os dados estão consistentes quando a transferência de fundos está
terminada. Se o processamento fosse interrompido antes do fundo ser adicionado na
segunda conta, teríamos uma situação de inconsistência de dados. Portanto este
processamento não pode ser dividido em mais que uma LUW.
Uma LUW não deve ser interrompida. No caso de interrupção do processamento, as
eventuais atualizações devem ser desfeitas.
Para o DB2 o final de uma LUW é chamada de COMMIT point. Esta situação é
estabelecida :
Ao término normal do programa
Com a execução de um comando dentro do programa
Uma LUW incompleta deve ser desfeita até o último COMMIT point. Este processamento é
conhecido como ROLLBACK.
O ROLLBACK é disparado :
Ao término anormal do programa
Com a execução de um comando dentro de um programa
COMMIT
ROLLBACK
15.14.1 Notas
:s
EXEC SQL UPDATE T
SET Y=:YNOVO, Z=:ZNOVO Atualização
WHERE X= :POSX; de linha corrente
CONT = CONT + 1 ;
:
s CONT < LIM ?
:N
EXEC SQL COMMIT :
15.15.1 Notas
O cursor C1 é declarado com a cláusula WHERE apontado uma ou mais colunas que não
podem ter valores duplicados. No nosso exemplo a coluna em questão é a X. Esta coluna
deve estar na lista do SELECT para que o seu valor seja armazenado na variável HOST.
A instrução SELECT contém a cláusula ORDER BY, pois a lógica de reposicionamento exige
que os dados estejam em uma ordem previsível.
Devido ao ORDER BY, a declaração do cursor não pode conter a cláusula FOR UPDATE OF e
a instrução UPDATE não pode conter a cláusula WHERE CURRENT OF.
Antes do cursor ser aberto, a variável host POSX deve ser inicializado. O contador CONT
também é inicializado.
O OPEN do cursor traz linhas com X maior que o valor POSX e classificadas pela coluna X.
O FETCH traz as linhas seqüencialmente para que o programa decida pela atualização ou
não.
Se uma atualização é requerida, um UPDATE é feito sobre aquela linha apontada pela
POSX. A POSX é sempre atualizada pelo último FETCH. Note que se a coluna X contiver
dados duplicados, o controle passa a ser falho.
Após o UPDATE, o programa deve incrementar o contador CONT.
No exemplo, a cada conjunto de linhas (variável LIM) atualizadas, um COMMIT é executado
e o contador é zerado.
Após a inicialização do contador, o programa reabre o cursor. A tabela resultante é
limitada para aquelas linhas que ainda não foram atualizadas graças à clausula WHERE
filtrando as linhas POSX.
Esta técnica aumenta o acesso à tabela e a classificação é repetida a cada OPEN. A
contrapartida é o aumento da concorrência e diminuição do tempo gasto com um eventual
ROLLBACK.
1 5. 16 . 1 Not as
15.17.1 Notas
SQLWARNx são todos CHAR(1)
Os nomes dos campos são para COBOL, PL/I e ASSEMBLER. São diferentes para o
FORTRAN. Veja Application Programming Guide.
SQLERD(3)
15.18.1 Notas
É no SQLCA que o programa deve verificar o valor do SQLCODE, que descreve o sucesso
ou insucesso da última execução da instrução SQL.
Um valor negativo indica que uma condição de erro foi encontrada e a instrução não foi
executada.
Um valor positivo e diferente de +100 indica que a instrução foi executada mas algumas
condições exigem atenção maior do programa.
O valor + 100 significa que os dados não foram encontrados. Pode ser resultado de um
FETCH que atingiu o fim de uma tabela resultante ou de uma atualização que não
encontrou nenhuma linha em condições de ser atualizada.
O valor zero significa execução bem sucedida.
O campo SQLWARN0 é usado em alguns casos de advertência. Devem ser examinados em
casos de SQLCODE positivos.
O terceiro campo do vetor de inteiros SQLERRD informa a quantidade de linhas afetadas
por uma requisição de alteração de dados (UPDATE, INSERT, DELETE).
Exceção : deleção em massa de uma tabela contida em um tablespace segmentado.
Esta situação é detectada com SQLERRD(3) = -1.
15.19 SQLSTATE
15.19.1 Notas
Um SQLCODE pode corresponder a vários SQLSTATE.
Um SQLSTATE pode corresponder a vários SQLCODE.
O SQLCA contém um novo campo, SQLSTATE, que contém return codes padronizados para
um ambiente de processamento distribuído.
A informação neste campo pode ser útil para determinar o que aconteceu no
APPLICATION SERVER. Informações mais detalhadas podem ser obtidas se o SQLSTATE for
analisado em conjunto com o SQLCODE.
15.20.1 Notas
EXEC SQL
SELECT CARGO, DEPT, FONE, NOME
INTO : CG : CGI, : DPT, : FON:FONI, : NOME
FROM EMPR
WHERE MATR = : ID
END-EXEC.
15.21.1 Notas
Se uma coluna selecionada permitir valor nulo, o DB2 irá requerer uma variável indicadora
para registrar uma eventual nulidade.
Uma variável indicadora é uma halfword(SMALLINT).
Uma variável indicadora deve ser especificada contiguamente à variável HOST
correspondente dentro de uma instrução SQL embutida.
Uma coluna que não aceita valor nulo não requer uma variável indicadora.
Se a coluna apresentar valor nulo em um SELECT ou FETCH, o DB2 atribuirá –1 à variável
indicadora e manterá inalterada a variável HOST.
Se um programa envolvendo UPDATE ou INSERT atribuir –1 à variável indicadora, o DB2
assumirá valor nulo para a coluna correspondente.
EXEC SQL
SELECT CARGO, DEPT, FONE
INTO : ESTRUTURA:VETOR
FROM : EMPR
WHERE MATR = : ID
END-EXEC.
ID ESTRUTURA VETOR
01 ESTRUTURA. 01IND-VETOR.
10 CG PIC... 10 VETOR
10 DPT PIC... PIC S9(4) COMP
10 FON PIC... OCCURS 3 TIMES.
15.22.1 Notas
15.23.1 Notas
Instrução WHENEVER
Manipulação de exceção
DCLGEN
Definição de estrutura de tabela
Instrução INCLUDE
Para embutir estrutura de tabela/SQLCA no programa
DSNTIAR / DSNTIR
Rotina de formatação de mensagem de erro.
Condições
SQLERROR
SQLWARNING
NOT FOUND
Ações
GO TO X
Continue
15.25.1 Notas
Condições
SQLERROR
- SQLCODE negativo
SQLWARNING
- SQLCODE positivo (não + 100)
- Ou SQLWARN0 = “W”
NOT FOUND
- SQLCODE = +100
Ações
GO TO X
- Controle transferido para a instrução rotulada com X
Continue
- Programa continua na próxima instrução
- Cancela afeito do WHENEVER anterior
Esta instrução testa o SQLCODE na SQLCA após cada execução de uma instrução
SQL e executa uma ação dependente do resultado.
Precompilador insere lógica de IF e GOTO após cada instrução SQL subsequente.
A instrução WHENEVER não é uma rotina de inicialização como o ON CONDITION
do PL/1. O precompilador insere a codificação equivalente após cada instrução
SQL do programa fonte.
Exemplo :
EXEC SQL WHENEVER SQLERROR GOTO ROTULOZ
A instrução acima faz o programa desviar para a rota rotulada por ROTULOZ em
caso de SQLCODE negativo.
O teste permanece ativo até redefinição ou cancelamento pela instrução
WHENEVER seguinte.
Os três testes podem estar ativados simultaneamente.
:
:
instrução SQL
:
:
EXEC SQL
WHENEVER SQLERROR GO TO A END-EXEC.
:
instrução SQL
IF SQLCODE < 0 A
:
instrução SQL
IF SQLCODE < 0 A
:
EXEC SQL
WHENEVER SQLWARNING GO TO W END-EXEC.
EXEC SQL
WHENEVER SQLERROR GO TO B END-EXEC.
:
instrução SQL
IF SQLCODE < 0 B
IF warning W
:
EXEC SQL
WHENEVER SQLERROR CONTINUE END-EXEC.
Instrução SQL
IF warning W
15.27 DCLGEN
CATÁLOGO
DB2
DEFINIÇÃO
TABLE
DCLGEN
BIBLIOTECA
MEMBRO3
EXEC SQL
DECLARE TBL TABLE
(A ..., B ..) END-EXEC.
01 TBL,
10......
10......
15.27.1 Notas
O DCLGEN é um programa que para uma dada tabela, usa o catálogo do DB2 para
montar na biblioteca do usuário:
Instrução SQL ‘DECLARE TABLE’
Código de declarações das variáveis HOST (data structure)
Válido para COBOL, COBOL II, C OU PL/1
DB2 – DEFAULTS
DCLGEN
15.28.1 Notas
* DCLGEN TABLE(EMPR) *
* LIBRARY(CEDB2xx.DB01.LIB(DCLEMPR)) *
* ACTION(REPLACE) *
* APOST
*
* .......IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTES *
1 DCLEMPR.
10 MATR PIC X(6).
10 NOME.
49 NOME-LEN PIC S9(4) USAGE COMP.
49 NOME-TEXT PIC X(12).
10 SOBRENOME.
49 SOBRENOME-LEN PIC S9(4) USAGE COMP.
49 SOBRENOME-TEXT PIC X(12).
10 DEPT PIC X(3).
10 FONE PIC X(4).
10 DATADIM PIC X(10).
10 CARGO PIC S999V USAGE COMP-3.
10 NIVELED PIC S9(4) USAGE COMP.
10 SEXO PIC X(1).
10 DATANAS PIC X(10).
10 SALÁRIO PIC S999999V99 USAGE COMP-3.
15.29.1 Notas
Este é o resultado da execução do DCLGEN com as telas preenchidas conforme a página
anterior.
Na parte superior temos a instrução DECLARE com o nome das tabelas, colunas e seus data
types.
Notar que o nome da estrutura deriva do nome da tabela.
O NOME das variáveis são os nomes das colunas correspondentes.
As variáveis para colunas VARCHAR são subdivididas em dois componentes: comprimento e
texto.
Variáveis indicadoras não são geradas pelo DCLGEN.
EXEC SQL
DECLARE TBL TABLE
(A CHAR(3) NOT NULL,
B SMALLINT )
END-EXEC.
Opcional
Documentação
Permite validação adicional pelo precompilador
- Nome de tabelas e colunas
- Data types
15.30.1 Notas
O precompilador examina a sintaxe de uma instrução SQL mas não verifica a existência ou
não dos objetos referenciados. O precompilador não consulta o catálogo.
Assim, uma instrução DECLARE TABLE, apesar de opcional, fornece subsídios ao
precompilador para que verifique a existência da tabela e a correspondência entre as
VARIÁVEIS HOST e respectivas colunas.
Mesmo que seja feita a opção pela utilização da instrução DECLARE TABLE, o BIND
trabalhará com o catálogo para verificação final.
MEMBRO3
EXEC SQL
DECLARE TBL TABLE
(A ..., B ..) END-EXEC.
01 TBL,
10......
10......
: :
EXEC SQL EXEC SQL
INCLUDE MEMBRO 3 DECLARE TBL TABLE
: (A . . , B ..) END-EXEC
01 TBL,
10 . . .
10 . . .
: :
15.31.1 Notas
Quando o precompilador encontra uma instrução INCLUDE, faz a sua substituição pela saída
do DCLGEN.
O INCLUDE aponta para o membro que contém a saída do DCLGEN. O arquivo particionado
que contém o membro é fornecido pelo usuário na tela do PROGRAM PREPARATION ou pelo
cartão SYSLIB do JCL do precompilador.
A estrutura de uma SQLCA também pode ser incluída via INCLUDE. Como este bloco está
internamente embutido no DB2, não há necessidade de cópia a partir de uma biblioteca.
DSNTIAR
Duas rotinas na biblioteca de samples o DB2
COBOL
CALL DSNTIAR USING SALCA MESSAGE LRECL.
PL/1
CALL DSNTIAR (SQLCA, MESSAGE, LRECL);
ASSEMBLER
CALL DSNTIAR (SQLCA, MESSGE, LRECL)
DSNTIR
FORTRAN
CALL DSNTIR (MSGLEN, MESSAG, ICODE)
15.32.1 Notas
Estas são rotinas que geram mensagens de acordo com o SQLCODE na SQLCA. As mensagens
geradas são como as do SPUFI.
O call do DSNTIAR em COBOL, PL/1 ou ASSEMBLER deve ter três parâmetros:
SQLCA que contém o SQLCODE e os caracteres que devem ser inseridos no esqueleto da
mensagem correspondente.
Por exemplo deve ser fornecido o NOME da coluna e o NOME da tabela para ser inserida
no esqueleto da mensagem “there is no column named____in table_____.”
Um número inteiro fornecendo o comprimento desejado para a linha da mensagem.
A variável onde será colocada a mensagem formatada.
O call em FORTRAN é feito para a rotina DSNTIR.
Código
Fonte com
SQL
Biblioteca
De include
PRECOMPILAÇÃO
Código DBRM
fonte (biblioteca
modificado de usuário) Catálogo DB2
Descrição da tabelas
Módulo
Objeto Diretório DB2
Plano / Package
LINKEDIÇÃO
Módulo de
carga
Execução
Language
Interface
16.1 Notas
A preparação de programa é o NOME que damos ao processo que torna um programa fonte
em um módulo de carga executável.
A preparação pode ser feita de várias maneiras :
Com um job editado à partir da PROC do Program Preparation do DB2.
Com um job montado pelo programa DSNH (opção 3 do DB2I)
Interativamente com o programa DSNH
Em linhas gerais a preparação de um programa é constituído das seguintes fases :
Precompilação
Compilação e Linkedição
BIND
O precompilador pode ser executado com o DB2 fora do ar. A sua função é gerar à partir do
fonte dois data sets selados com um timestamp. Os data sets gerados são :
DBRM (Database Request Module)
Contém todas as instruções SQL embutidas no fonte.
Fonte modificado
O fonte é copiado para este data set com modificações. As instruções SQL são
transformadas em comentários e os CALLs para o DB2 são inseridos logo a seguir.
Eventualmente códigos de definição de variáveis HOST são copiadas à partir de uma
biblioteca de INCLUDE (que foi gerada pelo DCLGEN por exemplo)
O precompilador faz a checagem da sintaxe das instruções SQL e da validade das variáveis
HOST utilizadas. Um relatório de execução com eventuais mensagens de erro também é
gerada.
O compilador gera o módulo objeto à partir do fonte modificado pelo precompilador. O
timestamp é copiado do fonte.
16.2 Precompilador
16.2.1 Notas
16.3 Bind
OTIMIZADOR
DBRM
DBRM
PLANO
PACK.
Catálogo
Diretório
16.3.1 Notas
BIND REPLACE
Utilizado quando a própria instrução SQL foi alterada e queremos refazer o plano ou o
package existente.
REBIND
Utilizado quando o SQL permanece inalterado mas queremos refletir uma modificação
ocorrida no ambiente tais como criação / eliminação de índice ou atualização das
estatísticas do catálogo.
O otimizador do DB2 pesa fatores como CPU e I/O para elaborar uma estratégia de acesso.7
Índices disponíveis ?
Número de páginas lidas se tablespace varrido ?
Número de páginas lidas se utilizado índice ?
Melhor ordem de execução dos testes ?
16.4.1 Notas
BIND
Enter DBRM data set name(s) :
1 LIBRARY(S) DB01.DBRM
2 MEMBER(S) DB01PGxx
3 PASSWORD(S)
4 MORE DBRMS ? NO
16.5.1 Notas
Campos 1,2,3 e 4:
Cada execução do precompilador resulta em um módulo de programa e um DBRM. Se
na linkedição é feita a combinação de múltiplos módulos em único módulo, haverá
necessidades do BIND combinas os múltiplos DBRMs em um único plano. Assim, os
DBRMs de entrada do BIND podem ser simples ou múltiplos.
Campo 5:
Não obrigatório, mas é recomendado que o NOME do plano tenha o mesmo NOME do
programa a qual está associado.
Campo 6:
ADD ou REPLACE especifica se o plano já existe no diretório. E o parâmetro que
determina ser será executado um BIND ADD ou um BIND REPLACE.
Campo 7:
Determina para o plano que sofrerá um bind replace se a lista de auth-ids autorizados a
executar ou fazer bind deve ser mantida ou não.
Esta preocupação só existe no caso de BIND REPLACE onde o plano antigo é totalmente
descartado.
Campo 8:
Determina qual deve ser a duração de um lock em nível de página em caso de leitura. A
opção CS dá mais concorrência.
Campo 9:
Toda instrução SQL deve ser validada em algum instante no processo de BIND. Este
parâmetro determina se a validação total de todas as instruções SQL deve ser feita no
instante do BIND ou no instante da execução (RUN).
Um exemplo de programa que requer VALIDATE (RUN) seria aquele em que durante a
sua execução cria uma tabela temporária.
Este programa não poderia ser validado em tempo de BIND pois a tabela temporária que
está sendo referenciada não existe no catálogo e passará a existir somente durante a
execução.
Um plano gerado com VALIDATE (RUN) é parcial, e é completado durante a execução do
programa.
Campo 10:
Especifica se o lock em nível de tablespace deve ser adquirido no instante da alocação
do plano ou se no instante na primeira referência.
Campo 11:
Especifica se o lock no tablespace deve ser liberado ao término do programa
(DEALLOCATE) ou quando o programa emitir um COMMIT.
Combinações possíveis para os campos 10 e 11:
- ALLOCATE/DEALLOCATE
- USE/DEALLOCATE
- USE/COMMIT
Campo 12:
Especifica se a estratégia de acesso deve ser explicada via instrução EXPLAIN.
Campo 13:
Especifica o proprietário do plano. A contabilização é feita para o auth-id especificado
neste campo. O auth-id deve estar devidamente autorizado a executar todas as
instruções SQL do programa.
Considerações :
Dê preferência ao ISOLATION(CS) para permitir maior concorrência.
Utilize o RR somente quando a lógica do programa assim o exigir. Isto pode aumentar muito
a carga do DB2 com a atividade de locking. Uma alternativa seria a utilização da instrução
LOCK TABLE que força locking em nível de tabela ou de tablespace durante a execução do
programa.
A combinação USE/COMMIT eleva o nível de concorrência mas por outro lado aumenta o
risco do programa sofrer problemas de deadlocks ou de timeouts (-911 ou –904). Um
programa com plano gerado com estes parâmetros deve estar preparado para lidar com
estas situações.
VALIDATE(RUN) faz com que a validação seja repetida a cada execução do programa.
Portanto deve ser utilizado somente quando necessário.
Faça o BIND e REBIND num horário de baixa atividade pois além do plano ficar disponível
para os usuários, o catálogo e o diretório são exigidos intensamente.
16.6.1Notas
17. LOCKING
17.1 Propósito
Indica dado em uso
LOCK
Ap.B
Ap.A
17.1.1 Notas
O propósito do mecanismo de LOCKING é administrar os múltiplos acessos aos dados do DB2
para que os dados sejam acessados e atualizados de forma organizada evitando
inconsistência.
Qualquer tipo de acesso aos dados DB2 passam pelo mecanismo de locking, garantindo
proteção contra:
Acesso a um dado com alteração não validada
Atualização de um dado em uso.
Um lock tem três características
Modo
Granularidade
Duração
17.2 Modo
S FILA
17.2.1 Notas
17.3 Granularidade
Linha / página
LOCK
LOCK
Tabela / tablespace
LOCK
17.3.1 Granularidade
A granularidade do locking indica o tamanho dos recursos que estão sendo presos.
O LOCK pode ser dado :
Individualmente à linhas ou páginas
Á todos os segmentos de uma tabela de um tablespace segmentado.
Individualmente a um tablespace.
Lock em nível de páginas exige mais atividade da parte do DB2 mas oferece maior
concorrência e throughput.
A granularidade é um dos parâmetros de um tablespace durante a sua definição.
O parâmetro de granularidade pode ser alterado em algumas situações :
Emissão do comando LOCK TABLE pelo usuário
O DB2 pode elevar o nível de lock se o overhead de processamento devido ao locking em
nível de página ultrapassar o limite da instalação (parâmetro de geração do DB2)
LOCK em nível de tabela/tablespace é menos trabalhoso para o DB2 mas pode ocorrer um
maior enfileiramento pela espera de recursos.
17.4 Duração
ALLOCATE
DEALLOCATE
USE
DEALLOCATE
USE
COMMIT
t
INÍCIO UPDATE COMMIT FIM
17.4.1 Notas
LOCK EM PÁGINA
CS
RR
t
SELECT UPDATE SELECT COMMIT
PG1 PG4 PG2
Para LOCK em nível de página, temos duas estratégias possíveis :
RR
Repeatable Read. Os LOCKs são adquiridos conforme as páginas vão sendo acessadas e
são liberadas só com um COMMIT.
O RR só deve ser escolhido em situações especiais, já que as páginas ficam presas por
muito tempo. O NOME vem do fato de que nos casos de repetição de leitura temos a
garantia de que ninguém atualizou o dado.
CS
Cursos Stability. Os locks do tipo “S” são adquiridos conforme a necessidade e liberados
quando o programa lê outra página.
Quanto aos locks do tipo “X”, não há diferença com o RR, onde a liberação ocorre
somente com o COMMIT.
O nome justifica-se pelo fato das páginas estarem com os dados íntegros enquanto
estão sendo acessados.
18 SEGURANÇA
Usuário
R
R IMS
A
A CICS
C TSO
C DB2
F
F BATCH
RACF
VSAM
Database
O acesso ao DB2 pode ser controlado pelo RACF ou por um outro software de segurança.
Esse controle é opcional e controla somente a possibilidade de um usuário poder ou não se
comunicar como o DB2. O controle do acesso aos dados é feito internamente pelo próprio
DB2 e não depende de nenhum software externo a si mesmo.
O RACF pode também controlar o acesso a data sets, podendo por exemplo permitir que
somente o DB2 tenha acesso aos data sets que representam os table spaces do DB2. Com
isso impede-se que alguém danifique ou altere dados nas tabelas quando o DB2 não estiver
ativo.
Para as instalações que não possuem o RACF é possível utilizar o mecanismo de passwords,
já que os tablespaces sempre utilizam data sets VSAM.
AUTORIZAÇÃO
18.2.1 Notas
TABELA SELECT
VIEW UPDATE (lista de colunas)
INSERT
:
BIND
PLANO
EXECUTE
PACKAGES
STOGROUP
BUFFERPOOL
TABLESPACE USE
SYSADM
DB2 RECOVER
TRACE
:
DATABASE DBADM
CREATETS
LOAD
:
Install SYSADM
SYSADM
SYSCTRL
DBADM
DBCTL
Install SYSOPR
DBMAINT
SYSOPR
18.3.1.1 Notas
Funções administrativas
SYSADM
Autoridade máxima dentro de um ambiente DB2.
SYSCTRL
Pode ser definido como um SYSADM sem o privilégio de SELECT.
DBADM
Autoridade máxima sobre um determinado Database
GRANT Privilégio
+ + TO + AUTH-ID
Sobre
recursos
Privilégio
REVOKE + + FROM + AUTH-ID
sobre
recurso
18.4.1 Notas
A instrução GRANT é utilizada par conceder privilégios sobre recursos DB2 para usuários ou
grupo de usuários.
Os privilégios são permanentes até que sejam revogados com uma instrução REVOKE.
Primary
Auth.id
DB2
CICS
IMS Auth.id
BATCH
TSO Lista
RACF Second.
Auth.id
18.5.1 Notas
Sec. Auth id
Desenvolvimento
Desenvolvimento Sistema NF
Sistema FP
Priv. grupo
Priv. grupo
Prim. Auth id
ZE C B
F A ZE B
Remove connect
18.6.1 Notas
18.7 Auditoria
Eventos auditáveis
18.7.1 Notas
Suporte DB2
Usuário autorizado
SQL
`DB2
DADOS DE
PLANOS ACESSO AO DB
PACKAGES DEFINIÇÃO DE REMOTO
UTILITÁRIOS OBJETOS
ESTRUTURA AUTORIZAÇÃO
DE DB’s ESTATÍSTICA
RECUPERAÇÃO
19.1.1 Notas
20 UTILITÁRIOS DB2
Execução em BATCH
Offline
Service aids
20.1 Notas
Os utilitários são sempre executados via submissão de jobs batch. Como esses jobs nunca
precisam especificar os data sets onde as tabelas ficam armazenadas, o mesmo job pode
servir para muitos usos, desde que altere a especificação da função a ser executada pelo
utilitário.
Os utilitários online são aqueles que exigem a presença do DB2.
Os utilitários offline são aqueles que somente executam quando o DB2 está fora do ar.
Os service aids executam funções especiais e não se comunicam com o DB2.
Além dos utilitários, na biblioteca de samples existem programas que executam algumas
funções de outros possíveis utilitários. Esses programas são fornecidos em módulo fonte
como exemplo de codificação.
ARQUIVO SEQUENCIAL
DB2 LOAD
TAB LE S PA CE
TAB EL A A
TAB EL A B
20.2.1 Notas
Uma das alternativas para a carga maciça de dados em DB2 é o utilitário LOAD que carrega
tabelas DB2 a partir de uma arquivo seqüencial.
O arquivo seqüencial poderá ser produzido pelo SQL/DB2, DXT ou um programa do usuário.
O LOAD, como todos os utilitários DB2, trabalha com tablespaces. Assim, ele pode carregar
simultaneamente várias tabelas DB2 desde que pertençam à um mesmo tablespace.
Enquanto uma tabela é carregada, os dados das tabelas residentes no mesmo tablespace
ficam indisponíveis.
LOAD DATA
: : ) tipo de dado
posição inicial
20.3.1 Notas
DB2 Utilities
3 Utility LOAD (Check, Check Data, Copy, Diagnose, Load, Merge, Modify, Quiesce,
Recover Index, Recover Tablespace, Reorg Index, Reorg Tablespace,
Report, Repair, Runstats, Stospace)
6 DISCDSN (LOAD)
20.4.1 Notas
Os jobs de utilitários do DB2 podem ser preparados pelo programa DSNU, que pode ser
chamado à partir do DB2 (opção 8).
No painel do DB2 Utilities podemos entrar com os seguintes valores:
1. EDITJCL especifica que queremos um JCL editado.
2. Identificador do utilitário. Se por algum problema a execução apresentar problemas,
podemos examinar ou abortar o utilitário através deste identificador.
3. Especifica o utilitário (LOAD, REORG, RUNSTATS, etc.)
4. Data set contendo a instrução do utilitário.
5. Data set seqüencial de entrada para o LOAD, ou de saída para o REORG.
6. Data set para receber os registros rejeitados pelo LOAD.
7. Data set de saída do COPY ou do MERGECOPY.
8. Ignore se a opção no campo 1 for EDITJCL.
Preenchido o painel, o DSNU edita um JCL, para o utilitário em questão, com todos os
cartões necessários e o armazena num data set.
A equipe de suporte pode montar uma biblioteca de utilitários com esta ferramenta.
Ev i t ar co nv er sõ es de dado s
Definir campos com os mesmos formato de colunas.
Definir campos com mesmo tamanho de colunas.
Usar definições produzidas por DCLGEN.
Seleci o nar so ment e as co lunas necessár i as
Cada coluna transferida consome CPU adicional.
Use Select * somente quando necessário.
21.1 Notas
21.2 Explain
WHERE........AND.....................AND...............
EX PL A I N
........ . ............. . . .. ..
... .... .
........ . ............. . . .. ..
... .... .
........ . ............. . . .. ..
... .... .
21.2.1 Notas
O EXPLAIN pode ser executado como uma simples instrução SQL ou pode ser executado de
forma indireta quando um plano é gerado.
Pode ser uma ferramenta do DBA para determinar
Necessidades de índices
Problema de estratégia inadequada de locking.
Pode ser ferramenta do programador para:
Testar alternativas de estratégias.
Verificar a eficiência de uma instrução SQL.
21.3.1 Notas
Q UE RYN O
É um número que identifica uma instrução EXPLAIN. O número pode ser escolhido
através da cláusula SET QUERYNO ou em caso de omissão, escolhido pelo DB2.
Q BL OC K N O
Número que identifica dentro da instrução SQL a query em particular que está sendo
explicada. Reflete a ordem em que aparece a query.
AP PL AN AME
Nome do plano, ou branco se SQL dinâmico.
P ROG N AME
Nome do programa, ou branco se SQL dinâmico.
P L ANN O
Número identificando a seqüência em que a porção sendo explicada será executada
dentro de um QBLOCKNO.
ME THOD
Identifica o método de join.
0 Primeira tabela acessada. (Planno=1)
1 NESTED LOOP JOIN. Para cada linha da tabela composta corrente, as linhas que
satisfazem a condição na tabela nova são concatenadas.
2 MERGE SCAN JOIN. Ambas as tabelas são varridas na seqüência da coluna de join e
as linhas que satisfazem a condição são concatenadas.
3 SORT adicional necessário para ORDER BY, GROUP BY, SELECT DISTINCT ou um
predicado quantificado.
4 HYBRID JOIN. Método híbrido ente o nested loop e o merge scan.
C RE ATOR
Proprietário da tabela sendo acessada.
TN AME
Nome da tabela sendo acessada.
TAB N O
Identifica a cláusula FROM dentro da instrução sendo explicada.
ACC E SSTYP E
Método de acesso a tabela.
MATC HC OL S
Quantidade de colunas de um índice sendo utilizado para acesso pelo topo da estrutura
(root page da árvore).
ACC E SSC RE ATOR
Proprietário do índice utilizado.
ACC E SSN AME
Nome do índice utilizado.
IN DE X ON L Y
“Y” se a pesquisa pode ser satisfeita apenas pelo índice ou “N” em caso contrário.
SORTN _U N I Q
“Y” se a tabela resultante será classificada com a finalidade de eliminar linhas
duplicadas (SELECT DISTINCT) ou “N” em caso contrário.
SORTN _J OI N
“Y” se a tabela resultante será classificada com a finalidade de resolver o join pelo
método “2” ou “N” em caso contrário.
SORTN _ORDE RB Y
“Y” se a tabela resultante será classificada para satisfazer a cláusula ORDER BY ou “N”
em caso contrário.
SORTN _G ROU P B Y
“Y” se a tabela resultante será classificada para satisfazer a cláusula GROUP BY ou “N”
em caso contrário.
SORTC _U N I Q
“Y” se a tabela composta será classificada com a finalidade de eliminar linhas
duplicadas (SELECT DISTINCT) ou “N” em caso contrário.
SORTC _J OI N
“Y” se a tabela composta será classificada com a finalidade de resolver o join pelo
método “2” ou “N” em caso contrário.
SORTC _OR DE RB Y
“Y” se a tabela composta será classificada para satisfazer a cláusula ORDER BY ou “N”
em caso contrário.
SORTC _G ROU P B Y
“Y” se a tabela composta será classificada para satisfazer uma cláusula GROUP BY ou
um predicado quantificados ou “N” em caso contrário.
TSL OC K MODE
Estratégia de locking no tablespace que conterá a tabela.
TI ME STAMP
Timestamp do horário em que está instrução foi executada.
RE MARK S
Coluna reservada para colocar um comentário.
P RE FE TC H
“S” se sequential prefetch puro ou “L” se prefetch em uma lista de páginas ou branco
se nenhuma das anteriores.
C OL U MN _FN _E V AL
Indica quando é resolvido a função de coluna. “R” se durante a leitura dos dados. “S”
se durante a classificação e branco se desconhecido ou durante a manipulação de
dados.
MI X OP SEQ
Número que indica a ordem de participação do índice indicado numa operação de
múltiplos índices. (ACCESSTYPE tipo “MX”, “MI” ou “MU” ) . 0 nas demais linhas.
21.4.1 Notas
O JOBS BATCH que não compartilham uma determinada tabela com outros usuários podem
emitir o comando LOCK TABLE. Com isso diminuem drasticamente o processamento de
locks e aumentam a sua eficiência.
O commit deve ser emitido em jobs batch que atualizam grande volume de dados
compartilhados por outros usuários. Como regra básica pode-se emitir o commit a
cada 100 atualizações sem impacto na performance do programa.
Um programa que trabalha com cursor e emite commit deve abrir o cursor com a cláusula
WITH HOLD para não perder o seu posicionamento.
Se um programa que emite commit sofrer um abend surge um problema a ser resolvido
pelo próprio programa. Acontece que o DB2 desfaz as atualizações até o último commit e
ao recomeçar o programa deve continuar a partir desse ponto, reposicionando inclusive
outro arquivos como por exemplo data set em fita magnética.
TRACES DO DB2
RLF
EXPLAIN
RUNSTATS
STOSPACE
DB2
TRACE FACILITY DB2PM ou
PROGRAMA
SMF/GTF Estatística
Contabilização
Performance
Auditoria