TABLE PARTITION BY LIST
Olá Pessoal,
Montei um exemplo simples de utilização de particionamento em tabelas por lista que pode ser muito bem aproveitado em segmentos com grande volume de dados.
— Crio tabela particionada para tipo1, tipo2 e outros:
CREATE TABLE tab_part_list (COD NUMBER, tipo NUMBER, NOME VARCHAR2(10))
PARTITION BY LIST (tipo)
(PARTITION tipo1 VALUES (1),
PARTITION tipo2 VALUES (2),
PARTITION outros VALUES (DEFAULT));
— Insiro registros 1, 2, 3 e 4:
INSERT INTO tab_part_list VALUES(1, 1, 'um');
INSERT INTO tab_part_list VALUES(2, 2, 'dois');
INSERT INTO tab_part_list VALUES(3, 3, 'tres');
INSERT INTO tab_part_list VALUES(4, 4, 'quatro');
COMMIT;
— Retorno apenas registros da partição tipo2 e outros:
SELECT * FROM tab_part_list PARTITION (outros)
UNION ALL
SELECT * FROM tab_part_list PARTITION (tipo2);
— Excluo a partição default para poder adicionar a partição tipo3:
ALTER TABLE tab_part_list DROP PARTITION outros;
ALTER TABLE tab_part_list ADD PARTITION tipo3 VALUES (3);
ALTER TABLE tab_part_list ADD PARTITION outros VALUES (DEFAULT);
— Verifico todos os registros da tabela:
SELECT * FROM tab_part_list;
— Insiro registros 3 e 4 novamente:
INSERT INTO tab_part_list VALUES(3, 3, 'tres');
INSERT INTO tab_part_list VALUES(4, 4, 'quatro');
COMMIT;
— Verifico os registros da partição outros:
SELECT * FROM tab_part_list PARTITION (outros);
— Verifico segmentos da tabela:
SELECT partition_name, bytes, blocks
FROM dba_segments
WHERE segment_name = 'TAB_PART_LIST';
Obs.: Também podemos consultar informações na view DBA_TAB_PARTITIONS, “dba_tables WHERE partitioned=’YES'”
Bons testes a todos!!!
Abraços