Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy powinienem podzielić/podpartycjonować mój stół?

Możesz spróbować w ten sposób:użyj INTERVAL, aby powiedzieć Oracle o utworzeniu automatycznych partycji. Musisz zdefiniować kolumnę (numer lub datę) oraz interwał (w moim przykładzie 1 miesiąc). Oracle umieści w tej samej partycji wszystkie wiersze w tym samym przedziale (w tym przypadku w tym samym miesiącu). Jeśli partycja nie istnieje, zostanie utworzona.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date)                              
interval (numtoyminterval(1,'MONTH'))(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

To samo można zrobić z kolumną typu. Więcej informacji:http://www.oracle.com/ technetwork/articles/sql/11g-partitioning-084209.html .

Każda partycja może być podzielona na podpartycjonowanie za pomocą klawisza TEMPLATE.

create table log(
       id_dispositive    number,
       date    date,
       status  number,
       type    number
)
partition by range (date) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION types1 VALUES (1, 2) TABLESPACE tbs_1,
    SUBPARTITION types2 VALUES (3, 4) TABLESPACE tbs_1
)                          
(
   partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);

W takim przypadku nie możesz utworzyć automatycznej podpartycji, jeśli zostanie dodany nowy typ, musisz uruchomić instrukcję alter table. Tutaj więcej informacji; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

W twoim przykładzie:

create table prova_log(
       id_dispositive    number,
       type       number,
       date_verification    date,
       status  number
)
partition by range (date_verification) interval (numtoyminterval(1,'MONTH'))
subpartition by list (type)  
subpartition TEMPLATE (
    SUBPARTITION type1 VALUES (1),
    SUBPARTITION type2 VALUES (2),
    SUBPARTITION type3 VALUES (3),
    SUBPARTITION type4 VALUES (4)
)                          
(
   partition p0816 values less than (to_date('01/09/2016','dd/mm/yyyy'))
);

Jeśli spróbujesz wstawić:

insert into prova_log values (1,1,TO_DATE('10/10/2016','dd/mm/yyyy'),1);

zobaczysz 2 partycje na swoim stole.

Teraz to przetestowałem!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy jest jakiś sposób na uzyskanie informacji o bieżącej sesji z gv$session w Oracle?

  2. Jak i kiedy są używane indeksy w operacjach INSERT i UPDATE?

  3. Jak uzyskać n-ty ciąg w dowolnym ogólnym słowie lub zdaniu ze spacją?

  4. Obejście dla ORA-00997:nielegalne użycie typu danych LONG

  5. funkcja Oracle Rollup z wieloma kolumnami