sql >> Base de Datos >  >> RDS >> Oracle

¿Debo particionar/subparticionar mi tabla?

Puede probar de esta manera:use INTERVALO para decirle a Oracle que cree particiones automáticas. Debe definir la columna (número o fecha) y un intervalo (en mi ejemplo, 1 mes). Oracle pondrá en la misma partición todas las filas en el mismo intervalo (en este caso en el mismo mes). Si la partición no existe se creará.

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

Lo mismo se puede hacer también con el tipo de columna. Más información:http://www.oracle.com/ technetwork/articles/sql/11g-particionamiento-084209.html .

Cada partición se puede dividir en subparticiones usando la tecla PLANTILLA.

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

En este caso, no puede crear una subpartición automática, si se agregará un nuevo tipo, debe ejecutar una declaración de modificación de la tabla. Aquí más información; https://docs.oracle.com/cd /B28359_01/server.111/b32024/part_admin.htm#i1006655 .

En tu ejemplo:

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

Si intenta insertar:

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

verá 2 particiones en su mesa.

¡Ahora lo he probado!