sql >> Database >  >> RDS >> Oracle

Moet ik mijn tafel partitioneren/subpartitioneren?

Je kunt het op deze manier proberen:gebruik INTERVAL om oracle te vertellen om automatische partities te maken. U moet een kolom (nummer of datum) en een interval definiëren (in mijn voorbeeld 1 maand). Oracle plaatst alle rijen in dezelfde partitie in hetzelfde interval (in dit geval in dezelfde maand). Als de partitie niet bestaat, wordt deze aangemaakt.

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'))
);

Hetzelfde kan ook worden gedaan met type kolom. Meer informatie:http://www.oracle.com/ technetwork/articles/sql/11g-partitioning-084209.html .

Elke partitie kan worden gesubpartitioneerd met de TEMPLATE-toets.

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'))
);

In dit geval kunt u geen automatische subpartitie maken, als er een nieuw type wordt toegevoegd, moet u een tabel wijzigen. Hier meer informatie; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

In jouw voorbeeld:

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'))
);

Als u probeert in te voegen:

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

je ziet 2 partities op je tafel.

Nu heb ik het getest!




  1. Hoe door komma's gescheiden waarden naar rijen in orakel te converteren?

  2. ID ophalen van een voorwaardelijke INSERT

  3. Uitzondering afhandelen en resultaat van functie retourneren

  4. Een database importeren en exporteren via SSH