Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 11 anos, 4 meses atrás por Joel Schecheleski.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #107024
    Eduardo Rodrigues
    Participante

      Boa 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 Rodrigues

      #107096
      Joel Schecheleski
      Participante

        Boa 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 😉

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.