Data

9 set, 2013

Administração do DB2 em ambiente UNIX – Parte 01

Publicidade

Começa aqui uma série de artigos sobre conceitos de administração do DB2 em ambiente UNIX, conhecido oficialmente como DB2 LUW. Este material se baseia numa série de workshops que eu preparei em 2012 para treinamento de jovens profissionais e estudantes interessados em aprender a executar tarefas básicas de um DBA DB2.

Estes workshops serão apresentados em 10 artigos, conforme o seguinte roteiro:

Capítulo I. Armazenamento e Prevenção de Perda de Dados

  • AULA 1. Estrutura de Dados
  • AULA 2. Criando bancos de dados e instâncias
  • AULA 3. Backups
  • AULA 4. Restauração

Capítulo II. Segurança de Dados

  • AULA 5. Segurança no DB2 – Visão Geral
  • AULA 6. Criando IDs no LINUX & AIX
  • AULA 7. Concedendo e revogando privilégios
  • AULA 8. Autoridades

Capítulo III. Inspecionando a Ocorrência de Erros

  • AULA 9. O arquivo DB2DIAG.LOG
  • AULA 10. Pesquisando eventos registrados

Recomendo ao leitor interessado em acompanhar o curso que acesse o portal do DB2 para abaixar uma cópia do DB2 Express-C, edição gratuita do produto, ou então para obter instruções de como acessar e configurar uma instalação do DB2 rodando na nuvem. Para mais detalhes, clique aqui.

 AULA 1. Estrutura de Dados do DB2

Sistemas Gerenciadores de Bancos de Dados (SGBD) são ferramentas que exigem muito processamento e acesso a disco. Por isso é fundamental conhecer o sistema operacional onde roda seu SGBD e conhecer também a forma como o SGBD interage com este sistema operacional.

No caso do DB2 LUW, a estrutura de dados é subdividida dois grandes grupos, que são o grupo do componentes lógicos e o de componentes físicos. Existem muitas referências bibliográficas sobre este assunto (algumas sugeridas no final do artigo como leitura adicional), mas podemos entender esta estrutura considerando o seguinte resumo:

Componentes lógicos
Tabela Modelo estruturado (sequência fixa de campos) e tipificado
Esquema Organiza objetos do banco por proprietário ou assunto
Tablespace Camada intermediária que vincula objetos físicos e lógicos
Componentes físicos
Bufferpool Aloca memória para o Tablespace. É criado definindo-se a quantidade de páginas a serem mantidas em memória e o tamanho de tais páginas (aceita blocos de 4,8,16 ou 32kb)
Container Aloca espaço em disco para armazenamento
Extent Organiza grupos de N páginas num espaço contínuo
Página de Dados Armazena registros (e não permite a “quebra” de um registro em mais de uma página)

Fica mais fácil entender a estrutura visualizando o modo como os componentes são organizados. Veja na imagem a seguir cada um dos componentes lógicos e físicos mencionados anteriormente:

criveline

Na prática, a estrutura de dados define onde e como os dados serão gravados.

A instalação padrão do DB2 já induz o DBA a entender e respeitar esta estrutura, pois a cada banco de dados criado, automaticamente são gerados os seguintes objetos:

  • Tablespace SYSCATSPACE: usado pelas tabelas do catálogo do DB2
  • Tablespace TEMPSPACE1: usado para realização de ações temporárias do DB2
  • Tablespace USERSPACE1: é o tablespace default para gravação de tabelas de usuários. Quando um comando CREATE TABLE não especificar um tablespace, a tabela será criada no tablespace default. É recomendável que sejam criados outros tablespaces de usuários, conforme a necessidade de cada BD
  • Bufferpool IBMDEFAULTBP: usado nos tablespaces padrão. Este bufferpool usa blocos de 4K e é altamente recomendável que sejam criados outros bufferpools, conforme a necessidade de cada BD

Observe que até aqui não falamos de containers. Isso acontece porque cada tipo de tablespace usa um modo diferente de interação com seus containers. O DB2 suporta três tipos de tablespaces:

  • Gerenciados pelo sistema operacional (System Managed Space ou SMS);
  • Gerenciados pelo banco de dados (Database Managed Space ou DMS);
  • Armazenamento automático (Automatic Storage – que é o tipo default para novos tablespaces).

Vejamos agora alguns exemplos de uso dos conceitos mencionados aqui.

Exemplo 1: Criar uma tabela TBLDESCRICAO na base SAMPLE com 2 campos:

ID (inteiro) e DESCRICAO (5000 caracteres)

Análise do problema:

Cada registro da tabela terá aproximadamente 5008 bytes. Neste caso, os registros não caberão em páginas de 4Kbytes, mas o único bufferpool existente (IBMDEFAULTBP) tem 4 Kbytes.

Solução:

Será necessário executar três operações, apresentadas a seguir:

  1. Criar um novo bufferpool de 8K
  2. Criar um novo tablespace usando este bufferpool
  3. Criar a nova tabela

Os comandos a seguir implementam estas ações.

db2 create bufferpool BP8K size 2000 pagesize 8K
db2 create tablespace TS8K pagesize 8K extentsize 64 prefetchsize 32 bufferpool BP8K
db2 'create table TAB1 (ID int, DESCRICAO varchar(5000)) in "TS8K"'

Exemplo 2: Na base SAMPLE, identificar os tablespaces, bufferpools e containers existentes.

Análise do problema:

Usar comandos apropriados do DB2

Solução:

Aqui temos duas alternativas. Uma solução é  fazermos um processo interativo listando todos os tablespaces e seus detalhes e repetindo a listagem dos containers de cada tablespace:

db2 list tablespaces show detail

Tablespace ID                    = 2

Name                                    = USERSPACE1

Type                                      = Database managed space

Contents                             = All permanent data. Large table space.

State                                     = 0x0000  Detailed explanation:    Normal

Total pages                                         = 8192

Useable pages                                  = 8160

Used pages                                        = 96

Free pages                                         = 8064

High water mark (pages)              = 96

Page size (bytes)                              = 4096

Extent size (pages)                          = 32

Prefetch size (pages)                      = 32

Number of containers                     = 1

 Tablespace Containers for Tablespace 2

 Container ID                         = 0

 Name                                 = /db2fs/db2inst1/NODE0000/MEUBD/T0000002/C0000000.LRG

 Type                                 = File

 Total pages                          = 8192

 Useable pages                        = 8160

 Accessible                           = Yes

db2 list tablespace containers for 2 show detail

A segunda abordagem é fazermos uma consulta nas tabelas de catálogo do DB2 listando as informações desejadas:

TBSPACE           BPNAME              BUFFERPOOLID                NPAGES      PAGESIZE  

———————————————————————————————————————————-

SYSCATSPACE                 IBMDEFAULTBP                1                             -2                4096

SYSTOOLSPACE               IBMDEFAULTBP                1                              -2               4096

TEMPSPACE1                    IBMDEFAULTBP                1                              -2               4096

USERSPACE1                    IBMDEFAULTBP                1                             -2                4096

db2 select T.TBSPACE, B.BPNAME,  B.BUFFERPOOLID,  B.NPAGES, B.PAGESIZE from SYSCAT.BUFFERPOOLS B left join SYSCAT.TABLESPACES T on T. BUFFERPOOLID = B. BUFFERPOOLID WHERE B.BUFFERPOOLID = 1 ORDER BY 1

O leitor interessado encontrará informações mais detalhadas nas seguintes referências.

 

Assim terminamos esta primeira aula de administração do DB2.