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:
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:
- Criar um novo bufferpool de 8K
- Criar um novo tablespace usando este bufferpool
- 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.
- DBA 101: administrando estruturas de dados do DB2: http://www.ibm.com/developerworks/br/local/data/dba_101_administrando_estruturas_dados_db2/index.html
- Um tablespace para cada tabela do DB2: https://imasters.com.br/banco-de-dados/db2/um-tablespace-para-cada-tabela-do-db2/
- DB2 Essential Training I: http://bigdatauniversity.com/courses/course/view.php?id=121
- DB2 Essential Training II: http://bigdatauniversity.com/courses/course/view.php?id=243
- DB2 Academic Training – 302A Exam preparation: http://bigdatauniversity.com/courses/course/view.php?id=272
Assim terminamos esta primeira aula de administração do DB2.