Las tablas particionadas en Oracle pueden ser muy útiles en sistemas que guardan datos históricos y actuales o sistemas Datawarehouse. Definición de DWH: http://es.wikipedia.org/wiki/Almac%C3%A9n_de_datos
Con estas tablas evitamos recorrer las particiones donde no puede haber valores que coincidan con lo que estamos buscando, con lo que ahorramos tiempo, ya que podemos acceder a las particiones individuales como si fueran tablas. Una select sobre una tabla particionada con la partición sería así:
SELECT * FROM table PARTITION(part_name);
Para ver si en el sistema tenemos alguna tabla particionada:
select table_name from dba_tables where partitioned=’YES’;
select partition_name, high_value, TABLE_NAME from user_tab_partitions;
Para borrar una tabla particionada:Existen varios tipos de particionado, utilizando una clave particionado (partitioning key). Esta clave es la que determina donde se van a insertar los datos.
drop table historico purge;
Es importante poner purge u os dejará las particiones en la tabla user_tab_partitions, debido a que esa tabla seguirá en la papelera de reciclaje.
Existen varios tipos de particionado, utilizando una clave particionado (partitioning key). Esta clave es la que determina donde se van a insertar los datos.
Particionado Range
Esta forma de particionamiento es por un rango de valores.
Este tipo de particionamiento es mejor cuando se tienen datos que tienen rango lógicos por ejemplo mes del año o un valor numérico.
CREATE TABLE HISTORICO (CDHABIL VARCHAR2(3),
CDDNI VARCHAR2(9),
CDDUP VARCHAR2(1),
FECHA DATE)
PARTITION BY RANGE(FECHA)
(PARTITION HIS_JUNIO VALUES LESS THAN (TO_DATE(’01062010′,’DDMMYYYY’))
,PARTITION HIS_JULIO VALUES LESS THAN (TO_DATE(’01072010′,’DDMMYYYY’)))
Particionado Hash
La funcion hash devuelve un valor automático que determina a que partición irá el registro. Es una forma automática de realizar el particionado. Es útil para particionar tablas donde no hay unos criterios de particionado claros.
Se pueden crear solamente indicando el número de particiones a crear o indicando el nombre y los tablespace, si se quiere.
CREATE TABLE PRUEBA (C1 NUMBER, C2 VARCHAR(10))
PARTITION BY HASH(deptno) PARTITIONS 8;
CREATE TABLE PRUEBA (C1 NUMBER, C2 VARCHAR(10))
PARTITION BY HASH(deptno) PARTITIONS 4
(PARTITION p1 TABLESPACE ts1, PARTITION p2 TABLESPACE ts2,
PARTITION p3 TABLESPACE ts1, PARTITION p4 TABLESPACE ts2);