Pedro F. Carvalho Analista de Sistemas [email protected] Gerente de Projetos São José do Rio Preto - SP O que é Tabela Particionada? As tabelas particionadas, ou melhor dizendo, particionamento de dados, é um método que a Oracle implantou desde sua versão 8, onde divide fisicamente as tabelas grandes em diversos segmentos menores de dados, tornando o acesso aos dados mais rápido e seu gerenciamento mais fácil. Uma tabela particionada pode ter N partições, essas partições funcionam como tabelas normais (NÃO PARTICIONADAS), sendo que cada partição pode ter sua própria configuração de storage, tablespace e índice, a única diferença que podemos considerar entre uma tabela normal e uma tabela particionada, é que a tabela particionada será sempre dependente estruturalmente da tabela básica (Lembrar do conceito de herança de OO, Pai e Filho), ou tabela que originou as partições, e a tabela normal funciona de forma independente de qualquer outra tabela. Para fixar a explicação, abaixo tem dois tipos de tabelas, a tabela A que é particionada e a tabela B que é uma tabela normal. TABELA A SQL > CREATE TABLE PEDRO1 2( 3 col1 number(5) not null, 4 col2 varchar2(50) not null, 5 col3 date not null 6) 7 tablespace TBS_PEDRO_1 8 partition by range (col3) 9 (partition SEMESTRE1 values less than (to_date("01-JUL-2006","DD-MON-YYYY")) tablespace TBS_PEDRO_1, 10 partition SEMESTRE2 values less than (to_date("01-JAN-2007","DD-MON-YYYY")) tablespace TBS_PEDRO_2); TABELA B SQL > CREATE TABLE PEDRO2 2( 3 col1 number(5) not null, 4 col2 varchar2(50) not null, 5 col3 date not null) tablespace TBS_PEDRO_1; Perceba a diferença estrutural entre as tabelas A (PEDRO1) e B (PEDRO2), na tabela A utilizei um particionamento chamado RANGE (ou intervalo), onde criamos duas partições, a partição SEMESTRE1, que irá armazenar todos os registros da tabela PEDRO1 até a data 31-MAY-2006, equivalente a 1º semestre do ano, e a partição SEMESTRE2 que irá armazenar todos os registros até 31-DEC-2006, equivalente ao 2º semestre do ano. Pedro F. Carvalho Analista de Sistemas [email protected] Gerente de Projetos São José do Rio Preto - SP As partições SEMESTRE1 e SEMESTRE2 estão armazenando os dados de forma independente fisicamente, podendo estar em tablespaces diferentes, como se fosse a tabela B (PEDRO2). Acesso aos dados Umas das diferenças que notamos quando trabalhamos com tabelas particionadas, e a forma de acessarmos os dados. A estrutura lógica do Oracle, pode enxergar diferentes formas de acesso, como mostra abaixo: SQL > SELECT * FROM PEDRO1 PARTITION (SEMESTRE1); ou SQL > SELECT * FROM PEDRO1 WHERE COL3 < to_date("31-MAY-2006","DD-MONYYYY"); O acesso lógico dos dados pode ser feita para cada partição, assim podemos ter mais performance e uma facilidade maior na administração dos dados, o acesso a tabela B, pode ser feita normalmente, como um SELECT normal. SQL > SELECT * FROM PEDRO2; Para matar um pouco a curiosidade, caso queira fazer os testes em casa, habilite o plano de execução (SQL*PLUS - set autotrace on) e veja as diferentes formas que o optimizador Oracle irá acessar os dados e tire as próprias conclusões. Agora podemos imaginar o que o mundo do particionamento pode nos oferecer, imaginamos que a tabela A (PEDRO1) tenha 10.000.000 de registros e a tabela B (PEDRO2) tenha a mesma quantidade, você consegue saber qual tabela apresentará o resultado mais rápido caso eu faça o SELECT abaixo: SQL > SELECT * FROM ... WHERE COL3 BETWEEN to_date("01-SEP-206","DD-MONYYYY") AND to_date("31-SEP-2006","DD-MON-YYYY"); Vamos lá! Lógicamente a TABELA A irá apresentar o resultado mais rápido, porque a cláusula do SELECT acima está limitando apenas os resultados em SETEMBRO, e SETEMBRO equivale a partição SEMESTRE2, então o optimizador Oracle, irá realizar um FULL SCAN PARTITION apenas na partição SEMESTRE2, e caso a tabela tenha 5.000.000 na partição SEMESTRE1 e outros 5.000.000 na partição SEMESTRE2, a consulta será pelo menos a metade do tempo da tabela B, pois na tabela B, o optimizador será obrigado a fazer um FULL SCAN TABLE nos 10.000.000 para obter o resultado. Isso o que podemos chamar de facilidade de consulta e adminsitração, pois nesse mundo maravilhoso do particionamento, caso queira fazer um EXPORT dos dados para outro banco de dados, podemos apenas exportar a tabela e a partição que precisamos, Pedro F. Carvalho Analista de Sistemas [email protected] Gerente de Projetos São José do Rio Preto - SP e na tabela B, teriamos que fazer um EXPORT utilizando a cláusula WHERE para conseguir o mesmo resultado.