DB2 - Conceitos e Utilizações

126

Click here to load reader

description

DB2 Conceitos e Utilizações

Transcript of DB2 - Conceitos e Utilizações

Page 1: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 1

DBMS RELACIONAL............................................................................................................................. 3

DB2 é um DBMS Relacional ................................................................................................................... 5

OBJETOS DO DB2 .................................................................................................................................. 7

ENTIDADE RELACIONAMENTO ...................................................................................................... 10

RELACIONAMENTO ........................................................................................................................... 11

LINGUAGEM SQL................................................................................................................................ 17

INSTRUÇÃO SELECT ...................................................................................................................... 18

QUERY .......................................................................................................................................... 21

SELECT DE TODAS AS COLUNAS ........................................................................................... 23

CONTROLE DE LINHAS ............................................................................................................. 24

NULIDADE.................................................................................................................................... 26

MÚTIPLAS CONDIÇÕES ............................................................................................................ 28

IN .................................................................................................................................................... 30

PESQUISAS PARCIAIS ................................................................................................................ 31

MANIPULANDO TABELA RESULTANTE ............................................................................... 33

ORDER BY .................................................................................................................................... 33

SELECT DISTINCT ...................................................................................................................... 35

SELECT DE VALORES CALCULADOS ..................................................................................... 37

ORDER BY POR VALOR CALCULADO .................................................................................... 38

SELECT AVANÇADO .................................................................................................................. 40

JOIN DE TABELAS ...................................................................................................................... 57

INNER JOIN .................................................................................................................................. 62

OUTER JOIN ................................................................................................................................. 63

EXPRESSÕES CASE .................................................................................................................... 64

UNION ........................................................................................................................................... 65

SUBQUERY ................................................................................................................................... 67

MANUTENÇÃO DE DADOS - INSERT ...................................................................................... 72

MANUTENÇÃO DE DADOS - UPDATE .................................................................................... 73

MANUTENÇÃO DE DADOS - DELETE ..................................................................................... 74

DATA DEFINITION LANGUAGE....................................................................................................... 75

DDL .................................................................................................................................................... 76

STORAGE GROUP ........................................................................................................................... 77

DATABASE ....................................................................................................................................... 78

TABLESPACE ................................................................................................................................... 79

TABLE ............................................................................................................................................... 81

ÍNDICE .............................................................................................................................................. 83

VIEW.................................................................................................................................................. 84

DROP ..................................................................................................................................................... 85

SQL ESTÁTICO vs. SQL DINÂMICO ................................................................................................. 86

COMMIT / ROLLBACK ....................................................................................................................... 91

BIND ..................................................................................................................................................... 92

SEGURANÇA INTERNA DO DB2 ...................................................................................................... 97

UTLITÁRIOS DO DB2 ......................................................................................................................... 99

SYSIBM.SYSUTILX ....................................................................................................................... 100

LOAD ............................................................................................................................................... 101

LOAD – JCL ................................................................................................................................ 102

FASES DO LOAD ....................................................................................................................... 105

CHECK DATA ................................................................................................................................. 109

FASES DO CHECK DATA ......................................................................................................... 110

CHECK INDEX ............................................................................................................................... 112

FASES DO CHECK INDEX ........................................................................................................ 112

REORG............................................................................................................................................. 113

FASES DO REORG ..................................................................................................................... 113

COPY ............................................................................................................................................... 116

MERGECOPY ................................................................................................................................. 117

RECOVERY ..................................................................................................................................... 118

QUIESCE ......................................................................................................................................... 120

Page 2: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 2

REPORT ........................................................................................................................................... 120

INDEX RECOVERY ....................................................................................................................... 121

RECOVERY PENDING .................................................................................................................. 122

MODIFY .......................................................................................................................................... 123

DIAGNOSE ...................................................................................................................................... 123

STOSPACE ...................................................................................................................................... 123

RUNSTATS ..................................................................................................................................... 124

REPAIR ............................................................................................................................................ 124

DSNTIAUL ...................................................................................................................................... 125

COMANDOS DB2 ........................................................................................................................... 126

Page 3: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 3

DBMS RELACIONAL

QUANDO UM DBMS PODE SER CONSIDERADO RELACIONAL ??

1. Independência dos Dados

2. Estrutura Tabular

3. Operadores de Tabelas

4. Uniformidade e Integridade dos Dados.

Notas:

DBMS - Significa DATA BASE MANAGEMENT SYSTEM, OU SISTEMA

GERENCIADOR DE BANCO DE DADOS (SGBD).

Um DBMS Relacional exige:

Estrutura de Dados Tabular

Os dados devem ser colocados em tabelas

Operadores de Tabelas

Deve ter operadores que conseguem manipular dados em tabelas

Uniformidade e Integridade dos Dados

Possui Mecanismos que mantém a integridade dos dados que são

adicionados ou modificados. O DBMS deve também ter

mecanismo capazes de forçar uma uniformização dos dados que

são nela armazenados. Por exemplo, podemos forçar o

armazenamento dos dados sempre o formato numérico.

Independência dos Dados.

Lógica das aplicações não devem se preocupar com a estrutura de

armazenamento e a teoria de acesso aos dados.

Page 4: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 4

Tabela Empregados

Matricula Nome Cargo Depto Salário

000010 Christiane D01 001 260000

000020 Karina R01 002 270010

000030 Júlio S01 003 300010

Linhas 000040 Ingrid P01 004 250500

000050 Juan P02 004 138005

Colunas

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 da 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 referenciadas pelo seu nome.

Page 5: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 5

DB2 é um DBMS Relacional

SISTEMA DE GERENCIA DE BANCO DE DADOS

Integridade e Segurança de Dados

Recuperação e Reinicio Integrados

Definição Dinâmica

Operação Contínua

Modelo de Dados Linguagem SQL

Relacional

- Os dados vistos - Definição

como Tabelas Manipulação e

- Projeto mais fácil Controle de dados

Page 6: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 6

AMBIENTE DB2

Notas:

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 Propagador) ou o DXT

(Data Extract).

IMS TM

CICS

Qmf/Spffi

BATCH

IMS DM

DB2

DPROP

DXT

Page 7: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 7

OBJETOS DO DB2

DATA BASE

Tablespace1

Indice1 Tabela1

Tablespace2

Indice2 Tabela2

View X

Storage Group A Storage Group B

Page 8: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 8

OBJETOS DO B2

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 contem de

uma ou mais tabelas. Suas paginas 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ído de 4 a 64 páginas e

sempre múltiplos de 4. Cada segmento só pode conter dados de

uma tabela.

PARTICIONADO

Recomendado para tabelas gigantes. Pode ser dividido em até 64

partições. Cada partição pode ter no máximo 4Gbytes. 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 primaria.

Page 9: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 9

OBJETOS DO B2 (Continuação)

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 m nada difere com a de uma tabela. Conforme o caso uma

View pode ser somente para leitura

STORAGE GROUP

É um conjunto de volumes(discos) onde estarão os tablespaces e

índices. Os discos devem ser do mesmo device type.

A utilização do Storage Group nos poupa ca 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.

SYNONYM (Sinônimo)

É 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 a nível

de um subsistema DB2.

ALIAS

É um nome alternativo(Apelido) para uma tabela ou VIEW. Um alias é

de uso compartilhado ao contrario do SYNONYM. É utilizado mais

como apelido para uma tabela remota e é válido a nível de um

subsistema DB2.

Page 10: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 10

ENTIDADE RELACIONAMENTO

Modelo

E R DB2

Notas:

Uma vez construído o modelo entidade relacionamento, passamos à fase

de implementação em DB2.

Basicamente temos uma tabela para cada entidade do modelo. Existem

casos (relacionamento m:m) em que precisaremos trabalhar com tabelas

adicionais.

Para cada atributo de uma entidade temos uma coluna na tabela

correspondente. Uma coluna tem algumas características tais como tipo

de dado, para definir se o conteúdo é numérico ou alfanumérico.

A distribuição de tabelas entre os tablespace também deve seguir alguns

critérios tais como tamanho das tabelas, afinidade entre as tabelas, etc.

Page 11: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 11

RELACIONAMENTO

Matr Nome Depto EMPR

419 Maria A00

003 Carlos Z13

Operador

Relacional

DeptoCod DeptoNome DEPT

Z13 Reserva

A00 Vendas

Notas:

Para mapearmos um relacionamento entre duas entidades de um modelo

relacional precisamos conhecer o conceito de chaves.

Chave primária: Identifica uma ocorrência de uma entidade (Tabela)

Chave estrangeira: Identifica uma associação entre as ocorrências de

duas tabelas. Como o valor representado é chave primária na outra

entidade, a chamamos de chave “Estrangeira”.

Conceito de chave primária e chave estrangeira estão implementados no

DB2, mas a suas utilização não é obrigatória.

A chave estrangeira deve pertencer ao mesmo domínio da chave primária

a qual esta associada. Ex.: Não poderíamos associar a coluna NOME de

EMPR com a coluna DeptoCod da DEPT.

A associação lógica entre as ocorrências das entidades é feita através das

chaves primárias e estrangeiras que serão argumento de um operador

relacional.

Chave

Primária

Chave

Estrangeira

Carlos

Trabalha

na Reserva

Page 12: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 12

TIPOS DE RELACIONAMETO

1 PARA MUITOS

Colocar a chave estrangeira aqui

EMPREGADO M : 1 DEPARTAMENTO

Carlos Reserva

Paulo

Maria Vendas

DEPTO

DeptoCod DeptoNome

Z13 Reserva

A00 Vendas

: :

EMPREGADO

Matr Nome Dept

419 Maria A00

003 Carlos Z13

087 Paulo Z13

: : :

Chave

Primária

Chave

Estrangeira

Page 13: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 13

TIPOS DE RELACIONAMENTO

Notas:

Em um relacionamento do tipo um para muitos, qualquer ocorrência de uma

entidade pode estar associada à várias ocorrências da outra entidade,

enquanto qualquer ocorrência desta outra deve estar associada à apenas

uma ocorrência da outra.

Neste caso devemos colocar a chave estrangeira na tabela em que cada

ocorrência só enxerga uma ocorrência da tabela oposta.

Caso contrário deveríamos colocar várias chaves estrangeiras na tabela

oposta. No nosso exemplo, se um determinado departamento tiver 30

empregados, a tabela DEPT deveria ter no mínimo 30 chaves estrangeiras!

Podemos também imaginar uma situação onde um departamento da

companhia resolve triplicar o número de empregados.

Page 14: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 14

TIPOS DE RELACIONAMENTO

MUITOS PARA MUITOS

EMPREGADO M : M PROJETO

Carlos Ano 2.000

Paulo

Maria Qualidade

Onde colocar a chave estrangeira ?

EMPREGADO EMP-PROJ

Matr Nome Mat Cod

419 Maria 003 A2 PROJETO

003 Carlos 087 A2

087 Paulo : : Pcod PNome

419 A2 A2 Projeto 2.000

: : QD Qualidade

419 QD

TABELA DE ASSOCIAÇÃO

Notas:

Em um relacionamento do tipo muitos para muitos, qualquer ocorrência de

ambas as entidades pode estar associada à várias ocorrências da entidade

oposta.

Neste caso, ao invés de se criar várias chaves estrangeiras, criamos uma

tabela de associação que contém pelo menos duas chaves estrangeiras

apontando para as chaves primárias das tabelas associadas.

Nada impede que uma tabela de associação tenha colunas que não sejam

chaves estrangeiras.

Chave Primária

Chave Primária Chave

Estrangeira

Chave

Estrangeira

Page 15: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 15

INTEGRIDADE DE REFERENCIA

EMPR DEPT (Dependet) (Parent)

Matr Nome Depto Dcod Dnome

419 Maria A00 A00 Vendas

003 Carlos Z13 V75 Contabilidade

: : : Z13 Reserva

: :

Integridade

Referencial

Notas:

A Integridade de referência garante que qualquer valor apontado pela

chave estrangeira tenha um 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.

Page 16: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 16

INTEGRIDADE DE REFERENCIA (Continuação).

Todas as tabelas associadas entre si via regra de Integridade de

Referência formam um conjunto chamado de ESTRUTURA

REFERENCIAL ou REFERENTIAL STRUCTURE.

Uma tabela com chave primária definida é chamada de Parent Table ou

tabela Mãe.

Uma table com chave estrangeira definida é chamada de Dependent

Table ou tabela Dependente.

Uma linha de uma Parent Table é chamada 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 à 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, pode 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 todas as chaves estrangeiras das linhas

dependentes são atualizadas com valor nulo após a 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.

Page 17: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 17

LINGUAGEM SQL

SQL

STRUCTURED

QUERY

LANGUAGE

SELECT CREATE GRANT

UPDATE ALTER REVOKE

DELETE DROP COMMIT

INSERT ROLLBACK

DML DDL CONTROL

Notas:

A Linguagem SQL pode ser separada 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.

Page 18: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 18

INSTRUÇÃO SELECT

Não é procedural

Conceito da teoria os conjuntos

Fácil

Notas:

A instrução SELECT não é procedural. Em outras palavras não precisamos

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.

Com a instrução SELECT basta dizer:

1. QUERO OS DADOS QUE SATISFAZEM A CONDIÇÃO X.

SELECT trabalha com conjuntos e permite a execução de

operadores elementares que nos são familiares.

Quem já não ouviu falar dos operadores união e intersecção?

Com uma instrução SQL podemos implementar os seguintes

operadores:

A B

UNIÃO A U B

A B

INTERSECÇÃO A B

A B

DIFERENÇA A - B

PRODUTO A X B = { (x, y) : x A e y B}

CARTESIANO

Page 19: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 19

TABELAS USADAS NOS EXEMPLOS

x.staff

ID NOME DEPT CARGO ANOS SALARIO COMIS

10 SANTANA 20 GER 7 18357.50 -

20 ORSINI 20 VENDAS 8 18171.25 612.45

30 DANTAS 38 GER 5 17506.75 -

40 O’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.50

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 17654.50 922.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

350 GAFNEY 84 ATEND 5 13030.50 188.00

TABELAS USADAS NOS EXEMPLOS (Continuação)

Page 20: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 20

x.org

DEPTCOD DEPTNOME GERENTE DIVISÃO LOCAL

10 MATRIZ 160 CENTRO SÃO PAULO

15 CAMPINAS 50 SUDESTE CAMPINAS

20 RIO 10 SUDESTE RIO DE 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

Page 21: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 21

QUERY

Sequência obrigatória:

SELECT NOME, ANOS, SALARIO - Diz quais as colunas mostrar

FROM x.staff - Diz de quais tabelas

WHERE DEPT = 38 - Diz quais linhas selecionar

ORDER BY NOME - Diz como ordenar o resultado

Notas:

As cláusulas de uma instrução SELECT devem ser especificadas

obedecendo à uma sequência.

As cláusulas estão grifadas na figura e não podem ser abreviadas.

No nosso exemplo estamos fazendo uma pesquisa na tabela chamada

x.staff para gerar um relatório com o nome, tempo de casa e o salário de

todos que trabalham no departamento de código “38”. O Resultado deve

ser classificado pelo nome os funcionários.

Uma instrução SELECT pode ser escrita em formato livre desde que as

cláusulas estejam obedecendo à sequência obrigatória, como descrito

abaixo:

SELECT NOME, ANOS, SALARIO FROM x.staff WHERE DEPT = 38

ORDER BY NOME

Page 22: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 22

SELECT ... FROM

SELECT algumas das colunas da tabela

Lista as colunas desejadas na sequência de esquerda para a

direita

Vírgulas separam as colunas

FROM lista de tabelas

Simples: EMP

Qualificado: AUTHID.EMP

EXEMPLO

SELECT DEPTNOME, DEPTCOD

FROM x.org

Resultado:

DEPTNOME DEPTCOD

MATRIZ 10

CAMPINAS 15

RIO 20

MINAS 38

: :

Page 23: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 23

SELECT DE TODAS AS COLUNAS

Para selecionar todas as colunas de uma tabela na mesma sequência em que

foram definidas:

SELECT * FROM x.org

Resultado:

DEPTCOD DEPTNOME GERENTE DIVISÃO LOCAL

10 MATRIZ 160 CENTRO SÃO PAULO

15 CAMPINAS 50 SUDESTE CAMPINAS

20 RIO 10 SUDESTE RIO DE JANEIRO

38 MINAS 30 SUDESTE B. HORIZONTE

: : : : :

Page 24: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 24

CONTROLE DE LINHAS

WHERE

Traz certas linhas

Estabelece condições

Listar empregados do departamento 20

SELECT DEPT, NOME, CARGO, COMIS

FROM x.staff

WHERE DEPT = 20

Resultado:

ID NOME DEPT CARGO ANOS SALARIO COMIS

10 SANTANA 20 GER 7 18357.50 -

20 ORSINI 20 VENDAS 8 18171.25 612.45

80 JAMES 20 ATEND - 13504.60 128.20

190 SNEIDER 20 ATEND 8 14252.75 126.50

Selecionar linhas através de dado numérico

SELECT DEPT, NOME, CARGO

FROM x.staff

WHERE DEPT = 20

Selecionar linhas através de dado alfanumérico

SELECT NOME, CARGO, COMIS

FROM x.staff

WHERE NOME = ‘SANTANA’

Page 25: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 25

OPERADORES DE COMPARAÇÃO

= Igual

<> or = Diferente

> Maior

>= Maior ou Igual

< Menor

<= Menor ou Igual

= Não Igual

> Não Maior

< Não Menor

SELECT MATR, COMIS

FROM x.staff

WHERE COMIS >= 1000

SELECT NOME, DEPT, ANOS

FROM x.staff

WHERE CARGO <> ‘GER’

Page 26: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 26

NULIDADE

Na inserção de linha, uma coluna que é:

NOT NULL O valor deve ser fornecido

(ALLOW) NULL O valor pode ser omitido

Um valor NULO: Não é zero

Não é Branco

É Desconhecido

NOT NULL WITH DEFAULT

Uma coluna pode ser ‘Not Null With Default’.

Após a Versão 4 podemos atribuir um valor Default para a coluna quando

à mesma é omitida na inclusão e se não atribuirmos este valor o sistema

atribui como:

Zero se coluna numérica

Branco se coluna definida como caracter

Comprimento zero se coluna definida como caracter de tamanho

variável.

Page 27: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 27

SELEÇÃO DE NULOS

Valor nulo como critério de SELECT

SELECT NOME, CARGO, COMIS

FROM x.staff

WHERE COMIS IS NULL

Resultado:

NOME CARGO COMIS

SANTANA GER -

DANTAS GER -

SOUZA GER -

PLOTZ GER -

FRAYE GER -

: : :

Valor não nulo como critério de SELECT

SELECT NOME, CARGO, COMIS

FROM x.staff

WHERE COMIS IS NOT NULL

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

KOONITZ VENDAS 1386.70

NGAN ATEND 206.60

NAUGHTON ATEND 180.00

YAMAGUCHI ATEND 75.60

OLIVEIRA VENDAS 637.50

KERMISCH ATEND 110.10

: : :

Page 28: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 28

MÚTIPLAS CONDIÇÕES

Operadores múltiplos de condições: AND e OR

Dadas duas condições:

CARGO = ‘VENDAS’ SALARIO < 17000

Para ter ambas satisfeitas: AND

WHERE CARGO ‘VENDAS’ AND SALARIO < 17000

Resultado:

NOME CARGO SALARIO

SUZUKI VENDAS 16808.30

ALMEIDA VENDAS 16502.83

: : :

Para ter qualquer uma satisfeitas: OR

WHERE CARGO ‘VENDAS’ OR SALARIO < 17000

Resultado:

NOME CARGO SALARIO

ORSINI VENDAS 18171.25

O’BRIEN VENDAS 18006.00

SUZUKI VENDAS 16808.30

ALMEIDA VENDAS 16502.83

JAMES ATEND 13504.60

: : :

Page 29: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 29

MÚLTIPLAS CONDIÇÕES (Continuação)

WHERE (CARGO = ‘VENDAS’ AND COMIS > 1200)

OR ANOS > 10

Resultados:

NOME CARGO ANOS COMIS

KOONITZ VENDAS 6 1386.70

JONES GER 12 -

GRAHAM VENDAS 13 200.30

VIEIRA VENDAS 7 1285.00

: : : :

: : : :

Não equivale a:

WHERE CARGO = ‘VENDAS’ AND (COMIS > 1200 OR ANOS > 10)

Resultados:

NOME CARGO ANOS COMIS

KOONITZ VENDAS 6 1386.70

GRAHAM VENDAS 13 200.30

VIEIRA VENDAS 7 1285.00

Page 30: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 30

IN

Valor deve coincidir com algum elemento de uma lista

WHERE DEPT IN ( 38, 20, 42)

Equivale a múltiplos Ors para a mesma coluna:

WHERE DEPT = 38 OR DEPT = 20 OR DEPT = 42

Valor deve ser diferente de algum elemento da lista

WHERE DEPT NOT IN ( 38, 20, 42)

BETWEEN

Para selecionar um intervalo fechado de valores

SELECT NOME, CARGO, ANOS

FROM x.staff

WHERE ANOS BETWEEN 9 AND 11

Equivale a

SELECT NOME, CARGO, ANOS

FROM x.staff

WHERE ANOS >= 9 AND ANOS <=11

Resultado:

NOME CARGO ANOS

SOUZA GER 10

LU GER 10

LEA GER 9

WILSON VENDAS 9

PINHO GER 10

Para selecionar um intervalo diferente de valores

SELECT NOME, CARGO. ANOS

FROM x.staff

WHERE ANOS NOT BETWEEN 9 AND 11

Page 31: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 31

PESQUISAS PARCIAIS

Para pesquisar um subconjunto de caracteres : LIKE

% Conjunto de caracteres quaisquer

_ Um caracter qualquer

EXEMPLOS:

WHERE NOME LIKE ‘G%’ Inclui: GRAHAM

GONZALES

GAFNEY

WHERE NOME LIKE ‘%SON’ Inclui: WILSON

JASON

WHERE NOME LIKE ‘%M%N%’ Inclui: SAMANTA

MOLINARI

WHERE NOME LIKE ‘_ _’ Inclui: LU

WHERE NOME LIKE ‘_R%’ Inclui: FRAYE

GRAHAM

O operadores ESCAPE permite que seja utilizado outro caracter no

lugar do ‘%’.

Exemplo:

... WHERE coluna LIKE ‘100+%%’ ESCAPE ‘+’

Notas:

No exemplo estamos procurando strings que começam por ‘100%’.

Primeiro ‘%’ é interpretado como um caracter comum pois é precedido pelo

caracter ‘+’ que foi definido através do operador ESCAPE.

Segundo ‘%’ é interpretado como um conjunto de caracteres quaisquer

pois não é precedido por nenhum caracter de ESCAPE.

Neste exemplo, quaisquer ocorrência do ‘+’ que não sejam ‘++’, ‘+%’ ou ‘+_’

provoca erro.

Page 32: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 32

NEGAÇÃO

Para reverter o teste:

WHERE NOME NOT LIKE ‘G%’

Exclui: GRAHAM, GONZALES, GAFNEY.

WHERE ANOS NOT BETWEEN 9 AND 11

Exclui: ANOS de 9 a 11

USER

Registro Especial

Authorization ID do tempo de execução

Comprimento fixo de 8 bytes

Útil para query dependente de executor

SELECT *

FROM SYSIBM.SYSTABLES

WHERE OWNER = USER

Page 33: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 33

MANIPULANDO TABELA RESULTANTE

Para classificar as linhas: ORDER BY

Para eliminar linhas duplicadas: SELECT DISTINCT

ORDER BY

Para classificar numa sequência especifica:

Lista classificada do pessoal do depto 84

SELECT NOME, CARGO, ANOS

FROM x.staff

WHERE DEPT = 84

ORDER BY NOME

Resultado:

NOME CARGO ANOS

DAVIS VENDAS 5

GAFNEY ATEND 5

PINHO GER 10

VIEIRA VENDAS 7

Notas:

Colunas classificadas devem ser referenciadas pelo SELECT

Nulos são considerados como valor mais alto.

Podemos especificar colunas para o ORDER BY fornecendo um número que

indica a posição da mesma coluna na cláusula SELECT. O ORDER BY é o

único que permite isto.

A cláusulas ORDER BY classifica uma tabela resultante. Logo deve ser

SEMPRE a única e a Última a aparecer numa instrução SELECT.

Page 34: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 34

ORDER BY (Continuação)

Para classificar pelas coluna(s) em ordem ASCendente (default) ou

DESCendente.

SELECT NOME, CARGO, ANOS

FROM x.staff

WHERE DEPT = 84

ORDER BY CARGO, ANOS DESC

Resultado:

NOME CARGO ANOS

GAFNEY ATEND 5

PINHO GER 10

VIEIRA VENDAS 7

DAVIS VENDAS 5

ORDER BY ANOS DESC, CARGO

Resultado:

NOME CARGO ANOS

PINHO GER 10

VIEIRA VENDAS 7

GAFNEY ATEND 5

DAVIS VENDAS 5

Page 35: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 35

SELECT DISTINCT

SELECT DEPT FROM x.staff

DEPT

20

20

38

38

15

38

10

.

.

Para eliminar linhas duplicadas:

SELECT DISTINCT DEPT FROM x.staff

DEPT

20

15

20

38

.

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

: :

Page 36: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 36

SELECT DISTINCT (Continuação)

Notas:

A Palavra chave DISTINCT deve aparecer logo depois do SELECT.

Classificação ocorre pelas colunas da esquerda para a direita.

‘ORDER BY’ pode ser usada para controlar a classificação.

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

. .

. .

. .

Page 37: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 37

SELECT DE VALORES CALCULADOS

+ SOMA * MULTIPLICAÇÃO

- SUBTRAÇÃO / DIVISÃO

Ganho total de cada pessoa do DEPT 20

SELECT ID, SALARIO, COMIS, SALARIO + COMIS AS TOTAL

FROM x.staff

WHERE DEPT = 20

Resultado:

ID SALARIO COMIS TOTAL

10 18357.50 - -

20 18171.25 612.45 18783.70

80 13504.60 128.20 13632.80

190 14252.75 126.50 14379.25

Pessoas cujo salário mais comissão excede R$ 20.000

SELECT NOME, SALARIO + COMIS AS TOTAL

FROM x.staff

WHERE SALARIO + COMIS > 20000

Resultado:

NOME TOTAL

OLIVEIRA 20094.15

GRAHAM 21200.30

Page 38: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 38

ORDER BY POR VALOR CALCULADO

Exemplo 1:

SELECT NOME, SALARIO + COMIS

FROM x.staff

WHERE SALARIO + COMIS > 20000

ORDER BY 2 DESC

Resultado:

NOME TOTAL

GRAHAM 21200.30

OLIVEIRA 20094.15

Exemplo 2:

SELECT CARGO, SALARIO + COMIS

FROM x.staff

ORDER BY CARGO, 2

Page 39: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 39

OPERADORES DE CONCATENAÇÃO

string1 || string2 string1string2

‘ABC’ || ‘XYZ’ ‘ABCXYZ’

TABELAX ( colunas varchar : SNOM e NOME )

SNOM NOME MID

JONES JOHN P

MARQUES FRANCO X

. . .

SELECT SNOM || ‘,’ || NOME||‘ ‘ || MID || ‘.’

FROM TABELAX

Resultado:

JONES,JOHN P.

MARQUES,FRANCO X.

. . .

Page 40: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 40

SELECT AVANÇADO

FUNÇÕES DE COLUNA

Transforma dados de uma coluna em um único valor.

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

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.

Page 41: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 41

SUM AVG MAX MIN

Exemplo:

SELECT SUM(SALARIO), AVG(SALARIO),

MIN(COMIS), MAX(COMIS)

FROM x.staff

WHERE DEPT = 66

Resultado:

86076.20 17215.24 55.50 844.00

Notas:

Geram um único valor a partir de um conjunto de valores de uma única

coluna.

O resultado não contém detalhes de linhas individuais.

Podem ser pedidas mais de um função para a mesma coluna, conforme o

exemplo.

Nulos são excluídos.

Precisão (parte inteira, casa decimal) deriva da coluna.

Para a função AVG de uma coluna DECIMAL(p,s) o resultado terá

precisão.

Expressões do seguinte tipo também podem ser argumento de uma

função de coluna.

Exemplo: AVG(SALARIO + COMIS)

Page 42: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 42

COUNT

COUNT(*) Número de linhas que satisfazem a condição WHERE

COUNT(DISTINCT coluna) Número de valores diferentes na coluna

Nulos não são contados.

Contar as pessoas cujo salário exceda $ 18.000 e contar os seus

respectivos departamentos. Mostre a média salarial.

SELECT COUNT(DISTINCT DEPT), COUNT(*), AVG(SALARIO)

FROM x.staff

WHERE SALARIO > 18000

Resultado:

8 16 19604.190625

SELECT AVG(COMIS), SUM(COMIS) FROM x.staff

Resultado:

513.31 12319.45

LITERAIS

SELECT ‘MED:’ AVG(COMIS), ‘SOMA:’ SUM(COMIS)

FROM x.staff

Resultado:

MED: 513.31 SOMA: 12319.45

Notas:

Literais podem ser mostradas no resultado de um SELECT

São Particularmente úteis quando usadas com funções de coluna que não

exibem cabeçalhos.

Page 43: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 43

GROUP BY

Com o GROUP BY, a função de coluna calcula um valor para cada

AGRUPAMENTO.

SELECT DEPT, SUM(SALARIO) as TOTSAL,

SUM(COMIS) as TOTCOM

FROM x.staff

WHERE CARGO <> ‘GER’

GROUP BY DEPT

Resultado:

DEPT TOTSAL TOTCOM

15 41269.53 1468,70

20 45928.60 867.15

38 59778.80 1913.30

: : :

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 sequência obedecerá a sequência do índice que pode estar definida

como sendo de ordem descendente.

Page 44: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 44

GROUP BY ... ORDER BY

Podemos alterar a ordem de classificação

SELECT DEPT, SUM(SALARIO) AS TOTSAL,

SUM(COMIS) AS TOTCOM

FROM x.staff

WHERE CARGO <> ‘GER’

GROUP BY DEPT

ORDER BY 3

Resultado:

DEPT TOTSAL TOTCOM

20 45928.60 867.15

. . .

15 41269.53 1468.70

. . .

38 59778.80 1913.30

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

frequente.

Resultado contém uma linha sumário para cada grupo.

Todos os valores nulos são considerados como um grupo.

Page 45: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 45

GROUP BY ... HAVING

Condições sobre grupos

SELECT . . . FROM . . .

WHERE . . .

GROUP BY . . . FILTROS

HAVING . . .

WHERE - Escolhe linhas

HAVING - Escolhe grupos

SELECT DEPT, SUM(SALARIO) AS TOTSAL

FROM x.staff

GROUP BY DEPT

DEPT TOTSAL

10 83463.45

15 61929.33

20 64286.10

38 77285.55

42 58369.05

: :

SELECT DEPT, SUM(SALARIO) AS TOTSAL

FROM x.staff

GROUP BY DEPT

HAVING SUM(SALARIO) > 65000

DEPT TOTSAL

10 83463.45

38 77285.55

: :

Page 46: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 46

EXEMPLOS DE HAVING(Continuação)

Média salarial por departamento. Considerar apenas os não-gerentes dos

departamentos com mais de 3 pessoas sem cargo gerencial.

SELECT DEPT, AVG(SALARIO) AS MEDIASAL

FROM x.staff

WHERE CARGO <> ‘GER’

HAVING COUNT(*) > 3

Média salarial por departamento em ordem decrescente de média.

Considerar apenas os não-gerentes dos departamentos compostos por

pessoas com experiência mínima de 5 anos.

SELECT DEPT, AVG(SALARIO) AS MEDIASAL

FROM x.staff

WHERE CARGO <> ‘GER’

GROUP BY DEPT

HAVING MIN(ANOS) >= 5

ORDER BY 2 DESC

Notas:

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.

Page 47: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 47

SUMÁRIO FUNÇÕES DE COLUNA

Funções de colunas só podem ser especificados em:

SELECT

HAVING

SELECT pode especificar somente:

Função de Colunas

Colunas especificadas no GROUP BY

HAVING pode especificar:

Função de colunas sobre qualquer coluna contida numa tabela

especificada na FROM.

Funções de Colunas não podem ser embutidas uma dentro da outra

FUNÇÕES ESCALARES

Transforma um único valor em outro valor.

Funções STRING

Funções de conversão

Funções DATE/TIME

Notas:

Ao contrário das Funções de colunas que transformam um conjunto de

valores de uma coluna num único valor, as funções Escalares operam

somente sobre um único valor.

Funções escalares podem ser embutidas uma dentro da outra.

Exemplo: SUBSTR(SUBSTR(...)...)

Funções de colunas podem ser argumento de uma função escalar.

Exemplo: MAX(SUBSTR(...))

Page 48: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 48

SUBSTR(string, início, comprimento)

SELECT DEPTNOME, SUBSTR(DEPTNOME,1,4) as NOMEPARC

FROM x.org

Resultado:

DEPTNOME NOMEPARC

MATRIZ MATR

CAMPINAS CAMP

RIO RIO

MINAS MINA

BAHIA BAHI

. .

SELECT DEPTCOD, DIVISÃO

FROM x.org

WHERE SUBSTR(DIVISÃO,4) = ‘ESTE’

Resultado:

DEPTCOD DIVISÃO

15 SUDESTE

20 SUDESTE

38 SUDESTE

Notas:

Se o Comprimento não for especificado, a função pega todo o resto.

Se a posição do início ultrapassar o final do string teremos erro.

Se o início + comprimento ultrapassar o final do string teremos erro.

Substring de nulo é nulo.

Page 49: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 49

LENGTH

SELECT NOME, LENGTH(NOME) AS TAMNOME,

CARGO, LENGTH(CARGO) AS TAMCAR

FROM x.staff

Resultado:

NOME TAMNOME CARGO TAMCAR

SANTANA 7 GER 6

ORSINI 6 VENDAS 6

GONZALES 8 VENDAS 6

. . . .

Notas:

Fornece o tamanho de uma coluna do tipo caracter.

Se o argumento é nulo, o resultado também será nulo.

Page 50: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 50

VALUE

Dada uma lista de argumentos, mostra o primeiro não nulo

SELECT ID, COMIS, VALUE(COMIS, 0)

FROM x.staff

Resultado:

ID COMIS

10 - 0.00

20 612.45 612.45

30 - 0.00

. . .

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 comparáveis (todos

numéricos ou todos caracteres).

Se todos argumentos forem nulos, o resultado será nulo.

Page 51: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 51

FUNÇÕES DE CONVERSÃO

Converte um tipo de representação em outro.

DECIMAL, FLOAT, INTEGER Número - Número

DIGITS Número - Alfa

HEX Hexadecimal - Alfa

SELECT DECIMAL(SAL,9,1), INTEGER(SAL)

FROM EMP

WHERE ID = 55

Se coluna SAL é (DEC (7,2)):

17506.75

17506.7 17506

Notas:

DECIMAL, FLOAT, INTEGER: Converte dados numéricos

DIGITS: Representação alfanumérica de um valor numérico

HEX: Representação hexadecimal de um argumento. Cada digito

hexadecimal é representada por 2 caracteres do string resultante.

Page 52: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 52

DADOS DATE/TIME

DATE, TIME, TIMESTAMP armazenados como decimal compactado

sem sinal

Data Types Formato Interno

DATE aaaammdd

TIME hhmmss

TIMESTAMP aaaammddhhmmssnnnnnn

Programas lidam só com FORMATO EXTERNO: string de caracteres

Formato Formato TIME Tamanho Formato Date Tamanho

ISO hh.mm.ss 8 bytes aaaa-mm-dd 10 bytes

USA hh.mm AM/PM 8 bytes mm/dd/aaaa 10 bytes

EUR hh.mm.ss 8 bytes dd.mm.aaaa 10 bytes

JIS hh:mm:ss 8 bytes aaaa.mm.dd 10 bytes

Page 53: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 53

ARITMÉTICA DATE/TIME

Somente adição e subtração

Pode usar MIN, MAX, COUNT

Não pode usar SUM e AVG

DURACAO DATE/TIME

DURAÇÃO SIMPLES

Horário + ou - Horário Duração em hhmmss

(packed decimal(8,0))

data + ou - data Duração em aaaammdd

(packed decimal(8,0))

Duração Rotulada

Número ‘n’ seguida da palavra chave:

YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS,

MICROSECONDS

Somando/Subtraindo duração

DATACOL1 + 3 MONTHS Resulta em Data

TEMPCOL1 - 30 MINUTES - 20 SECONDS Resulta em tempo

TSTCOL + 2 DAYS - 3 HOURS

TMSTCOL + 50000 MICROSECONDS

Subtraindo datas e tempos

DATACOL1 - DATACOL2

DATACOL1 - ’25.12.1998’

TEMPCOL1 - TEMPCOL2

TEMPCOL1 - ’11.30.00’

Page 54: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 54

EXEMPLOS ARITMÉTICA DATE/TIME

Tabela DT

PROJCOD DATAINI DATAFIM HRINI HRFIM

AX001 31.01.1990 31.03.2005 00:00:00 15:30:00

AX002 29.02.1988 31.08.1988 00:00:00 00:00:00

AX003 01.02.1987 01.02.1987 16:00:00 23:41:59

SELECT PROJCOD, DATAINI + 1 YEAR AS DATAINI,

DATAFIM - 2 MONTHS AS DATAFIM ...

Resultado:

PROJCOD DATAINI DATAFIM

AX001 31.01.1991 31.01.2005

AX002 28.02.1989 30.06.1988

AX003 01.02.1988 01.12.1986

SELECT PROJCOD, DATAFIM - DATAINI AS aaaammdd,

HRFIM - HRINI AS hhmmss ...

Resultado:

PROJCOD aaaammdd hhmmss

AX001 00150200 153000

AX002 00000602 000000

AX003 00000000 074159

Page 55: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 55

FUNÇÕES ESCALARES DATE/TIME

CHAR: Controla formato externo de dados DATE/TIME

SELECT CHAR(HRFIM,ISO) AS HR_ISO,

CHAR(HRFIM,USA) AS HR_USA

FROM DT

WHERE PROJCOD = ‘AX001’

Resultado:

HR_ISO HR_USA

15.30.00 03:30 PM

DAY, MONTH, YEAR

HOURS, MINUTE, SECOND

MICROSECOND

Extrai parte de uma data, horário ou timestamp

Resulta num inteiro binário.

SELECT DAY(DATAINI) AS DIA, MONTH(DATAINI) AS MÊS,

YEAR(DATAINI) AS ANO FROM DT

WHERE YEAR(DATAINI) > 1988

Resultado:

DIA MÊS ANO

31 1 1990

Page 56: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 56

FUNÇÕES ESCALARES DATE/TIME(Continuação)

DAYS Número de dias desde 31/01/0000

SELECT DATAFIM - DATAIN AS DATAS, DAYS(DATAFIM) -

DAYS(DATAIN) AS NU_DIAS FROM DT

WHERE PROJCOD = ‘AX001’

Resultado:

DATAS NU_DIAS

00150228 5538

aaaammdd (n.º dias)

DATE, TIME

Extrai data ou horário de um timestamp.

CURRENT DATE

Data de hoje

CURRENT TIME

Horário do momento.

CURRENT TIMESTAMP

Data e horário do momento convertido para Timestamp.

Page 57: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 57

JOIN DE TABELAS

Mesmo domínio

ID NOME DEPT

10 SANTANA 20

20 ORSINI 20

30 DANTAS 38

40 O’BRIEN 38

50 SOUZA 15

60 SUZUKI 38 DEPTCOD DEPTNOME GERENTE

70 ALMEIDA 15 10 MATRIZ 160

80 JAMES 20 15 CAMPINAS 50

90 KOONITZ 42 20 RIO 10

100 PLOTZ 42 38 MINAS 30

. . . 42 BAHIA 100

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 pelas cláusulas FROM

Resultado é um subconjunto do produto cartesiano das tabelas.

Page 58: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 58

JOIN DE TABELAS(Continuação)

Listar o nome dos departamentos e seus respectivos gerentes.

SELECT DEPTNOME, NOME

FROM x.staff, x.org

WHERE GERENTE = ID

Resultado:

DEPTNOME NOME

RIO SANTANA

MINAS DANTAS

CAMPINAS SOUZA

. .

Listar o nome dos departamentos da divisão Sudeste e seus respectivos

gerentes.

SELECT DEPTNOME, NOME

FROM x.staff, x.org

WHERE DIVISAO = ‘SUDESTE’ AND GERENTE = ID

ATENÇÃO:- Procure não fazer JOIN de tabelas sem a cláusula WHERE.

SELECT A1, B1 FROM TBLA, TBLB Produto Cartesiano.

A1 A2 A3 R1 R2 B1 B2 B3

A A X X

B A Y Y

C B X

B Y

C X

C Y

Page 59: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 59

JOIN COM MAIS DE DUAS TABELAS

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

. . . . .

QUALIFICADORES

COD NOME DEPT CARGO COD DEPTNOME GERENTE

10 SANTANA 20 GER 10 MATRIZ 160

20 ORSINI 20 VENDA . . .

. . . . 10 RIO 10

Listar o nome dos gerentes, e respectivos nome e código de

departamentos.

SOLUÇÃO:

Qualificar com o nome da tabela

SELECT NOME, x.org.CODIGO, DEPTNOME

FROM x.staff, x.org

WHERE CARGO = ‘GER’ AND DEPT = x.org.CODIGO

Qualificador correlacionado

SELECT NOME, Z.CODIGO, DEPTNOME

FROM x.staff, x.org Z

WHERE CARGO = ‘GER’ AND DEPT = Z.CODIGO

Page 60: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 60

QUALIFICADORES

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 caso exemplo a tabela x.org foi rotulada como “Z”. Assim a

coluna Z.CODIGO é uma referência à coluna x.org.CODIGO.

Esta rotulação não é permanente e vale somente durante a execução da

instrução SELECT que faz uso da mesma.

Page 61: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 61

JOIN DE UMA TABELA COM ELA MESMA

Liste os empregados que ganham mais que os seus gerentes

CONCEITUALMENTE:

1. Obter um empregado da VEMPR

MATR NOME ... SALARIO ... GER

150 OLIVEIRA 19456.50 140

2. Obter informações do gerente da VEMPR

MATR NOME ... SALARIO ... GER

140 SANTANA 18357.50 050

3. Comparar o salário dos dois

4. Se a condição é satisfeita, colocar a linha na tabela resultante e

partir para o próximo empregado.

Solução:

SELECT E.NOME, E.SALARIO, G.NOME, G.SALARIO

FROM VEMPR E, VEMPR G

WHERE E.GER = G.MATR AND E.SALARIO > G.SALARIO

Resultado:

NOME SALARIO NOME SALARIO

OLIVEIRA 19456.50 SANTANA 18357.50

. . . .

. . . .

Page 62: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 62

INNER JOIN

Uma outra maneira de codificar o JOIN entre duas tabelas

SELECT DEPTNOME, NOME

FROM x.staff INNER JOIN x.org

ON GERENTE = ID

Resultado:

DEPTNOME NOME

RIO SANTANA

MINAS DANTAS

CAMPINAS SOUZA

. .

Nota:

Quando utilizamos a cláusulas JOIN deve mudar o predicado WHERE por

ON.

TABELAS EXEMPLOS:

EMPL DEPTO

EMPNO NOME DEPTNOME CODEMP

10 HAAS SPIFFY COMPUTER 10

150 ADAMSON DEVELOPMENT -

20 THOMPSON SOFTWARE 100

250 SMITH ADMINISTRATION 700

100 SPENSER BRANCH OFFICE -

70 PILASKI

140 NATZ

Page 63: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 63

OUTER JOIN

Seleciona todas as linhas de um INNER JOIN mais as linhas não

selecionadas de ambas as tabelas.

RIGHT OUTER JOIN Seleciona as linhas da tabela à direita.

LEFT OUTER JOIN Seleciona as linhas da tabela à esquerda.

FULL OUTER JOIN Seleciona as linhas de ambas as tabelas.

SELECT NOME, DEPTNOME

FROM EMPL RIGHT OUTER JOIN DEPTO

ON EMPNO = CODEMP

SELECT NOME, DEPTNOME

FROM EMPL LEFT OUTER JOIN DEPTO

ON EMPNO = CODEMP

Resultados:

RIGHT OUTER JOIN LEFT OUTER JOIN

NOME DEPTNOME NOME DEPTNOME HAAS SPIFFY COMPUTER HAAS SPIFFY COMPUTER

- DEVELOPMENT ADAMSON -

SPENSER SOFTWARE THOMPSON -

PULASKI ADMINISTRATION SMITH -

- BRANCH OFFICE SPENSER SOFTWARE

PULASKI ADMINISTRATION

NATZ -

Page 64: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 64

EXPRESSÕES CASE

Em tempo de retorno do resultado da Query podemos atribuir valores a

serem mostrados/exibidos a determinados retornos, o exemplo abaixo

nos dará uma boa noção desta facilidade.

SELECT PARTNO, DESCRIPT, COLOR,

CASE WHEN SIZE = ‘S’ THEN ‘Small’

WHEN SIZE = ‘M’ THEN ‘Medium’

WHEN SIZE = ‘L’ THEN ‘Large’

WHEN SIZE = ‘X’ THEN ‘Xlarge’

ELSE ‘DESCONHECIDO’ END AS SIZE, QTY

FROM QTY <= REORDER_PT

Resultado:

PARTNO DESCRIPT COLOR SIZE QTY

12-234 SWEATER BLUE SMALL 18

12-235 SWEATER RED MEDIUM 22

14-276 JACKET GREEN DESCONHECIDO 9

Mais Expressões CASE

Usando na cláusulas WHERE

... WHERE (CASE WHEN SALARY = 0 THEN NULL

ELSE COMM/SALARY END) > .25

Usando em Funções de colunas

... MIN (CASE WHEN QTY > 0 THEN QTY

ELSE NULL END)

Page 65: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 65

UNION

UNION junta as tabelas resultado

SELECT A1, A4 FROM TBLA

WHERE A2 = ‘Z’

Resultado

UNION

SELECT B3, B4 + B2 FROM TBLB

WHERE B1 >= ‘N’

Resultado

Notas:

Esta técnica faz a união de uma ou mais tabelas resultado.

Query complexas podem ser feitas usando o UNION.

A Quantidade de colunas deve ser a mesma em todos os SELECTs.

Os data types das colunas correspondentes devem ser iguais.

O tamanho das colunas correspondentes podem ser diferentes.

O operador UNION une as tabelas resultantes e elimina as linhas

duplicadas, que implica num sort.

operador UNION ALL também une tabelas mas não elimina linha

duplicadas. Não chama o SORT portanto.

Para os nomes das colunas no cabeçalho são adotadas as do primeiro bloco

de SELECT.

Page 66: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 66

UNION(Continuação)

A faixa de salário dos atendentes atingiria a faixa de salários do pessoal

de vendas se fosse dado um aumento de 17% e 2% respectivamente ?

SELECT CARGO, SALARIO * 1.17 AS SALARIO

FROM x.staff

WHERE CARGO = ‘ATEND’

UNION

SELECT CARGO, SALARIO * 1.02

FROM x.staff

WHERE CARGO = ‘VENDAS’

ORDER BY 2 DESC

Resultado:

CARGO SALARIO

VENDAS 21420.0000

. .

. .

VENDAS 17144.4660

ATEND 16918.2000

VENDAS 16832.8866

SELECT NOME FROM X.CANDIDATOS

WHERE ENDERECO LIKE ‘%SP’

UNION ALL UNION

SELECT SOBRENOME FROM X.ENTREVISTADOS

WHERE SIT = ‘REP’

Resultado:

NOME NOME

JACOBS ARANTES

MARQUES JACOBS

ARANTES MARQUES

SILVA SILVA

MARQUES

JACOBS

Cabeçalho do

primeiro

SELECT

Page 67: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 67

SUBQUERY

É um SELECT embutido dentro de um SELECT

O resultado de uma subquery é usado pelo SELECT “EXTERNO”

Exemplo de SUBQUERY.

Listar empregados cujo departamento esteja subordinado ao

departamento ‘A00’

SNOME DEPARTAMENTO DCOD DSUPER

SELECT SNOME, DEPARTAMENTO

FROM EMP

WHERE DEPARTAMENTO IN (SELECT DCOD

FROM DEPT

WHERE DSUPER = ‘A00’)

RESULTADO SOMENTE RESULTADO DA SUBQUERY

DO SELECT DE NÍVEL RETORNADO PARA O

MAIS ALTO NÍVEL SUPERIOR

Considerações SUBQUERY:

1. Pode ser usada no WHERE ou no HAVING

2. Pode ser encadeado

3. A escolha do operador do SELECT externo depende da quantidade de

linhas do SUBQUERY.

4. Deve estar a direita do operador na condição de seleção.

5. Deve ser colocado entre parênteses.

6. O SUBQUERY deve selecionar apenas um coluna.

7. O SUBQUERY pode retornar uma ou mais linhas e isto acaba

determinando o operador a ser usado na condição de procurar.

8. Não pode conter UNION, UNIN ALL ou ORDER BY.

Page 68: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 68

9. SUBQUERY conhecido como SUBSELECT.

SUBQUERY DE UMA LINHA

Listar os funcionários com salário superior à média da companhia

SELECT NOME, SALARIO

FROM x.staff

WHERE SALARIO > (SELECT AVG(SALARIO)

FROM x.staff)

Resultado:

NOME SALARIO

SANTANA 18357.50

ORSINI 18171.25

Mostrar o funcionário com o maior salário.

SELECT NOME, SALARIO

FROM x.staff

WHERE SALARIO = (SELECT MAX(SALARIO)

FROM x.staff)

Resultado:

NOME SALARIO

MOLINARI 22959.20

Page 69: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 69

SUBQUERY COM VÁRIAS LINHAS: ALL

Lista classificada dos funcionários com salário superior a toda e qualquer

média salarial departamental.

Encontrar média salarial para cada departamento.

(SELECT AVG(SALARIO) FROM x.staff GROUP BY DEPT)

Compare o salário de cada funcionário com a lista devolvida pela

SUBQUERY.

SELECT NOME, SALARIO FROM x.staff

WHERE SALARIO > ALL (SELECT AVG(SALARIO)

FROM x.staff GROUP BY DEPT)

ORDER BY NOME

Resultado:

NOME SALARIO

FRAYE 21150.00

GRAHAM 21000.00

JONES 21234.00

MOLINARE 22959.20

Lista classificada dos funcionários com salário maior que a média salarial

de qualquer departamento.

Encontrar a média salarial para cada departamento.

Compare o salário e cada funcionário com a lista devolvida pela

SUBQUERY.

SELECT NOME, SALARIO FROM x.staff

WHERE SALARIO > ANY(SELECT AVG(SALARIO)

FROM x.staff GROUP BY DEPT)

ORDER BY NOME

Resultado:

NOME SALARIO

DANIELS 19260.25

DAVIS 15454.50

EDWARDS 17844.00

Page 70: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 70

IN

Lista de gerentes da divisão Sul

SELECT DEPT, NOME FROM x.staff

WHERE ID = ANY (SELECT GERENTE FROM x.org

WHERE DIVISAO = ‘SUL’)

SUBQUERY Resulta numa lista de Gerentes da divisão SUL

‘IN’ equivale a um série de ‘OR’ ... = ‘ sobre uma coluna

‘=ANY’ pode substituir ‘IN’

SELECT DEPT, NOME FROM x.staff

WHERE ID IN (SELECT GERENTE FROM x.org

WHERE DIVISAO = ‘SUL’)

HAVING COM SUBQUERY

Liste os departamentos cuja média salarial seja inferior à média da

companhia. Ignore os gerentes. Mostre as médias e ordene pelas mesmas.

SELECT DEPT, AVG(SALARIO) FROM x.staff

WHERE CARGO <> ‘GER’ GROUP BY DEPT

HAVING AVG(SALARIO) < (SELECT AVG(SALARIO)

FROM x.staff

WHERE CARGO <> ‘GER’)

ORDER BY 2 DESC

Resultado:

DEPT

66 16880.175000000

51 16235.200000000

84 15443.000000000

20 15309.530000000

Page 71: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 71

SUBQUERY CORRELACIONADA

Listar os empregados com salário superior à média de seus respectivos

departamento.

SELECT NOME, SALARIO

FROM x.staff CV

WHERE SALARIO > (SELECT AVG(SALARIO) FROM x.staff

WHERE DEPT = CV.DEPT)

Uma SUBQUERY correlacionada é executada a cada linha devolvida ao

SELECT externo!

Listar os gerentes ganhando menos que $18.000 se existir pelo menos um

gerentes com salário superior à $22.000.

SELECT ID, NOME, SALARIO, DEPT FROM x.staff

WHERE CARGO = ‘GER’ AND SALARIO < 18000

AND EXISTS(SELECT * FROM x.staff

WHERE CARGO = ‘GER’ AND

SALARIO > 22000)

ID NOME SALARIO DEPT

30 MARENGHI 17506.75 38

Verdadeiro/Falso no SELECT interno

Determina se o SELECT externo será executado.

Notas:

Este é um operador que tem como argumento um SELECT.

Esta SUBQUERY não devolve nenhuma tabela resultante.

EXISTS devolve V ou F e como faz parte de uma condição de procura,

determina uma eventual execução ou não do SELECT externo.

EXISTS pode ser negado por um NOT.

Page 72: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 72

MANUTENÇÃO DE DADOS - INSERT

Insert de uma linha

INSERT INTO PROJ

VALUES(‘MA2114’, ‘ ‘, ‘B01’, ‘ ‘, NULL, CURRENT DATE, NULL)

OU

INSERT INTO PROJ

(DEPT, PCODIGO, PNOME, RESP, DATAINI)

VALUES(‘B01’, ‘MA2114’, ‘ ‘, ‘ ‘, CURRENT DATE)

Resultado: PCODIGO PNOME DEPT RESP EQUIPE DATAINI DATAFIM

........... .............. ....... ........ ............. ................. ................

OP2011 SUPORTE E21 320 001.00 25.12.1998 01.02.1999

OP2012 APLICACAO E21 330 001.00 25.12.1998 01.02.1999

OP2013 DB/DC E21 340 001.00 25.12.1998 01.02.1999

MA2114 B01 ? 26.12.1998 ?

INSERT de múltiplas linhas

TESTPROJ PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

INSERT INTO TESTPROJ

SELECT * FROM PROJ

WHERE DEPT LIKE ‘B%’

OR DEPT IN (‘E11’. ‘E21’, ‘E31’)

Resultado PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

PL2100 ...... B01 20 001.00 01.01.1987 15.09.1987

OP1010 OPERAÇÃO E11 90 005.00 01.01.1986 01.05.1988

OP2010 SUPORTE II E21 100 004.00 01.01.1982 01.02.1988

OP2011 ..... E21 320 001.00 01.01.1982 01.02.1988

OP2012 ..... E21 330 001.00 01.01.1982 01.02.1988

OP2013 ..... E21 340 001.00 01.01.1982 01.02.1988

Page 73: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 73

MANUTENÇÃO DE DADOS - UPDATE

Update de colunas

Antes: PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

PL2100 ...... B01 20 001.00 01.01.1987 15.09.1987

OP1010 OPERAÇÃO E11 90 005.00 01.01.1986 01.05.1988

OP2010 SUPORTE II E21 100 004.00 01.01.1982 01.02.1988

OP2011 ..... E21 320 001.00 01.01.1982 01.02.1988

OP2012 ..... E21 330 001.00 01.01.1982 01.02.1988

OP2013 ..... E21 340 001.00 01.01.1982 01.02.1988

UPDATE TESTPROJ

SET EQUIPE = EQUIPE*2, DATAFIM=NULL,

DATAINI=’02.01.1999’

WHERE DEPT = ‘B01’

Depois: PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

PL2100 ...... B01 20 002.00 02.01.1999 ?

OP1010 OPERAÇÃO E11 90 005.00 01.01.1986 01.05.1988

OP2010 SUPORTE II E21 100 004.00 01.01.1982 01.02.1988

OP2011 ..... E21 320 001.00 01.01.1982 01.02.1988

OP2012 ..... E21 330 001.00 01.01.1982 01.02.1988

OP2013 ..... E21 340 001.00 01.01.1982 01.02.1988

Um subconjunto de linhas

UPDATE PESSOAL

SET SALARIO = SALARIO + 300

WHERE CARGO = ‘ATEND’

Todas as linhas:

UPDATE PESSOAL

SET ANOS = ANOS + 1

Page 74: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 74

MANUTENÇÃO DE DADOS - DELETE

Antes: PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

PL2100 ...... B01 20 002.00 02.01.1999 ?

OP1010 OPERAÇÃO E11 90 005.00 01.01.1986 01.05.1988

OP2010 SUPORTE II E21 100 004.00 01.01.1982 01.02.1988

OP2011 ..... E21 320 001.00 01.01.1982 01.02.1988

OP2012 ..... E21 330 001.00 01.01.1982 01.02.1988

OP2013 ..... E21 340 001.00 01.01.1982 01.02.1988

DELETE FROM TESTPROJ

WHERE DEPT = ‘B01’

Depois: PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

OP1010 OPERAÇÃO E11 90 005.00 01.01.1986 01.05.1988

OP2010 SUPORTE II E21 100 004.00 01.01.1982 01.02.1988

OP2011 ..... E21 320 001.00 01.01.1982 01.02.1988

OP2012 ..... E21 330 001.00 01.01.1982 01.02.1988

OP2013 ..... E21 340 001.00 01.01.1982 01.02.1988

Eliminar todas as ocorrências de uma tabela

DELETE FROM TESTPROJ

Depois: PCOD PROJNOME DEPT RESP EQUIPE DATAINI DATAFIM

Page 75: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 75

DDL

DATA DEFINITION LANGUAGE

Page 76: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 76

DDL

A Data Definition Language(DDL) faz parte das instruções SQL e divide-

se em três grupos.

1. CREATE Definição de objetos

2. ALTER Alteração da definição dos objetos

3. DROP Eliminação de objetos

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 o proprietário dos objetos.

Page 77: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 77

STORAGE GROUP

O nome de um STORAGE GROUP não deve ultrapassar 8 caracteres

Podem ser especificados até 133 volumes do mesmo device type no

parâmetro VOLUMES.

VCAT aponta para o catálogo ICF que qualificará os Datasets dos

Tablespaces e dos Indexspaces.

Exemplos:

Para criação de um Storage Group

CREATE STOGROUP CURXSG01

VOLUMES(PRD510)

VCAT DES;

COMMIT;

Alteração de um Storage Group:

ALTER STOGROUP CURXSG01

ADD VOLUMES(PRD512, PRD513)

REMOVE VOLUMES(PRD510);

COMMIT;

ALTER STOGROUP CURXSG01

VCAT CUR;

COMMIT;

Page 78: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 78

DATABASE

O Database é uma definição lógica, onde podemos agrupar todos os

Tablespaces, Tabelas, Índices com o mesmo critério de administração.

Autorização necessária para Criação de um DATABASE

Privilégio de CREATEDBA

Privilégio de CREATEDBC

Autoridade de SYSADM ou SYSCTRL

CREATE DATABASE CURXSG01

BUFFERPOOL BP0

STOGROUP CURXSG01;

COMMIT;

Parâmetros do Create DATABASE

1. BUFFERPOOL Indica o Buffer pool default para os Tablespaces e

Índices deste Database.

2. STOGROUP Indica o Stogroup default para todos os Objetos

deste Database.

Page 79: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 79

TABLESPACE

É uma VSAM LDS, onde serão definidas as tabelas.

Existem 3 tipos de Tablespaces:

1. SIMPLES As páginas de seus datasets contém dados de

uma ou mais tabelas. Aqui na CEF não utilizamos este tipo de

Tablespace.

2. Segmentado É dividido em segmentos que variam de 4 a 64

páginas e sempre em múltiplos de 4. E cada segmento só pode

conter ocorrências de uma única tabela, tamanho máximo deste

tipo de tablespace é 2Gbytes.

3. Particionado Utilizada para tabelas com grande quantidade de

dados, podendo chegar até 64Gbytes, assim distribuídos:

Até 16 Partições Cada partição com 4Gbytes

de 17 a 32 Partições Cada partição com 2Gbytes

de 33 a 64 Partições Cada partição com 1Gbytes

Exemplo de Criação de Tablespace SEGMENTADO.

CREATE TABLESPACE CURXTS01 IN CURXDB01

USING STOGROUP CURXSG01

PRIQTY 144

SECQTY 48

ERASE NO

LOCKSIZE ANY

BUFFERPOOL BP0

CLOSE NO

FREEPAGE 4

PCTFREE 25

SEGSIZE 8;

COMMIT;

ALTER TABLESPACE CURXDB01.CURXTS01

PRIQTY 240

USING STOGROUP CURXSG02;

COMMIT;

Page 80: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 80

TABLESPACE

Parâmetros

PRIQTY, SECQTY - Área de alocação em Kbytes.

LOCKSIZE - Tipo de Locking, as opções são:

Any - É o valor default , com este valor a decisão

pelo Locking fica por conta do DB2.

Tablespace - Locking pelo tablespace

Table - Locking pela Tabela

PAGE - Locking por página

ROW - Locking por Linha

ERASE - Especifica se o espaço ocupado pelo datasets

devem ser preenchidos com zero quando forem eliminados (DROP).

CLOSE - Especifica se o Dataset do tablespace deve

ser fechado quando não esta sendo utilizado.

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 á 255. Se o tablespace é

segmentado, o número deve ser menor que o tamanho do segmento.

PCTFREE - Especifica qual é a fração percentual das

páginas que devem ser mantidas livres quando o tablespace é carregado

ou reorganizado.

SEGSIZE - Se especificado, determina que o tablespace

será segmentado. O tamanho de um segmento é dado em quantidade de

páginas, deve ser inteiro múltiplos de 4, variando de 4 á 64.

NUMPARTS - Parâmetro mutuamente exclusivo como o

SEGSIZE, quando especificado indica que o Tablespace será

Particionado, é acompanhado de um número que indica a quantidade de

partições. Este número pode variar de 1 á 64.

Se nem SEGSIZE e nem NUMPARTS forem especificados, o Tablespace

será Simples.

Page 81: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 81

TABLE

É um conjunto de linhas coma as mesmas colunas. Os atributos das colunas

dever ser do tipo:

NOT NULL Preenchimento obrigatório

NOT NULL WITH DEFAULT Quando não preenchido, assume o

valor default

NULL Preenchimento opcional

Definições para colunas numéricas:

SMALLINT Inteiros, valor entre -32768 a 32767

INTEGER Inteiros, valor entre -2147483648 a

2147483648

DECIMAL (x,y) x=Dígitos e y=Decimais, até 31 Dígitos

FLOAT Ponto Flutuante 5.4E-79 TO 7.2E+75

Smallint é uma halfword (2bytes)

Integer é uma fullword(4bytes)

Decimal armazena números em decimal compactado. A faixa de valores

depende da quantidade de casas decimais.

Definições para colunas alfanuméricas:

CHAR(x) String de tamanho fixo, máximo 254 caracteres

VARCHAR(x) String de tamanho variável, onde x pode variar

de 0 a 4096 caracter.

Uma página DB2 não é totalmente utilizada para os dados pois existe um

espaço ocupado para informação de controle.

Definições para colunas DBCS:

GRAPHIC(x) String de tamanho fixo, máximo 127 caracteres.

VARGRAPHIC(x) String de tamanho variável, onde x pode variar

de 0 a 2048 caracteres.

Double Byte Caracter são caracteres especiais como ideogramas asiáticos

que requerem 2 bytes para serem identificados.

Page 82: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 82

TABLE

CREATE TABLE SICUR.CURXTB01FUNCAO

(CODIGO SMALLINT NOT NULL,

DESC_FUNCAO CHAR(20) NOT NULL,

DATA_INCLUSAO DATE NOT NULL,

PRIMARY KEY

(CODIGO))

IN CURXDB01.CURXTS01;

CREATE TABLE SICUR.CURXTB02CONCEITOS

( MATR CHAR(9) NOT NULL,

ALUNO CHAR(30) NOT NULL.

FUNCAO SMALLINT NOT NULL,

NOTA SMALLINT ,

CLASSIFICACAO SMALLINT ,

PRIMARY KEY(

MATR ,

ALUNO ),

FOREIGN KEY (FUNCAO) REFERENCES SICUR.CURXTB01FUNCAO

ON DELETE CASCADE)

IN CURXDB01.CURXTS01;

ALTER TABLE SICUR.CURXTB02CONCEITO

ADD DT_PROVA DATE ;

COMMIT;

PRIMARY KEY

Especifica a chave primária da tabela, sendo que a chave pode

ser composta de até 64 colunas. O comprimento de uma chave

primária não pode exceder 254 bytes. Apenas uma chave

primária é permitida por tabela.

FOREIGN KEY

Especifica a chave estrangeira da tabela. A definição de uma

chave estrangeira deve ser igual tamanho e tipo de dados. A

palavra chave REFERENCES identifica a tabela mãe (Parent

table). A Palavra chave ON DELETE especifica a regra de

deleção.

Page 83: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 83

ÍNDICE

É utilizado para agilizar o acesso aos dados.

CREATE [ UNIQUE ] INDEX SICUR.CURXPX02

ON SICUR.CURXTB02CONCEITO

(MATR ASC,

ALUNO ASC)

USING STOGROUP CURXSG02

PRIQTY 48

SECQTY 48

ERASE NO

BUFFERPOOL BP1

CLOSE YES

FREEPAGE 4

PCTFREE 15

CLUSTER;

COMMIT;

ALTER INDEX CURXPX02

USING STOGROUP CURXPX02

PRIQTY 192

CLOSE YES ;

COMMIT;

Parâmetros:

UNIQUE Palavra chave que indica que o índice não

permite duplicidade nas colunas compostas

neste índice.

CLUSTER Indica que o dados devem estar clusterizado

pelo índice

Page 84: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 84

VIEW

A View pode poder um subconjuto de uma ou mais tabelas.

Uma view é um objeto lógico e assim, seus dados não ocupam espaço físico.

CREATE VIEW SIXXX.CURXVW01JUNCAO

(CODIGO, FUNCAO, ALUNO)

AS

SELECT CODIGO, DESC_FUNCAO, ALUNO

FROM SICUR.CURXTB02CONCEITO INNER JOIN

SICUR.CURXTB01FUNCAO

ON CODIGO = FUNCAO;

COMMIT;

SYNONYM E ALIAS

CREATE SYNONYM FUNCAO FOR SICUR.CURXTB01FUNCAO;

COMMIT;

CREATE ALIAS CONCEITO FROM SICUR.CURXTB02CONCEITO;

COMMIT;

Diferença entre e o SYNONYM e ALIAS:

SYNONYM é restrita a um AUTH-ID.

ALIAS é de uso compartilhado a todos.

Page 85: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 85

DROP

Usado para eliminar qualquer objeto criado a partir de um comando

CREATE no DB2.

DROP DATABASE CURXDB01

Quando se elimina um Database, todos os objetos vinculados à ele

também são eliminados, tais como TABLESPACE, TABLE, INDEX, VIEW,

ALIAS e SYNONYM.

DROP TABLESPACE CURXDB01.CURXTS01

A sua eliminação acarreta a eliminação de Table, Index, View, Alias,

Synonym e Relacionamentos vinculadas a qualquer objeto deste

Tablespace, deleta fisicamente do Disco.

DROP TABLE SICUR.CURXTB01FUNCAO

A eliminação vem acompanhada da eliminação de Index, View, Alias,

Synonym e Relacionamento.

DROP INDEX SICUR.CURXPX01

Elimina o Índice, inclusive o INDEXSPACE.

DROP VIEW SICUR.CURXVW01

Elimina logicamente do DB2 o apontamento dos dados para a VIEW.

DROP SYNONYM/ALIAS CONCEITO

Elimina Sinônimo/Alias

DROP STOGROUP CURXSG01

Só podemos eliminar este objeto se o mesmo não estiver mais

sendo referenciado por um outro objeto.

Page 86: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 86

SQL ESTÁTICO vs. SQL DINÂMICO

ESTÁTICO

.....................................................

..................................................... Instrução SQL Completa

Exec SQL Fixo

Delete from Dept

End-Exec.

..................................................... Estratégia de acesso

..................................................... pré-estabelecida.

.....................................................

DINÂMICO

.....................................................

Var . Instrução SQL fornecida

durante a execução.

.....................................................

Exec SQL Estratégia de acesso

Execute Immediate : Var pré-estabelecida.

End-Exec

.....................................................

Delete from Dept

Notas:

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 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áusulas WHERE é candidata a estático.

Exemplo: WHERE SALARIO = :SAL AND NOME LIKE :STR

Page 87: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 87

PROGRAMAÇÃO EM SQL

Para podermos trabalhar com o SQL dentro de programas em linguagens

tradicionais, devemos codificá-lo usando delimitadores especiais. Esta

técnica é conhecida como SQL embutido e assemelha-se ao COMMAND

LEVEL do CICS.

O SQL trabalha com tabelas e linhas. É uma linguagem desenvolvida para

manipular conjuntos.

Já as linguagens tradicionais trabalham com arquivos e registros e não

conseguem reconhecer tabelas e linhas.

Para simularmos um arquivo com seus registros existe o CURSOR do DB2.

Assim o programa pode acessar a manipular linhas de uma tabela como se

estivesse trabalhando com um arquivo comum.

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.

Instrução SQL entre delimitadores.

EXEC SQL DELETE FROM DEPT END-EXEC

Os compilador das linguagens tradicionais não entende instruções SQL.

As instruções SQL devem ser embutidas dentro de um programa

separados por delimitadores para que possam ser tratados antes de

serem submetidas ao compilador.

Cada linguagem tem seu delimitador próprio para isolar as instruções SQL.

O delimitador que indica o início de uma instrução SQL é comum á todas

as linguagens.

Page 88: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 88

VARIÁVEL HOST

As 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 da variável HOST é a de fornecer um valor

a uma instrução AQL, tornando-a assim uma instrução genérica.

A referencia á variável HOST deve ser precedida pelo caracter “:”. Seu

uso é facultativo mas recomenda-se sua utilização para evitar

possibilidade de confusão.

O uso da variável HOST é opcional. Seu uso é obrigatório somente para as

instruções SELECT.

A variável HOST deve ser compatível com a coluna quanto ao seu data

type e ao seu tamanho.

As variáveis HOST não devem ser utilizadas para referenciar nomes de

tabelas ou de colunas.

Exemplo de Variáveis HOST:

EXEC SQL

INSERT INTO EMPR

(MATR, SOBRENOME) VALUES ( :MATR, :SNOME )

END-EXEC

EXEC SQL

UPDATE EMPR

SET SALARIO = SALARIO * :PERCENT

WHERE CARGO = :CARGO

END-EXEC

EXEC SQL

SELECT MATR, SOBRENOME

INTO :MATR, :SNOME

FROM EMPR

WHERE CARGO = :CARGO

END-EXEC

Page 89: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 89

PROCESSAMENTO DE MÚLTIPLAS LINHAS

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.

SELECT OPEN

MATR SOBRENOME

30 SILVA

290 SANTOS

300 ALMEIDA

FETCH

MATR SOBRENOME

30 SILVA 290 SANTOS

300 ALMEIDA

FETCH

MATR SOBRENOME

30 SILVA

290 SANTOS 300 ALMEIDA

Page 90: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 90

SELECT COM FETCH

Definição de um CURSOR

EXEC SQL

DECALRE CUR001 CURSOR FOR

SELECT MATR, SOBRENOME

FROM EMPR

WHERE DEPT = :DEPT

END-EXEC

Abrindo um CURSOR previamente definido.

EXEC SQL OPEN CUR001 END-EXEC

FETCH das linhas resultantes

EXEC SQL

FETCH CUR001 INTO :MATR, :SNOM

END-EXEC

Fechando o CURSOR quando terminar a leitura dos dados.

EXEC SQL CLOSE CUR001 END-EXEC

OPEN posiciona o CURSOR antes da primeira linha da tabela resultante.

FETCH avança o CURSOR uma linha para frente.

Não é possível fazer o FETCH voltar o CURSOR.

CLOSE no CURSOR não implica em COMMIT.

Page 91: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 91

COMMIT / ROLLBACK

COMMIT

Indica término bem sucedido de uma unidade de trabalho

Alteração dos dados serão gravadas.

Todas os PAGE LOCKS serão liberados

CURSOR fechado, exceto para CURSOR WITH HOLD

ROLLBACK

Unidade de trabalho corrente é abandonado

Atualização dos dados desde o último COMMIT são desfeitas

Todos os PAGE LOCKS são liberados

CURSOR fechado

Page 92: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 92

BIND

Preparação de Programa

Código Fonte

SQL

Biblioteca de

Include

PRECOMPILAÇÃO

Código Fonte

Modificado

DBRM

Biblioteca de

Usuário

Compilação BIND

Módulo Objeto

Linkedição

Módulo de Carga

Language Interface

Descrição da tabela

Autorização

DBRM

Plano/Package

Execução

Catálogo DB2

Diretório

Page 93: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 93

BIND

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 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. Mas sua função é

gerar a partir de fonte dois data set’s selados com um Timestamp. Os

data set’s gerados são:

DBRM (Database Request Module)

Contém todas as instruções SQL embutidas no fonte.

Fonte Modificada

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

copiados a partir de uma biblioteca de INCLUDE (DCLGEN – book

das tabelas)

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 é gerado.

O compilador gera o módulo objeto a partir do fonte modificado pelo

precompilador. O Timestamp é copiado do fonte.

Page 94: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 94

BIND

O linkage editor gera o módulo de carga á partir do módulo da linguagem

de interface do DB2. O Timestamp original é copiado do módulo Objeto.

O processador de BIND gera o Plano ou Package á partir do DBRM. O

Timestamp é copiado do DBRM.

Um Plano ou Package contém a estratégia de acesso aos dados DB2 com

informações do tipo:

Índices utilizados

Estratégia de Locking

Estratégia de execução do SQL

E outros

A fase de compilação/Linkedição e a fase de BIND são executadas

separadamente e podem ser executadas em qualquer ordem.

Page 95: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 95

BIND

O propósito de BIND é a geração do Plano ou de um Package. Á partir do

DBRM e do catálogo são executados os seguintes procedimentos:

Checagem das consistências das instruções SQL com os Objetos

manipulados. São checados nomes, data type das colunas, etc.

Checagem da autorização necessária para a execução das

instruções SQL.

Determinação da estratégia de acesso aos Objetos da manipulação,

pelo otimizador do DB2.

Plano/Package é armazenado no diretório e uma cópia do DBRM é

carregado no Catálogo.

BIND ADD

Utilizado para criar um novo Plano/Package

BIND REPLACE

Utilizado quando a própria instrução SQL foi alterada e queremos

refazer o Plano/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 índices ou atualizações das estatística do

Catálogo.

Page 96: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 96

BIND

BIND ADD REBIND BIND REPLACE

Adiciona Refaz Plano Refaz Plano

Plano Novo (Ambiente alterado) (SQL Alterado)

OTIMIZADOR

DBRM CATÁLOGO DIRETÓRIO

DBRM

PLANO

PACKAGE

Page 97: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 97

SEGURANÇA INTERNA DO DB2

A segurança interna do DB2 pode ser ativada ou não durante a geração.

Quando existe uma solicitação de atividade, o DB2 verifica três fatores:

Auth-id - Quem fez a solicitação?

Privilégios - O que se deseja fazer com o recurso?

Recurso - Qual é o Objeto de manipulação?

Estas informações ficam armazenadas no catálogo.

Auth-id representa um usuário ou um grupo de usuário e é informado ao

DB2 através do monitor de transações.

TABELAS SELECT

VIEW UPDATE [Lista de colunas]

INSERT

PLANOS BIND

PACKAGES EXECUTE

STOGROUP

BUFFERPOOL USE

TABLESPACE

SYSADM

DB2 RECOVER

TRACE, etc..

DBADM

DATABASE CREATETS

LOAD, etc..

Page 98: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 98

SEGURANÇA INTERNA DO DB2

Recursos DB2

Podemos proteger:

OBJETOS

Tabela, View

PLANOS/PACKAGES

Programas, QMF, SPUFI

COMANDOS DB2

-Bind, -Display

UTILITÁRIS DB2

Load, Recover

RECURSOS DO SISTEMA

Buffer, Storage Group

ATRIBUIÇÃO DE AUTORIDADE

Instrução SQL

+ + +

+ + +

Exemplo: GRANT SELECT ON EMPR TO PUBLIC

REVOKE SELECT FROM EMPR FROM PUBLIC

GRANT

Privilégio

Sobre

Recurso

TO

AUTH-ID

REVOKE

Privilégio

Sobre

Recurso

FROM

AUTH-ID

Page 99: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 99

UTLITÁRIOS DO DB2

Divididos em 3 grandes grupos:

ONLINE

1. LOAD Carga de arquivo sequencial para uma tabela.

2. CHECK INDEX Checa a consistência entre o Índex e os Dados.

3. CHECK DATA Checa a integridade entre a Chave Primária e a

Chave estrangeira.

4. REORG Reorganiza um Tablespace, Partição de um

Tablespace ou Índex.

5. RUNSTATS Atualiza informações do catálogo sobre os

Tablespaces e Indexes.

6. STOSPACE Atualiza informações sobre a utilização em

Disco do Storage Group.

7. COPY Copia um Tablespace para um dataset Sequencial

8. MERGECOPY Utilizado para juntar um ImageCopy FULL

com outro Incremental.

9. RECOVER Recuperação de um Tablespace, Partição ou

Recuperação de Índex.

10. QUIESCE Estabelece um ponto de sincronismo de uma lista

de tablespaces.

11. MODIFY Manutenção no catálogo DB2.

12. REPORT Listas informações de Recovery para

Tablespaces.

13. REPAIR Função de reparo físico em Disco.

OFFLINE

1. CHANGE LOG INVENTORY Atualiza log datasets no BSDS.

2. PRINT LOG MAP Listas dados de Log BSDS.

Page 100: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 100

3. UTLITÁRIOS DO DB2(Continuação)

SERVICE AIDS

1. DSN1COPY Trata user data por data set

2. DSN1PRNT Listas e formatas data set pages

3. DSN1COMP Estimativas de espaços a ser arquivados(DB2)

4. DSN1LOGP Lê o conteúdo da Log e formata para display.

5. DSN1CHKR Verifica a Integridade dos diretórios e

catálogo.

6. DSNTIAUL Unload de tabelas para uma arquivo sequencial.

7. DSNTEP2 Para emissão de SQL dinâmico.

8. DSNTIAD Para emissão de SQL dinâmico exceto SELECT.

SYSIBM.SYSUTILX

Uma Tabela de Diretório DB2.

JOB UTILITY CHECKPOINT

UTILID NOME NOME INFORMAÇÃO....

Coluna é inserida no Início do Utility.

Coluna é atualizada em Pontos de Checkpoints e Parada de Utility.

Coluna eliminada quando do termino do Utility.

Identificador

Único

Page 101: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 101

LOAD

Faz carga de arquivo sequencial para um Tablespace

Pode se carregar múltiplas tabelas em um mesmo Tablespace

Conversão de dados serão feitas.

Construir Índices definidos

Índice único não permite chaves duplicadas

Checagem Integridade

Cada chave estrangeira deve conter uma chave primária

correspondente.

Pode ser inibida esta checagem.

Notas:

Os dados podem ser carregado de 2 maneiras:

1. Através do INSERT (SQL).

2. Através do Utilitário LOAD.

Só não serão carregadas as tabelas:

Se a conversão dos dados forem diferentes do formato do

Tablespace

Se os Índices únicos detectar violações.

Caso haja relacionamento não existir a chave primária.

Page 102: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 102

LOAD

Definição da Tabela:

CREATE TABLE PROD.EMPRESA

(NOME_EMPRESA CHAR(6) NOT NULL,

PRIMEIRO_NOME VARCHA(12) NOT NULL,

INTERM_NOME CHAR(1) NOT NULL,

ULTIMO_NOME VARCHAR(15) NOT NULL,

FONE CHAR(4) ,

SALARIO DECIMAL(8,2) ,

DEPTO CHAR(3) ,

PRIMARY KEY(NOME_EMPRESA),

FOREIGN KEY(DEPTO)

REFERNCES DEPT

ON DELETE SET NULL)

IN TESTEDB1.TESTTSP1;

Exemplo do Registo para o LOAD: ....+.....1....+....2....+....3....+....4....+....5....+....6....+....7

000010 KARINA L BEZERRA A00 3978 650101 66 18 F 330814 52750

LOAD – JCL

//LOADTEST EXEC DSNUPROC,....

//DSNUPROC.SYSREC DD DSN=ARQUIVO.ENTRADA ,DISP=SHR

//DSNUPROC.SYSUT1 DD DSN=ARQUIVO.SYSUT1,DISP=( MOD,DELETE,CATLG),...

//DSNUPROC.SORTOUT DD

DSN=ARQUIVO.SORTOUT,DISP=(MOD,DELETE,CATLG),...

//DSNUPROC.SYSERR DD DSN=ARQUIVO.SYSERR,DISP=(MOD,DELETE,CATLG),...

//DSNUPROC.SYSMAP DD DSN=ARQIVO.SYSMAP,DISP=(MOD,DELETE,CATLG),...

//DSNUPROC.SYSIN DD * LOAD DATA INTO TABLE PROD.EMPRESA WHEN (32:34) = ‘A00’

(NOME_EMPRESA POSITION (1:6),

PRIMEIRO_NOME POSITION(8:16) CHAR,

INTERM_NOME POSITION(19),

ULTIMO_NOME POSITION(21:30) CHAR,

DEPTO POSITION(32:34),

FONE POSITION(36:39) NULLIF PHONE = ‘ ‘,

SALARIO POSITION(65:69) DECIMAL EXTERNAL)

Page 103: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 103

LOAD

Load Logging

O default é LOG YES, a vantagem de não ser necessário fazer ImageCopy

após a carga. Mas deve ser usar com critérios:

Carregar uma tabela em um Tablespace compartilhado

Carga e em tabelas pequenas

Carga com RESUME YES

Quando o volume de carga é grande, deve ser usar LOG NO, pois isto

evita uma trabalho do DB2 para registrar cada registro na LOG, e

consequentemente a LOG poderá ficar mais tempo em DISCO para um

possível RECOVERY.

LOG YES

Cada página será registrada na LOG.

LOG NO

Carga mais rápida

Requer ImageCopy

Modificação por SQL não permitida enquanto não fizer o

ImageCopy

- SQL error code –904

LOAD RESUME NO

REPLACE

LOAD RESUME YES

LOAD RESUME NO

(Cond. Code = 8)

TABLESPACE

Page 104: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 104

LOAD

LOAD RESUME NO

Usada somente quando a tabela estiver vazia, caso haja algum

registro na tabela ocorrerá abend com Return-Code 8.

LOAD RESUME YES

Opção para adicionar novas ocorrências na tabela.

LOAD RESUME NO REPLACE

Opção para carregar novas ocorrências na tabela eliminando todas

as ocorrências existentes dentro da tabelas.

A Variação do LOAD permite trabalhar a nível de Partição.

LOAD INTO TABLE tabelax PART x RESUME NO

Carrega ocorrências em uma partição vazia

LOAD INTO TABLE tabelax PART x RESUME YES

Adiciona novas ocorrências à partição.

LOAD INTO TABLE tabelax PART x RESUME YES REPLACE

Carrega ocorrências em uma única partição, eliminando as

ocorrências existente na partição.

Violação de Índice Único

Quando do LOAD, se inserido duas ou mais ocorrências com a mesma

chave o DB2 descartas todas as ocorrências deste LOAD.

CHAVE ENTRADA CARGA NA TABELA DESCARTES

A A

B B

C C

D D

B B

Page 105: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 105

LOAD

Integridade Referencial

ENFORCES CONSTRAINTS é o default.

Verifica se existe uma chave primária para a chave estrangeira.

Pode se inibido com ENFORCE NO

Se encontrado Violação, a ocorrência é eliminada.

FASES DO LOAD

Dados de Entrada

(SYSREC)

RELOAD

Saída

Tabela

Sysut1

Syserr

Sysmap

Sysut1 SORT

Sortout

Sortout

Sysut1

BUILD Sysut1

Syserr

Indexes

Sysut1

Syserr

IDEXVAL Saída

Tabelas

Page 106: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 106

FASES DO LOAD

Dados entrada

(SYSREC)

Sortout ENFORCES Saída

Tabelas

Sysut1

Parent

Tables

Sysut1

Sortout

Syserr

Sortout

Syserr DISCARD

Sysdisc

Sysmap

Sortout

Syserr

REPORT Relatório

Sumário

Page 107: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 107

FASES DO LOAD

RELOAD

Esta fase faz a carga do sequencial para a Tabela, Armazena as

chaves dos índices e chave estrangeira não indexados (Se ENFORCE

CONSTRAINTS) na SYSUT1.

O DD SYSDISC conterá as ocorrências descartadas

Caso ocorra algum este requer:

SYSERR - Qualquer erro será armazenado.

Se SYSERR não informado, o RELOAD abend antes de

qualquer carga de dados.

Se descartes não requerido. Reload termina no primeiro error.

Se SYSMAP é necessário (Violação de chave Única ou Violação RI),

informações da posição da ocorrência no SYSREC.

SORT

Sorteia o registros da SYSUT1 pelo Chave do índices, e Chaves

estrangeiras seguem a chave indexadas.

O SORT pode ser inibido em uma das condições:

Não existe mais que um chave por tabela

O dados carregados já estão em sequência.

Todas as chaves devem ser do mesmo tipo.

BUILD

Constrói os Índice do SORTOUT e adiciona informações de erros

na SYSERR, e informações na SYSUT1 caso não ocorra erros.

INDEXVAL

Das informações recolhidas dos SYSERR/SYSUT1 são removidas as

ocorrências da tabelas.

Page 108: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 108

FASES DO LOAD

ENFORCE

De acordo com o SORTOUT, e o relacionamento definido para a

tabela, esta fase faz a checagem para a violação da RI. A Checagem

envolves a tabela mãe onde se verifica a chave estrangeira carregada.

Todas as ocorrências sem um ”PAI” serão removidos da tabela, e

incluída na SYSDISC.

REPORT

Listas um relatório de sumário contendo os erros.

Recomendações:

Pré processamento para remover os erros.

Sorteia os dados de entradas na sequência da clusterização.

Criar todos os índices antes de carregar os dados.

Use LOG NO para evitar excessivo I/O na LOG

Carregar primeiros as PARENT TABLES (Tabelas mães).

Preferir sempre ENFORCE CONSTRAINTS.

Usar BLKSIZE otimizado para SYSUT1, SORTOUT e SORTWWKxx

Page 109: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 109

CHECK DATA

Checa todas as chaves estrangeiras de uma lista de tablespaces com os

valores de chaves primárias correspondentes.

Checa todas as ocorrências dependentes, ou somente as adicionadas pelo

LOAD.

Opcionalmente copia ocorrências ‘Órfã’ para uma tabela de exceção, e

elimina a ocorrência da tabela ou não.

Tirar do Status de CHECK PENDING

Nenhuma violação foi detectado, ou

Erros são eliminados com a opção DELETE YES.

//DSNUPROC. SYSIN DD *

CHECK DATA

TABLESPACE PRD.EMPRESA

TABLESPACE PRD.DEPTO

SCOPE

PENDING ou ALL

FOR EXCEPTION

IN PRD.EMPRESA USE prd.EmpresaX

IN PRD.DEPTO USE prd.DeptoX

DELETE

YES ou NÃO

EXCEPTIN n

Se SCOPE ALL checa todas as chaves estrangeiras de um tablespaces.

Se SCOPE PENDING checa apenas as chaves estrangeiras adicionada pelo

LOAD.

DELETE YES deleta todas as ocorrências “’ÓRFÔ de um Tablespace

EXCEPTIONS especifica os limite de exceção, quando excede este limite

o CHECK termina.

Page 110: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 110

FASES DO CHECK DATA

Repetida para Dependent Table (Tabela “FILHA”)

Dependent table SYSUT1

SYSUT1 SORTOUT

Sortout/Índice chave estrangeira

SYSERR

Índice chave Primária

Dependent/Descendent Tables Tabela Exceção

SYSERR Relatório de Sumário

SCANTAB

SORT

SCANTAB

REPORTCK

Page 111: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 111

FASES DO CHECK DATA

1. SCANTAB

Esta fase extrai as chaves estrangeiras necessárias e grava no

SYSUT1

2. SORT

Sorteia a entradas contidas no SYSUT1 pelo nome da constraints e o

valor da chave estrangeira.

3. CHECKDAT

Esta fase produz um erro para cada chave estrangeira não encontrada.

4. REPORTCK

Se DELETE YES especificado, este fase deleta as ocorrências, e copia

para a tabela de Exceção. Produz também um Relatório de sumarização

para cada tabela.

5. UTILTERM

Esta fase termina o processo.

Page 112: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 112

CHECK INDEX

O CHECK INDEX testa a consistência entre o dados e o Índices. O

Check procura a inconsistência e emite uma mensagem de erro,

descrevendo qual o problema.

Exemplos de SYSIN:

//DSNUPROC.SYSIN DD *

CHECK INDEX NAME(prd.indice1, prd.index2)

CHECK INDEX(prd.indice1 PART 3)

CHECK INDEX(ALL) TABLESPACE PRD.EMPRESA

FASES DO CHECK INDEX

UNLOAD

SORT

CHECKINDEX

Índices Sysut1

Sysut1 Sysut1

Sysut1

Tabelas

Relatório

Sumário

Page 113: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 113

REORG

A fase de UNLOAD dos registros de uma tabela.

Descarrega as ocorrências na sequência do Índice de clusterização

Fase de RELOAD

carrega os dados de volta a tabela, respeitando os FREE PAGE,

PCTFREE, etc.

FASE de SORT

Sorteia as chaves dos índices contidas no SYSUT1, gravando no

SORTOUT.

Fase de BUILD

Reconstroí os Índices com a saída do SORT.

FASES DO REORG

Saída dos Dados

(SYSREC)

Entrada dos Dados

(SYSREC)

UNLOAD Table

space

RELOAD

Table

space

Sysut1

Sysut1 Sortout

Sortout Indexes

SORT

BUILD

Page 114: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 114

REORG

UNLOAD CONTINUE

RESTART

UNLOAD PAUSE

STOP

Edit/Field Field/Edit

UNLOAD ONLY TERMINATE LOAD REPLACE

Edit/Field Validation/Field/Edit

Existem 3 opção de UNLOAD para o utilitário REORG.

1. Unload Continue

Todas as fases serão concluídas em uma execução

2. Unload Pause

O Utilitário é parado após o Unload do Tablespace ou Índices.

O Utilitário deve ser reestartdo para completar

O Edit and Field são invocados duranto o Unload e Reload Fases.

3. Unload Only

Após a fase de Unload é terminado o Utilid

A saída pode ser usada como entrada do utilitário LOAD.

Page 115: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 115

REORG

Exemplos de SYSIN:

//DSNUPROC.SYSIND DD *

REORG TABLESPACE PRD.EMPRESA UNLOAD CONTINUE LOG NO

REORG TABLESPACE PRD.EMPRESA UNLOAD PAUSE LOG NO

REORG TABLESPACE PRD.EMPRESA UNLOAD ONLY

REORG TABLESPACE PRD.EMPRESA PART 3

REORG INDEX PRD.ÍNDICE1

Page 116: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 116

COPY

Cria um Backup do Tablespace

COPY TABLESPACE CURXDB01.CURXTS01

FULL YES SHRLEVEL REFERENCE

Permite Atualização

Leitura compartilhada

Se não quiser compartilhar acesso a base, emita o comando no DB2:

-START DB(CURXDB01) SPACE(CURXTS01) ACCESS(UT)

Assim somente utilitários podem agir sobre os Objetos.

Controle de Cópia Incremental

Altera Indicadores de Páginas

Altera bit no HEADER

O Copy Full e Incremental desliga o bit.

Fazer sempre Image Copy FULL após REORG LOG NO ou LOAD LOG

NO.

Se mais que 15% das páginas foram alteradas, opte por COPY FULL.

Especifique DISP=(MOD,CATLG) para permitir restart do utilitário.

SPACE

MAP

PAGE

DATA

PAGE

Page 117: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 117

MERGECOPY

Image Copys Incremental Merge Image Copy

Incremental

SYSIN:

MERGECOPY TABLESPACE PRD.EMPRESA NEWCOPY NO

Incremental

Full Full Image Copy

SYSIN:

MERGECOPY TABLESPACE PRD.EMPRESA NEWCOPY YES

NEWCOPY YES insere um apontamentos no catalogo DB2 como FULL

Image Copy.

NEWCOPY NO atualiza os registros com Image Copy Incremental.

MERGECOPY

MERGECOPY

Page 118: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 118

RECOVERY

TABLESPACE

RECOVER TABLESPACE CURXDB01.EMPRESA

TABLESPACE CURXDB01.DEPTO

DATASET

RECOVER TABLESPACE CURXDB01.EMPRESA DSNUM 3

TABLESPACE CURXDB01.DEPTO DSNUM 2

Funções do Utilitário RECOVER

1. Inicialização

2. Alocação Dinâmica se não existir apontamento no statements DD

3. Define os datasets do Tablespaces.

4. Image Copy Merge e Restaura

5. Aplica a log.

Índices e Tablespace DB2 podem ser copiados por este utilitário não DB2.

DB2 RECOVER aceita somente as seguintes entradas:

Image Copy + Log

Image Copy somente

Logs DB2 somente

Page 119: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 119

RECOVERY

PONTOS DE RECOVERY

Permite restaurar ate:

Um especifico Full ou Incremental Image Copy

RECOVER .... TOCOPY I.D15.CUR.DBP0TS01.G0001V00

Um especifico LOG RBA.

RECOVER .... TORBA X’005E00123456’

22:00 IMAGECOPY

EMPRESA FULL YES

22:20

08:45

09:00

RUN PROGRAM

XYZ

Descobre que programa

Atualizou dados errados

Restaurar a partir do Último

Image Copy

Page 120: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 120

QUIESCE

Verifica restrições para os tablespaces especificados e cria um ponto de

consistência para eles. Para cada tabespace, o Quiesce cria uma entrada

na SYSCOPY com RBA válido para a recuperação.

QUIESCE TABLESPACE CURXDB01.CURXTS01

TABLESPACE CURXDB01.CURXTS02

REPORT

Listas dados sobre Tablespaces. O relatório pode Ter 2 tipos de saídas:

TABLESPACESET – Tablespace e tabelas que participam de

Relacionamento de Integridade Relacional (RI).

RECOVERY - Informações de recuperação a partir do catálogo,

diretório e BSDS.

REPORT TABLESPACESET TABLESPACE CURXDB01.CURXTS01

REPORT RECOVERY TABLESPACE CURXDB01.CURXTS01.

Page 121: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 121

INDEX RECOVERY

Fase UNLOAD Fase SORT Fase BUILD

Index1

Arquivo de Trabalho

Index2

Exemplos de SYSIN:

RECOVER INDEX(PRD.INDICE1, PRD.INDICE2)

RECOVER INDEX (ALL) TABLESPACE PRDXDB01.EMPRESA

RECOVER INDEX(PRD.INDICE1 PART 2)

UNLOAD

Tablespace

Sysut1

SORT

Sysut1

BUILD

Page 122: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 122

RECOVERY PENDING

Tablespace ou Index deve ser recuperado

1. RECP significa que a partição de um Index ou Tablespace esta

pendente

2. PSRCP significa que a entrada de um Index não particionado esta

com RECOVERY Pendente.

Acesso proibido exceto para:

1. RECOVER

2. LOAD REPLACE

3. REPAIR

4. MERGE COPY

-DISPLAY DB revela os status RECP/PSRCP

RECP/PSRCP é resetado por:

1. RECOVER tablespace ou Index

2. LOAD REPLACE

3. REPAIR com SET NORCVRPEND

4. START DB .... ACCESS(FORCE)

RECOVERY PENDING segue as seguintes condições:

Condição UTILITÁRIO FASE OBJETOS colocado em RECP

Term Util Recover TS -------- TABLESPACE

Term Util Recover Index BUILD Índice ainda não construídos

Term Util

Reorg/Load

RELOAD

SORT

BUILD

Tablespace, Partições e Índices

Todos os Índices

Índice ainda não construídos

Point in Time

TS Recovery

Recover

Tablespace

-------- Todos os Índices

Page 123: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 123

MODIFY

Elimina Image Copy desnecessários e log ranges do catálogo DB2, As

entradas são da SYSCOPY e SYSLGRNG.

Possível acesso concorrente durante o MODIFY com exceção do

SYSCOPY e SYLGRNG.

Exemplo:

MODIFY RECOVERY TABLESPACE(CURXDB01.CURXTS01)

DELETE DATE(19981101).

MODIFY RECOVERY TABLESPACE(CURXDB01.CURXTS01)

DELETE AGE(90)

DELETE DATE é eliminados as ocorrências da data informada para trás

DELETE AGE todos ocorrências com a quantidades de dias maior que a

informadas serão eliminadas.

DIAGNOSE

Ajuda no diagnóstico de problemas de utilitários.

Normalmente sua utilização é a pedido do SUPORTE IBM

STOSPACE

Colhe informação de espaço alocado para cada Storage Groups,

Tablespaces e índices relacionados. A informação é registrada no

catálogo DB2.

Page 124: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 124

RUNSTATS

Varre um Tablespace ou índice para atualização no catálogo de

utilização de espaço e eficiência do índices. Esses dados são

utilizados pelo otimizador do DB2.

O Runstats atualizadas as tabelas:

Estatística usada pelo OTIMIZADOR

1. SYSTABLES

2. SYSTABLESPACE

3. SYSINDEXES

4. SYSCOLUMNS

5. SYSCOLDIST

Outras para informações do DBA

1. SYSTABLEPART

2. SYSINDEXPART

3. SYSCOLDISTSTAS

4. SYSCOLSTATS

5. SYSINDEXSTATS

6. SYSTABSTATS

REPAIR

Repara dado do usuário, índices, catálogo, Space Map, etc.

REPAIR deve ser usado com extrema cautela.

Page 125: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 125

DSNTIAUL

Permite gerar um arquivo sequencial dos dados da tabelas, e um outro com

as informações de onde inicia e termina os registros, alem das

informações necessária para o LOAD.

Exemplo do JCL:

//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20

//SYSUDUMP DD SYSOUT=*

//SYSTSPRT DD SYSOUT=*

//SYSPRINT DD SYSOUT=*

//SYSPUNCH DD DSN=P915537.FONTES.CAPXTS14,UNIT=SYSDA,

// DISP=(,CATLG,DELETE),SPACE=(TRK,(50,10),RLSE)

//SYSREC00 DD DSN=P915537.DADOS.CAPXTS14,UNIT=SYSDA,

// DISP=(,CATLG,DELETE),SPACE=(CYL,(80,05),RLSE)

//SYSTSIN DD *

DSN SYSTEM(DBP0)

RUN PROGRAM(DSNTIAUL) PLAN(DSNTIB41) PARMS('SQL') -

LIB('DB2P1.V4R1M0.RUNLIB.LOAD')

//SYSIN DD *

SELECT * FROM SICAP.CAPXTB14ENTRADA

;

/*

Page 126: DB2 - Conceitos e Utilizações

DB2 - CONCEITOS E UTILIZAÇÃO 19/11/98

#59585 126

COMANDOS DB2

Principais comandos DB2

-DIS DB(ABE*) SPACE(*) LIMIT(*)

Verifica os status de todos os Tablespace e Indexspace do

DATABASE que comece com ABE.

-DIS DB(*) SPACE(*) LIMIT(*) RESTRICT

Verifica todos os Tablespaces e Indexspace com alguma Restrição

-START DB2 / -STOP DB2

Inicializa e encerra o DB2 (Comandos na console OS/390)

-DIS UTIL(*)

Mostra todos os UTILID com seus respectivos STATUS

-TERM UTIL(IMAGCCP)

Termina o UTILID IMAGCCP

-START DB(ABEXDB01) SPACE(*) ACCESS(RW)

Libera todos Indexspace e Tablespaces para acesso de READ/WRITE

-START DB(ABEXDB01) SPACE(ABEXTS12,ABEXPX12) ACCESS(UT)

Starta os Tablespace ABEXTS12 e o Indexspace ABEXPX12 somente

para acesso de utilitários DB2.

-DIS DB(ABEXDB01) SPACE(*) LIMIT(*) LOCKS

Mostra todos os Tablespaces e Indexspaces do Database ABEXDB01 e

as respectivas alocação.

-DIS THREAD(*)

Mostra todas as threads conectado ao DB2.