Olá a todos!
Hoje vou falar sobre particionamento de tabelas e
índices no banco de dados Oracle, mas precisamente sobre uma situação que passei
recentemente no trabalho.
Para entender a situação que passei, é necessário
um conhecimento básico sobre particionamento de tabelas e índices no banco de
dados Oracle. Particionamento é alvo de muitos artigos e documentos oficiais da
Oracle, portanto não quero entrar nesse mérito, mas recomendo a leitura de
Borovina e Legatti que explicam de forma clara e objetiva as definições e
conceitos envolvidos. Também tem uma vasta documentação da Oracle disponível em
vários artigos, um deles fala sobre: Particionamento no Banco de Dados Oracle
11g. Os links para esses artigos são citados nas referências desse post.
Agora vou apresentar de fato a situação que vivi:
Em uma instância Oracle 10g (na versão 10.2.0.3)
tenho uma tabela particionada por lista.
A estrutura da tabela é mais ou menos a seguinte:
CREATE TABLE TBL_TABELA
(
COD NUMBER(9) NOT NULL,
CADASTRO NUMBER(9) NOT NULL,
MES NUMBER(2),
ANO NUMBER(4)
)
TABLESPACE TBS_DEFAULT
PARTITION BY LIST (ANO)
(
PARTITION P_2008 VALUES (2008) TABLESPACE TBS_P_2008,
PARTITION P_2009 VALUES (2009) TABLESPACE TBS_P_2009,
PARTITION P_2010 VALUES (2010) TABLESPACE TBS_P_2010,
PARTITION P_2011 VALUES (2011) TABLESPACE TBS_P_2011,
PARTITION P_DEFAULT VALUES (DEFAULT) TABLESPACE TBS_DEFAULT
);
Meu problema é que os dados dos anos diferentes de
2008,2009,2010 e 2011 cairão, obviamente, na partição default.
O que tenho que fazer, é criar partições para os
anos de 2012 e 2013, porém a presença da partição DEFAULT me impede de fazer
isso.
É importante saber que a partição default está com
muitos dados (2012 e 2013) e não posso simplesmente dropar ela.
Essa era a minha situação problemática, que
inclusive tentei ajuda no fórum de Rodrigo Almeida.
No início dessa semana, pesquisando sobre o
assunto, achei uma técnica interessante para resolver o assunto.
Para inserir uma nova partição, com a presença de
uma partição default, inicialmente criei as tablespaces para os anos de 2012 e
2013, conforme exemplo abaixo:
CREATE TABLESPACE TBS_2012 DATAFILE
'/opt/oracle/oradata/workspace/tbs_2012.dbf' SIZE 2048M AUTOEXTEND OFF
NOLOGGING
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 100M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
Em seguida utilizei o comando SPLIT PARTITION para realizer a
divisão de uma partição, esse é o ponto crucial da solução do problema.
A sintaxe que utilizei foi mais ou
menos a seguinte (para o ano de 2012):
ALTER TABLE
TBL_TABELA
SPLIT PARTITION P_DEFAULT VALUES (2012)
INTO ( PARTITION P_2012 TABLESPACE TBS_2012,PARTITION P_DEFAULT);
O resultado após a execução desse
comando é uma partição P_2012 (que estará na tablespace TBS_2012) contendo os
dados da tabela do ano de 2012 e os dados dos outros anos ficarão na partição
P_DEFAULT (exceto para os anos que existem partições referentes), no meu caso
apenas os dados de 2013.
Depois fiz a mesma coisa para a
partição do ano de 2013, e pronto. Resolvida a situação!
Bom pessoal, por enquanto é isso.
Grande abraço e até a próxima!
Referências:
LEGATTI, EDUARDO - Oracle Blog - Um
pouco sobre índices particionados no Oracle. Disponível em:
http://eduardolegatti.blogspot.com.br/2011/12/um-pouco-sobre-indices-particionados-no.html.
Acessado em: 02/04/2013.
BOROVINA, JOÃO MARCELO -
Particionamento de Dados: Uma introdução aos conceitos e aplicação. Disponível
em:
http://www.devmedia.com.br/particionamento-de-dados-uma-introducao-aos-conceitos-e-aplicacao/7299.
Acessado em 02/04/2013.
ALMEIDA, RODRIGO - Fórum: Problema
com tabela particionada no Oracle 10g. Disponível em:
http://www.rodrigoalmeida.net/forum/viewtopic.php?f=3&t=891&sid=2642261a63b71d2453109f92000e0a96
Acessado em: 01/04/2013.
Oracle Corporation - Particionamento
no Banco de Dados Oracle 11g -Um artigo técnico da Oracle. Junho de 2007.
Disponível em:
http://www.oracle.com/technetwork/pt/database/enterprise-edition/documentation/particionamento-banco-de-dados-11g-432098-ptb.pdf.
Acessado em: 31/03/2013.
Oracle Corporation - Maintaining
Partitions. Disponível em:
http://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm.
Acessado em: 01/04/2013.
0 comentários:
Postar um comentário