› Fóruns › Banco de dados Oracle › Partition by range
- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 12 anos atrás por
Joel Schecheleski.
-
AutorPosts
-
6 de outubro de 2014 às 10:22 pm #107024
Eduardo Rodrigues
ParticipanteBoa tarde a todos, sou novo no “mundo Oracle” e me deparei com o seguinte cenário:
Em um Oracle 11g tenho a seguinte tabela:
create table
tbl_position (
start_date DATE,
store_id NUMBER,
inventory_id NUMBER(6),
qty_sold NUMBER(3)
);Nessa tabela são armazenados muitas informações diariamente então gostaria de usar particionamento por data (PARTITION BY RANGE), e poder armazenar os dados por dia do mês em tabelas separadas, ou seja, teria as tabelas tbl_position_1, tbl_position_2, tbl_position_3, … até a tbl_position_31, para poder armazenar os dados. Acontece que não sei como criar esse tipo de particionamento para pegar a data corrente. Alguém poderia me ajudar?
create table
tbl_position (
start_date DATE,
store_id NUMBER,
inventory_id NUMBER(6),
qty_sold NUMBER(3)
);PARTITION BY RANGE (start_date)
INTERVAL((numtodsinterval(1, ‘DAY’))
(
PARTITION tbl_position_1 VALUES LESS THAN (TO_DATE(‘data_current’, ‘DD-MM-YYYY’)),);
Atenciosamente
Eduardo Rodrigues6 de novembro de 2014 às 9:14 pm #107096Joel Schecheleski
ParticipanteBoa tarde Eduardo
uma idéia de consulta usando o SPLIT PARTITION:
– split Max value partition
— Todos os dados de 2007 para traz
alter table ALE.TABELA
split partition PARTT_2007_11
at (1080101)
into (partition PARTT_2007_12,partition IEMAX_2099_12)
update global indexes
/
Nesse caso estou pegando todos os dados de 2007 pra trás.Exemplo de criação das tabelas:
CREATE TABLE orders_tbl (
order_id number(10),
order_date date,
order_mode varchar2(10),
order_total number(15,2),
customer_id number(10))PARTITION BY RANGE (order_date) INTERVAL(NUMTOYMINTERVAL(1,’MONTH’))
STORE IN (data01,data02,data03,data04)(PARTITION JUN10 values less than TO_DATE(’01-07-10′,’dd-mm-yy’)),
PARTITION JUL10 values less than TO_DATE(’01-08-10′,’dd-mm-yy’)),
PARTITION AUG10 values less than TO_DATE(’01-09-10′,’dd-mm-yy’)));CREATE TABLE order_items_tbl (
order_id NUMBER(10),
line_id NUMBER(3),
product_id NUMBER(10),
price NUMBER(10,2),
quantity NUMBER(5),
CONSTRAINT order_items_fk FOREIGN KEY (order_id)
REFERENCES orders_tbl)
PARTITION BY REFERENCE (order_items_fk)
Espero ter ajudado 😉
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › Banco de dados Oracle › Partition by range