Tabela Particionada - Método Range Partition

Rodrigo Almeida (e-mail) é formando em análise de banco de dados pelo IBTA, especialista em micro-eletrônica pelo AIME na França e atualmente trabalha como consultor de banco de dados da VIVO. Foi um dos fundadores da empresa Usina Brasil.

Olá! Dando continuidade à matéria anterior sobre tabelas particionadas, nessa coluna iremos comentar sobre a utilização do método Range Partition, que é um dos quatro métodos que o banco de dados Oracle nos disponibiliza para trabalhar.

Range Partition

O range partition, ou mais conhecido no Brasil como, Particionamento por intervalo, é o método mais utilizado em ambientes de Data Warehouse, pois sua principal função é dividir uma tabela em intervalos de tempo ou numéricos, O range partition foi um dos primeiros métodos de particionamento criado pela Oracle, junto com o Hash Partition, foi trazido ao mercado em sua versão Oracle 8, foi quando os Dbas começaram a conhecer o mundo do particionamento.

Como dito na coluna passada sobre a introdução das tabelas particionadas, o Range partition conseguiu ganhar espaço no mercado pelos seus pontos positivos, como:

- Facilidade na administração;
- Divisão de grandes volumes de dados seja por determinadas datas ou valores numéricos;
- Ganho em performance nas consultas e redução de E/S dos discos;
- Suporte a criação de índices LOCAL e GLOBAL;
- Controle sobre o fluxo de entrada de dados e crescimento da tabela;

Criar uma tabela particionada é muito fácil e não muda muita coisa para uma tabela convencional, segue um modelo de exemplo abaixo:

Estrutura SQL

CREATE TABLE RODRIGO.TAB_EXEMPLO
(col1 NUMBER(10) NOT NULL,
col2 VARCHAR2(100) NOT NULL,
col3 DATE
)
TABLESPACE TBS_RODRIGO
PARTITION BY RANGE (col3)
(PARTITION P_SEMESTRE1 VALUES LESS THAN (TO_DATE(’31-JUN-2006’,’DD-MM-YYYY’) TABLESPACE TBS_RODRIGO_01,
PARTITION P_SEMESTRE2 VALUES LESS THAN (TO_DATE(’31-DEC-2006’,’DD-MM-YYYY’)) TABLESPACE TBS_RODRIGO_02);

Percebeu que o código até a clausula PARTITION BY RANGE está normal, após isso, começa a inclusão de partições que irá constituir nossa tabela particionada, Devemos sempre saber qual o objetivo da tabela para não errarmos na criação da partição e seu lugar de armazenamento.

No exemplo acima, crie partições para determinar SEMESTRES em minha tabela delimitadas por uma determinada data. Veja:

...
PARTITION P_SEMESTRE1 VALUES LESS THAN (TO_DATE(’31-JUN-2006’,’DD-MM-YYYY’) TABLESPACE TBS_RODRIGO_01,

Estou criando uma partição chamada P_SEMESTRE1, onde serão inseridos dados inferiores ou até a data 31 de Junho de 2006, se eu tentar inserir dados de 2004 ou 2005, não irá ocasionar nenhum tipo de erro, pois essa partição está adepta a receber esses valores. E observe uma coisa muito importante, a opção TABLESPACE TBS_RODRIGO_01, onde o Oracle me permite armazenar esse segmento de dados em uma outra tablespace que não seja o meu padrão, para poder controlar o crescimento da tabela e partição.

Na segunda partição eu determinei o intervalo que a partição P_SEMESTRE2 deverá receber, serão incluídos dados até o dia 31 de Dezembro de 2006, caso tenha valores superiores a 2006, o Oracle irá exibir mensagem de erro pedindo a inclusão de novas partições com os intervalos de tempo a ser incluído.

Existe uma opção interessante para utilizarmos na partição acima, para quem já conhece o particionamento, já deve ter ouvido na função MAXVALUE, que tem a finalidade de incluir todos os novos valores que estejam superiores ao intervalo da partição anterior, desta forma, a partição não fica limitada a qualquer valor. Exemplo de utilização:

...
PARTITION P_SEMESTRE2 VALUES LESS THAN (MAXVALUE) TABLESPACE TBS_RODRIGO_02));

Lembrete

Se utilizarmos a função MAXVALUE na chave de particionamento, e a coluna aceitar valores nulos, todos os novos valores que tiver nulo será incluída na partição que estiver com a função MAXVALUE.

Quando usar

Podemos utilizar RANGE PARTITION em:

- Tabelas de histórico;
- Tabelas com “Ação” diária, exemplo, tabelas de vendas, entregas de produtos e etc;
- Tabelas organizadas por datas;

Conclusão

O particionamento por intervalo pode nos ajudar em muito no dia-a-dia, seja para efetuar backup ou maximizar nossas consultas em grandes volumes de dados. Iremos ver ainda como melhorar a performance em consultas em tabelas particionadas e seus atributos.

Na próxima coluna iremos falar sobre outro método, o HASH PARTITION.

Até Mais!