Sunteți pe pagina 1din 42

3.1.4 Particiones.

Las particiones les permiten descomponer tablas muy grandes y los ndices en partes ms
pequeas y manejables llamadas particiones. Cada particin es un objeto independiente con
su propio nombre y, opcionalmente, sus propias caractersticas de almacenamiento.
Para una analoga que ilustra que es una particin, supongamos que un gerente de recursos
humanos tiene una caja grande que contiene carpetas de los empleados. Cada carpeta
incluye la fecha de contratacin del empleado. Las consultas se hacen a menudo para los
empleados contratados en un mes en particular. Un enfoque para satisfacer tales solicitudes
es crear un ndice en la fecha de contratacin del empleado que especifica las ubicaciones
de las carpetas dispersas por toda la caja. Por el contrario, una estrategia de particin utiliza
muchas cajas ms pequeas, y cada caja contiene carpetas de los empleados contratados
en un mes determinado.
El uso de cajas ms pequeas tiene varias ventajas. Cuando se le pregunta para recuperar
las carpetas de los empleados contratados en junio, el gerente de recursos humanos solo
tiene que recuperar la caja de junio. Por otra parte, si esta pequea caja est daada
temporalmente, las otras cajas pequeas permanecen disponibles. Oficinas mviles tambin
se hace ms fcil, porque en lugar de mover una sola caja pesada, el administrador puede
mover varias cajas pequeas.
Desde la perspectiva de una aplicacin, slo existe un objeto de esquema. DML no necesitan
modificaciones para acceder a las tablas con particiones. El particionamiento es til para
muchos tipos diferentes de aplicaciones de bases de datos, especialmente los que manejan
grandes volmenes de datos. Los beneficios incluyen:
Aumento de la disponibilidad.
La falta de disponibilidad de una particin no implica la inexistencia del objeto. El optimizador
de consultas elimina automticamente las particiones sin referencia del plan de consulta para
las consultas no se ven afectadas cuando las particiones no estn disponibles.
Administracin simplificada de los objetos de esquema.
Un objeto particionado tiene piezas que se pueden administrar ya sea colectiva o
individualmente. Las instrucciones DDL pueden manipular particiones en lugar de tablas
enteras o ndices. Por lo tanto, se puede dividir las tareas de uso intensivo de recursos, tales
como la reconstruccin de un ndice o tabla. Por ejemplo, puede mover una particin de tabla
a la vez. Si se produce un problema, slo el movimiento particin debe ser hecho de nuevo, y

no el movimiento de la tabla. Adems, dejando caer una particin evita la ejecucin de


numerosas sentencias DELETE.
Reduccin de contencin de recursos compartidos en los sistemas OLTP
En algunos sistemas OLTP, las particiones pueden disminuir la competencia por un recurso
compartido. Por ejemplo, LMD se distribuye en muchos segmentos en lugar de un segmento.
Mayor rendimiento de las consultas en los almacenes de datos
En un almacn de datos, la particin puede acelerar el procesamiento de consultas ad hoc.
Por ejemplo, una tabla de ventas que contiene un milln de filas puede ser dividida por
trimestres.

Caractersticas de la particin.
Cada particin de una tabla o ndice debe tener los mismos atributos lgicos, tales como
nombres de columnas, tipos de datos y restricciones. Por ejemplo, todas las particiones de
una tabla comparten la misma columna y definiciones de restricciones, y todas las particiones
de un ndice comparten las mismas columnas indizadas. Sin embargo, cada particin puede
tener atributos fsicos separados, tales como el espacio de tabla a la que pertenece.
Particin clave.
La clave de particin es un conjunto de una o ms columnas que determina la particin en la
cual cada fila de una tabla con particiones debe ir. Cada fila est inequvocamente asignada
a una sola particin.
En la tabla de ventas, se puede especificar la columna time_id como la clave de una particin
de rango. La base de datos asigna filas a las particiones en funcin de si la fecha de esta
columna cae en un rango especificado. Oracle Database dirige automticamente las
operaciones de insertar, actualizar y eliminar en la particin correspondiente, usando la
particin clave.

Las estrategias de particionamiento


Oracle Partitioning ofrece varias estrategias de particionamiento que controlan la forma en
que la base de datos coloca los datos en particiones. Las estrategias bsicas son rango,
lista, y la particin hash.
Una estrategia de particin de nivel simple slo utiliza un mtodo de distribucin de datos,
por ejemplo, slo lista de particin o slo particiones de rango. En particionamientos
compuesto, una tabla est dividida por un mtodo de distribucin de datos y a continuacin,
cada particin se divide adems en subparticiones utilizando un segundo mtodo de
distribucin de datos. Por ejemplo, podra utilizar una particin de la lista para channel_id y
subparticin rango de time_id.
Particiones de rango.
En una particin de rango, los mapas de base de datos de filas basadas son particionadas
basndote en los rangos de valores del particionamiento lclave. El particionamiento de
rango es el tipo ms comn de separacin y se utiliza a menudo con las fechas.
Suponga que desea rellenar una tabla con particiones de las filas de ventas como se
muestra en el ejemplo 4-1.
Ejemplo 4-1 Ejemplo de un conjunto Fila de tabla con particiones

PROD_ID
CUST_ID TIME_ID
CHANNEL_ID
PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
---------- ---------- --------- ---------- ---------- ------------- ----------116
11393 05-JUN-99
2
999
1
12.18
40
100530 30-NOV-98
9
33
1
44.99
118
133 06-JUN-01
2
999
1
17.12
133
9450 01-DEC-00
2
999
1
31.28
36
4523 27-JAN-99
3
999
1
53.89
125
9417 04-FEB-98
3
999
1
16.86
30
170 23-FEB-01
2
999
1
8.8
24
11899 26-JUN-99
4
999
1
43.04
35
2606 17-FEB-00
3
999
1
54.94
45
9491 28-AUG-98
4
350
1
47.45

Cree time_range_sales como una tabla con particiones utilizando las sentencia del ejemplo
4-2. La columna time_id es la particin clave.
Ejemplo 4-2 particionadas por rangos Tabla

CREATE TABLE time_range_sales


( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
(PARTITION SALES_1998 VALUES LESS
PARTITION SALES_1999 VALUES LESS
PARTITION SALES_2000 VALUES LESS
PARTITION SALES_2001 VALUES LESS
);

THAN
THAN
THAN
THAN

(TO_DATE('01-JAN-1999','DD-MON-YYYY')),
(TO_DATE('01-JAN-2000','DD-MON-YYYY')),
(TO_DATE('01-JAN-2001','DD-MON-YYYY')),
(MAXVALUE)

Despus, cargue time_range_sales con las filas del ejemplo 4-1. La figura 4-1 muestra la
distribucin de fila en las cuatro particiones. La base de datos elige la particin para cada fila
en funcin del valor TIME_ID de acuerdo con las reglas especificadas en la clusula
PARTITION BY RANGE.
Figura 4-1 Particiones Rango

El Valor de la clave de la particin del rango determina el alto valor de las particiones del rango, que se
llama el punto de transicin. En la figura 4-1, la particin del SALES_1998 contiene filas que reparten
los valores de clave time_id. La base de datos crea particiones de intervalo para datos ms all de ese
punto de transicin. Las Particiones de intervalo extienden el rango a repartir instruyendo a la base de
datos para crear particiones del rango especificado o intervalo automticamente cuando se insertan
datos en la tabla excede todas las particiones de la gama. En la figura 4-1, la particin del SALES_2001
contiene filas con repartir valores clave time_id mayores o iguales a 01 de enero de 2001.

Lista de Particiones.

En la lista de particiones, la base de datos utiliza una lista de valores discretos como la clave
de particin para cada particin. Puede utilizar la lista de particiones para controlar cmo
cada filas se asignan a particiones especficas.
Mediante el uso de las listas, se pueden agrupar y organizar conjuntos de datos cuando la
clave utilizada para identificar que no est muy bien ordenado relacionados.
Suponga que crea list_sales como una lista de particiones tabla con la sentencia en el
ejemplo 4-3. La columna channel_id es la clave de particin.

Ejemplo 4-3 Tabla de lista de particiones.

CREATE TABLE list_sales


( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY LIST (channel_id)
(PARTITION even_channels VALUES (2,4),
PARTITION odd_channels VALUES (3,9)
);

Despus, se carga la tabla con las filas del ejemplo 4-1. La figura 4-2 muestra la distribucin
de fila en las dos particiones. La base de datos elige la particin para cada fila en funcin del
valor channel_id acuerdo con las reglas especificadas en la clusula PARTITION BY LIST.
Las filas con un valor channel_id de 2 o 4 se almacenan en las particiones
EVEN_CHANNELS, mientras que las filas con un valor channel_id de 3 o 9 se almacenan en
la particin ODD_CHANNELS.

Figura 4-2 Lista de Particiones


}

Particionado Hash

En la particin hash, los mapas base de datos las filas a las particiones basado en un
algoritmo de hash que la base de datos se aplica a la tecla particin especificada por el
usuario. El destino de una fila se determina por la funcin hash interna aplicada a la fila por la
base de datos. El algoritmo de hash est diseado para distribuye uniformemente filas a
travs de dispositivos de modo que cada particin contiene aproximadamente el mismo
nmero de filas.
Particin Hash es til para dividir tablas grandes para aumentar la manejabilidad. En lugar de
una mesa grande para manejar, tiene varias piezas ms pequeas. La prdida de una nica
particin de hash no afecta a las particiones restantes y se puede recuperar de forma
independiente. Particin hash tambin es til en sistemas OLTP con alta contencin
actualizacin. Por ejemplo, un segmento est dividido en varias piezas, cada uno de los
cuales se actualiza, en lugar de un nico segmento que experimenta contencin.
Suponga que crea la tabla hash_sales particiones utilizando la sentencia en el ejemplo 4-4.
La columna prod_id es la clave de particin.

Ejemplo 4-4 Tabla Hash-Particiones


CREATE TABLE hash_sales
( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE

, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY HASH (prod_id)
PARTITIONS 2;

Despus, se carga la tabla con las filas del ejemplo 4-1. La Figura 4-3 muestra una posible
distribucin de fila de las dos particiones. Tenga en cuenta que los nombres de estas
particiones son generados por el sistema.
Al insertar filas, la base de datos intenta distribuir aleatoriamente y de manera uniforme a
travs de particiones. No se puede especificar la particin en la que se coloca una fila. La
base de datos se aplica la funcin hash, cuyo resultado determina cul particin contiene la
fila. Si cambia el nmero de particiones de base de datos y luego los redistribuye los datos a
travs de todas las particiones

Figura 4-3 particiones hash.

Tablas con particiones

Una tabla con particiones se compone de una o ms particiones, que son administrados de
forma individual y puede operar independientemente de las otras particiones. Una tabla est
bien particionado o no particionado. Incluso si una tabla con particiones consiste en slo una
particin, esta tabla es diferente de una tabla sin particiones, que no puede tener particiones
agregan a l. "Caractersticas de particin" da ejemplos de tablas con particiones.
Una tabla con particiones se compone de uno o ms segmentos de tabla de particiones. Si
crea una tabla con particiones llamado hash_products, ningn segmento de la tabla se
asigna para esta tabla. En su lugar, la base de datos almacena los datos de cada particin de
tabla en su propio segmento de particin. Cada segmento de particin tabla contiene una
porcin de los datos de la tabla.
Algunas o todas las particiones de una tabla de montn organizado se puede almacenar en
un formato comprimido. Compresin ahorra espacio y puede acelerar la ejecucin de la
consulta. Por lo tanto, la compresin puede ser til en entornos tales como los almacenes de
datos, en donde la cantidad de operaciones de insercin y actualizacin es pequea, y en
entornos OLTP.
Los atributos de compresin de la tabla pueden ser declaradas para un espacio de tabla, la
tabla o la tabla de particiones. Si se declara en el nivel de espacio de tabla, a continuacin,

las tablas creadas en el espacio de tablas se comprimen de forma predeterminada. Puede


modificar el atributo de compresin para una mesa, en cuyo caso el cambio slo se aplica a
los nuevos datos que entran en esa tabla. Por lo tanto, una sola tabla o particin puede
contener bloques comprimidos y sin compresin, lo que garantiza que el tamao de los datos
no va a aumentar debido a la compresin. Si la compresin podra aumentar el tamao de un
bloque, a continuacin, la base de datos no se aplica al bloque.

ndices con particiones.

Un ndice particionado es un ndice que, al igual que una tabla con particiones, se ha
descompuesto en partes ms pequeas y manejables. ndices globales se dividen de forma
independiente de la tabla en la que se crearon, mientras que los ndices locales se vinculan
automticamente al mtodo de particionamiento para una tabla. Al igual que las tablas
particionadas, los ndices particionados mejorar administracin, la disponibilidad, el
rendimiento y la escalabilidad.
El siguiente grfico de ndice muestra las opciones de particionamiento.

ndices con particiones locales.

En un ndice de particiones local, el ndice se divide en las mismas columnas, con el mismo
nmero de particiones y los mismos lmites de particin como su tabla. Cada particin de
ndice est asociada con exactamente una particin de la tabla subyacente, de modo que
todas las claves en una particin de ndice slo se refieren a las filas almacenadas en una

tabla de particin nica. De esta manera, la base de datos sincroniza automticamente


particiones de ndice con sus particiones de tabla asociados, haciendo que cada par de mesa
de ndice independiente.
ndices con particiones locales son comunes en entornos de almacenamiento de datos.
ndices locales ofrecen las siguientes ventajas
La disponibilidad aumenta porque las acciones que hacen que los datos no vlidos o
no est disponible en una particin afectan a esta particin solamente.
Mantenimiento de reparto se simplifica. Al mover una particin de tabla, o cuando las
edades de datos fuera de una particin, slo la particin de ndice local asociado debe
ser reconstruido o se mantiene. En un ndice global, todas las particiones de ndice
deben ser reconstruidas o mantenidas.
Si se produce recuperacin de punto en el tiempo de una particin, entonces los
ndices se pueden recuperar con el tiempo de recuperacin (consulte el apartado
"Recuperacin de archivos de datos"). Todo el ndice no tiene que ser reconstruido.

Ejemplo 4-4 muestra la sentencia de creacin de la tabla hash_sales particiones, utilizando la


columna prod_id como clave de particin. Ejemplo 4-5 crea un ndice con particiones locales
en la columna de la tabla TIME_ID hash_sales.
Ejemplo 4-5 ndice con particiones local

CREATE INDEX hash_sales_idx ON hash_sales(time_id) LOCAL;

En la Figura 4-4, la tabla hash_products tiene dos particiones, por lo hash_sales_idx tiene
dos particiones. Cada particin de ndice est asociado con una particin de tabla diferente.
Particin ndice SYS_P38 ndices de filas en la tabla de particiones SYS_P33, mientras
particin de ndice SYS_P39 ndices de filas en la tabla de particiones SYS_P34.
Figura 4-4 particiones de ndice local.

No se puede agregar explcitamente una particin de un ndice local. En su lugar, se aaden


nuevas particiones de ndices locales slo cuando se agrega una particin de la tabla
subyacente. Del mismo modo, no se puede dejar explcitamente una particin de un ndice
local. En cambio, las particiones de ndice local se eliminan slo cuando se le cae una
particin de la tabla subyacente.
Al igual que otros ndices, puede crear un ndice de mapa de bits en tablas con particiones.
La nica restriccin es que los ndices de mapa de bits debe ser local en la particin de tabla
no pueden ser ndices globales. Los ndices globales de mapa de bits slo se admiten en las
tablas sin particiones.

ndices locales prefijados y no prefijados.

ndices con particiones locales se dividen en las siguientes subcategoras:


ndices prefijo local
En este caso, las claves de particin estn en el borde de ataque de la definicin del ndice. En el

Ejemplo 4-2, la tabla se divide por el rango de TIME_ID. Un ndice de prefijo local en este cuadro
habra TIME_ID como la primera columna de la lista.
ndices nonprefixed locales
En este caso, las claves de particin no estn en la vanguardia de la lista de la columna indexada y no
tienen por qu estar en la lista en absoluto. En el Ejemplo 4-5, el ndice es local nonprefixed porque la
clave product_id particin no est en el borde de ataque.
Ambos tipos de ndices pueden tomar ventaja de la eliminacin de particiones (tambin llamada poda
particin), que ocurre cuando el optimizador de velocidad de acceso a datos mediante la exclusin
de las particiones de consideracin. Si una consulta se puede eliminar particiones depende del
predicado de la consulta. Una consulta que utiliza un ndice prefijo local de siempre permite ndice de
eliminacin de particiones, mientras que una consulta que utiliza un ndice nonprefixed local no
podra.

Almacenamiento local del ndice con particiones.


Al igual que una tabla de particiones, una particin de ndice local se almacena en su propio segmento. Cada
segmento contiene una porcin del total de datos de ndice. Por lo tanto, un ndice local compuesto por cuatro
particiones no se almacena en un segmento de ndice nico, pero en cuatro segmentos separados.
ndices con particiones globales.
Un ndice particionado global es un ndice B-tree que se reparte de forma independiente de la tabla subyacente
en el que se cre. Una particin de ndice solo puede apuntar a cualquiera o todas las particiones de la tabla,
mientras que en un ndice con particiones a nivel local, existe un uno-a-uno la paridad entre particiones de
ndice y particiones de tablas.
En general, los ndices globales son tiles para aplicaciones OLTP, donde el acceso rpido, integridad de datos
y la disponibilidad son importantes. En un sistema OLTP, una tabla puede ser dividido por una llave, por
ejemplo, la columna employees.department_id, sino una aplicacin puede tener acceso a los datos con muchas
llaves diferentes, por ejemplo, por employee_id o job_id. ndices globales pueden ser tiles en este escenario.
Puede dividir un ndice global por rango o hash. Si dividida por rango, entonces las particiones de base de datos
del ndice global sobre los rangos de valores de las columnas de tabla que especifique en la lista de columnas.
Si con particiones hash, entonces la base de datos asigna filas en las particiones usando una funcin hash de
los valores de las columnas de clave de particionamiento.
A modo de ejemplo, supongamos que crea un ndice con particiones mundial sobre la mesa time_range_sales
del ejemplo 4-2. En esta tabla, las filas para las ventas de 1998 se almacenan en una particin, las filas para las
ventas de 1999 estn en otro, y as sucesivamente. Ejemplo 4-6 crea un ndice global dividida por rango en la
columna channel_id.
Ejemplo 4-6 ndice particionado global
CREATE INDEX time_channel_sales_idx ON time_range_sales (channel_id)
GLOBAL PARTITION BY RANGE (channel_id)
(PARTITION p1 VALUES LESS THAN (3),
PARTITION p2 VALUES LESS THAN (4),
PARTITION p3 VALUES LESS THAN (MAXVALUE));

Como se muestra en la Figura 4-5, una particin de ndice global puede contener entradas
que apuntan a mltiples particiones de la tabla. ndice de particin puntos P1 a las filas con
un channel_id de 2, ndice de particin puntos P2 a las filas con un channel_id de 3, y el
ndice de particin puntos p3 a las filas con un channel_id de 4 o 9.

Figura 4-5 ndice particionado Global

Tablas con particiones de ndice organizadas.


Puede dividir una tabla organizada por ndices (IOT) por rango, la lista o hash. El particionamiento es
til para proporcionar una mejor administracin, la disponibilidad y el rendimiento de IOT. Adems,
los cartuchos de datos que utilizan TIO pueden tomar ventaja de la capacidad de particin a sus datos
almacenados.
Tenga en cuenta las siguientes caractersticas de la IOT con particiones:
Las columnas de particin deben ser un subconjunto de columnas de clave principal.
Los ndices secundarios se pueden particionar nivel local y global.
Segmentos de datos de desbordamiento siempre equipartitioned con las particiones de la tabla.
Oracle Database soporta ndices de mapa de bits en las tablas de ndice organizadas por particiones y
sin particiones. Se requiere una tabla de asignacin para la creacin de ndices de mapa de bits en una
tabla organizada por ndices.
Creacin de particiones
Creacin de una tabla o ndice con particiones es muy similar a la creacin de una tabla o un
ndice sin particiones, pero incluye una clusula de particin en la instruccin CREATE
TABLE. La clusula de particionamiento y subclusulas, que incluya depende del tipo de
particin que desea lograr.
El particionamiento es posible en tanto regular (heap) organizado mesas y tablas de ndice
organizadas, a excepcin de los que contienen columnas LONG RAW o LONG. Puede crear
ndices sin particiones globales, rango o ndices globales hash particiones e ndices locales
en tablas con particiones.
Al crear (o modificar) una tabla con particiones, una clusula de movimiento de la fila (o bien
permitir el movimiento FILA o APAGADO MOVIMIENTO ROW) se puede especificar. Esta
clusula ya sea activa o desactiva la migracin de una fila a una nueva particin, si se
actualiza su clave. El valor predeterminado es DESACTIVADO MOVIMIENTO FILA.
Las siguientes secciones presentan detalles y ejemplos de creacin de particiones para los
distintos tipos de tablas e ndices con particiones:
Creacin de tablas particionadas por rangos e ndices globales
Creacin de tablas con particiones por intervalos
Creacin de tablas hash con particiones e ndices globales
Creacin de Lista de tablas particionadas
Creacin de tablas de referencia con particiones
Creacin de tablas con particiones compuestas
Uso de plantillas SUBPARTITION para describir las tablas con particiones compuestas
Uso de varias columnas Claves de particionamiento
Usando Virtual Partitioning basada en columnas
Usar compresin de tabla con las tablas de particiones
Usar compresin Llave con ndices con particiones

Uso de particiones de segmentos


Creacin de tablas organizada por ndices con particiones
Particin Restricciones para mltiples tamaos de bloque
Particin de Colecciones en XMLType y Objetos

Crear tablas e ndices globales particionadas por rangos.

La clusula PARTITION BY GAMA de la sentencia CREATE TABLE especifica que la tabla o


ndice es ser particionadas por rangos. Las clusulas PARTITION identificar los rangos de
particiones individuales, y los incisos opcionales de una clusula de particin puede
especificar fsicas y otros atributos especficos de un segmento de particin. Si no se
reemplaza en el nivel de particin, las particiones heredan los atributos de la tabla
subyacente.
Creacin de una tabla particionadas por rangos.
Ejemplo 4-1 crea una tabla de cuatro particiones, una para cada cuarto de las ventas. El
sale_year columnas, sale_month y sale_day estn las columnas de particin, mientras que
los valores constituyen la clave de particionamiento de una fila especfica. Los valores
inferiores a la clusula determina la particin de destino: particionamiento filas con valores de
clave que comparan menos de la lista ordenada de los valores especificados por la clusula
se almacenan en la particin. Cada particin se le asigna un nombre (sales_q1,
sales_q2, ...), y cada particin se encuentra en un espacio de tabla independiente (tsa,
TSB, ...).
Ejemplo 4-1 Creacin de una tabla de rango dividido
CREATE TABLE sales
( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
TABLESPACE tsa
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
TABLESPACE tsb
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))

TABLESPACE tsc
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
TABLESPACE tsd
);

Una fila con TIME_ID = 17-MAR-2006 se almacenar en la particin sales_q1_2006.


En el Ejemplo 4-2, se aade ms complejidad al ejemplo presentado anteriormente para una
tabla de rango dividido. Parmetros de almacenamiento y un atributo de registro se
especifican a nivel de tabla. Estos reemplazan los valores predeterminados correspondientes
heredados del nivel de tabla para la tabla en s, y son heredados por los tabiques de
distribucin. Sin embargo, debido a que era pequeo negocio en el primer trimestre, los
atributos de almacenamiento de particin sales_q1_2006 se hacen ms pequeos. Se
especifica la clusula MOVIMIENTO fila activado para permitir la migracin automtica de
una fila a una nueva particin, si se hace una actualizacin a un valor clave que pondra a la
fila en una particin diferente.
Ejemplo 4-2 Creacin de una tabla de rango dividido con ENABLE ROW MOVEMENT

CREATE TABLE sales


( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
STORAGE (INITIAL 100K NEXT 50K) LOGGING
PARTITION BY RANGE (time_id)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
TABLESPACE tsa STORAGE (INITIAL 20K NEXT 10K)
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
TABLESPACE tsb
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
TABLESPACE tsc
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
TABLESPACE tsd
)
ENABLE ROW MOVEMENT;

Crear una particionadas por rangos ndice Global

Las reglas para la creacin de particionadas por rangos ndices globales son similares a los
de la creacin de tablas particionadas por rangos. Ejemplo 4-3 crea particiones gama ndice
global de sale_month para las tablas creadas en los ejemplos anteriores. Cada particin de
ndice se llama, pero se almacena en el espacio de tabla por omisin para el ndice.
Ejemplo 4-3 Creacin de una tabla de ndice de amplitud de particiones
CREATE INDEX amount_sold_ix ON sales(amount_sold)
GLOBAL PARTITION BY RANGE(sale_month)
( PARTITION p_100 VALUES LESS THAN (100)
, PARTITION p_1000 VALUES LESS THAN (1000)
, PARTITION p_10000 VALUES LESS THAN (10000)
, PARTITION p_100000 VALUES LESS THAN (100000)
, PARTITION p_1000000 VALUES LESS THAN (1000000)
, PARTITION p_greater_than_1000000 VALUES LESS THAN (maxvalue)
);

Si su empresa tiene bases de datos utilizando diferentes conjuntos de caracteres, tenga


cuidado al dividir en columnas de caracteres, ya que la secuencia de ordenacin de
caracteres no es idntica en todos los conjuntos de caracteres. Para obtener ms
informacin, consulte la Gua de soporte Oracle Database globalizacin.
Creacin de tablas con particiones de intervalo
La clusula de intervalo de la sentencia CREATE TABLE crea la particin intervalo para la
tabla. Debe especificar al menos una particin de rango mediante la clusula de particin. La
gama de particin valor de la clave determina el alto valor de las particiones gama, que se
llama el punto de transicin, y la base de datos crea automticamente particiones del
intervalo de datos ms all de ese punto de transicin. El lmite inferior del intervalo de cada
particin es el lmite superior no incluye la gama anterior o la particin de intervalo.
Por ejemplo, si crea una tabla con particiones de intervalos con intervalos de un mes y en el
punto de transicin es el 1 de enero del 2010, entonces el lmite inferior para el intervalo de
enero 2010 es el 1 de enero de 2010. El lmite inferior del intervalo de julio 2010 es el 1 de
julio de 2010, independientemente de si la particin de junio 2010 se cre anteriormente.
Tenga en cuenta, sin embargo, que el uso de una fecha en que el alta o baja de la particin
de destino estara fuera del rango establecido para el almacenamiento se produce un error.
Por ejemplo, TO_DATE ('9999-12-01 ',' YYYY-MM-DD ') hace que el alto obligado a ser
10000-01-01, lo que no sera almacenable caso 10.000 est fuera de rango legal.
Para particiones de intervalo, la clave de particin slo puede ser un nombre de columna de
la tabla y debe ser de nmero o tipo DATE. La TIENDA clusula opcional IN te permite
especificar uno o ms espacios de tablas en el que la base de datos almacena datos de la
particin de intervalos usando un algoritmo de round-robin para las particiones de intervalo
que se creen posteriormente.

Ejemplo 4-4 especifica cuatro particiones con diferentes anchuras de intervalo. Tambin
especifica que por encima del punto de transicin de 1 de enero de 2010, las particiones se
crean con un ancho intervalo de un mes.
Ejemplo 4-4 Creacin de una tabla de intervalos particiones

CREATE TABLE interval_sales


( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
( PARTITION p0 VALUES LESS THAN (TO_DATE('1-1-2008',
PARTITION p1 VALUES LESS THAN (TO_DATE('1-1-2009',
PARTITION p2 VALUES LESS THAN (TO_DATE('1-7-2009',
PARTITION p3 VALUES LESS THAN (TO_DATE('1-1-2010',

'DD-MM-YYYY')),
'DD-MM-YYYY')),
'DD-MM-YYYY')),
'DD-MM-YYYY')) );

El alto obligado de p3 particin representa el punto de transicin. p3 y todas las particiones


por debajo de ella (p0, p1, p2, y en este ejemplo) se encuentran en la seccin de gama,
mientras que todas las particiones sobre ella caen en la seccin de intervalo.
Creacin de tablas hash con particiones e ndices globales

La clusula PARTITION BY HASH de la sentencia CREATE TABLE identifica que la tabla ha


de ser hachs con particiones. La clusula PARTICIONES se puede utilizar para especificar el
nmero de particiones para crear, y, opcionalmente, los espacios de tabla para almacenarlos
pulg Alternativamente, puede utilizar las clusulas de particin para nombrar las particiones
individuales y sus espacios de tabla.
El nico atributo que puede especificar para particiones hash es TABLESPACE. Todas las
particiones hash de una tabla deben compartir los mismos atributos de segmento (excepto
TABLESPACE), que se heredan del nivel de tabla.
Creacin de una tabla con particiones hash
Ejemplo 4-5 crea una tabla hash con particiones. La columna de particin es id, se crean
cuatro particiones y asignar nombres generados por el sistema, y se colocan en cuatro
espacios de tabla con nombre (GEAR1, gear2, ...).

Ejemplo 4-5 Creacin de una tabla hash con particiones

CREATE TABLE scubagear


(id NUMBER,
name VARCHAR2 (60))
PARTITION BY HASH (id)
PARTITIONS 4
STORE IN (gear1, gear2, gear3, gear4);

Los siguientes ejemplos ilustran dos mtodos para crear una tabla hash particiones llamado
departamento. En el primer ejemplo se especifica el nmero de particiones, pero los nombres
generados por el sistema se asignan a ellos y que se almacenan en el espacio de tabla por
defecto de la tabla.

CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32))


PARTITION BY HASH(deptno) PARTITIONS 16;

En el ejemplo siguiente, se especifican nombres de particiones individuales, y los espacios


de tabla en la que se van a residir,. El tamao de la extensin inicial para cada particin de
hash (segmento) tambin se indica explcitamente en el nivel de tabla y todas las particiones
heredan este atributo ..
CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32))
STORAGE (INITIAL 10K)
PARTITION BY HASH(deptno)
(PARTITION p1 TABLESPACE ts1, PARTITION p2 TABLESPACE ts2,
PARTITION p3 TABLESPACE ts1, PARTITION p4 TABLESPACE ts3);

Si crea un ndice local para esta tabla, la base de datos construye el ndice para que se
equipartitioned con la tabla subyacente. La base de datos tambin se asegura de que el
ndice se mantiene de forma automtica cuando las operaciones de mantenimiento se
realizan en la tabla subyacente. El siguiente es un ejemplo de cmo crear un ndice local
sobre la mesa dept:

CREATE INDEX loc_dept_ix ON dept(deptno) LOCAL;

Usted puede nombrar opcionalmente las particiones hash y espacios de tabla en la que las
particiones de ndice local han de ser almacenados, pero si no lo hace, entonces la base de
datos utiliza el nombre de la particin de base correspondiente como nombre de la particin
de ndice, y almacena la particin de ndice en el mismo espacio de tablas que la tabla de
particiones.

La creacin de un ndice Global de Hash-Particiones


ndices globales Hash-particiones pueden mejorar el rendimiento de los ndices en un pequeo nmero de
bloques hoja en el ndice tiene alta contencin en entornos OLTP multiusuario. ndices globales Hashparticiones tambin pueden limitar el impacto del ndice de asimetra en montonamente creciente valores de
columna. Consultas relativas a la igualdad y en los predicados de la clave de particionamiento ndice pueden
utilizar de manera eficiente hash particiones ndices globales.
La sintaxis para crear un ndice global particiones hash es similar a la utilizada para una tabla con particiones
hash. Por ejemplo, la declaracin en el Ejemplo 4-6 crea un ndice global de hash particiones:
Ejemplo 4-6 Creacin de un ndice mundial de hachs particionado
CREATE INDEX hgidx ON tab (c1,c2,c3) GLOBAL
PARTITION BY HASH (c1,c2)
(PARTITION p1 TABLESPACE tbs_1,
PARTITION p2 TABLESPACE tbs_2,
PARTITION p3 TABLESPACE tbs_3,
PARTITION p4 TABLESPACE tbs_4);

Creacin de tablas Lista con particiones.


La semntica para la creacin de lista de particiones son muy similares a los de la creacin
de particiones gama. Sin embargo, para crear lista de particiones, se especifica una clusula
PARTITION BY LIST en la sentencia CREATE TABLE, y las clusulas PARTITION especifica
una lista de valores literales, que son los valores discretos de las columnas de particin que
califican filas a incluir en la particin. Para la lista de particiones, la clave de particionamiento
no puede ser un nombre de columna de la tabla.
Disponible slo con la lista de particiones, puede usar la palabra clave DEFAULT para
describir la lista de valores para una particin. Esto identifica una particin que se adapte a
las filas que no se asignan a ninguna de las otras particiones.
Al igual que con particiones gama, incisos opcionales de una clusula de particin puede
especificar fsicas y otros atributos especficos de un segmento de particin. Si no se
reemplaza en el nivel de particin, las particiones heredan los atributos de la tabla principal.
Ejemplo 4-7 crea una tabla de lista de particiones. Crea q1_sales_by_region mesa que est
dividida por regiones que consisten en grupos de estados de EE.UU..
Ejemplo 4-7 Creacin de una tabla de lista de particiones

CREATE TABLE q1_sales_by_region


(deptno number,
deptname varchar2(20),
quarterly_sales number(10, 2),
state varchar2(2))
PARTITION BY LIST (state)
(PARTITION q1_northwest VALUES ('OR', 'WA'),
PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'),
PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'),
PARTITION q1_southeast VALUES ('FL', 'GA'),
PARTITION q1_northcentral VALUES ('SD', 'WI'),
PARTITION q1_southcentral VALUES ('OK', 'TX'));

Una fila se asigna a una particin de comprobar si el valor de la columna de particin de una
fila coincide con un valor en la lista de valores que describe la particin.
Por ejemplo, algunas filas de ejemplo se insertan como sigue:
(10, "contable", 100, "WA") se asigna a la particin q1_northwest
Mapas (20, 'I + D', 150 'OR') a la particin q1_northwest
(30, 'ventas', 100 'FL') se asigna a la particin q1_southeast
(40, 'HR', 10, 'TX') se asigna a la particin q1_southwest
(50 ', la ingeniera de sistemas', 10 'CA') no est asignado a ninguna particin en la tabla y
genera un error

A diferencia de particionamiento gama, con la lista de particiones, no hay aparente sentido de


orden entre las particiones. Tambin puede especificar una particin por defecto en la que se
asignan las filas que no se asignan a ninguna otra particin. Si se especifica una particin por
defecto en el ejemplo anterior, el estado de CA podra asignar a la particin.
Ejemplo 4-8 crea sales_by_region mesa y particiones que utilizan el mtodo de la lista. Las
dos primeras clusulas PARTITION especifican atributos fsicos, que anulan los valores
predeterminados de nivel de tabla. Las clusulas PARTITION restantes no especifican los
atributos y las particiones heredan sus atributos fsicos de los valores predeterminados de
nivel de tabla. Tambin se especifica una particin por defecto.
Ejemplo 4-8 Creacin de una tabla de lista de particiones con una particin por defecto

CREATE TABLE sales_by_region (item# INTEGER, qty INTEGER,


store_name VARCHAR(30), state_code VARCHAR(2),
sale_date DATE)
STORAGE(INITIAL 10K NEXT 20K) TABLESPACE tbs5
PARTITION BY LIST (state_code)
(
PARTITION region_east
VALUES ('MA','NY','CT','NH','ME','MD','VA','PA','NJ')
STORAGE (INITIAL 8M)

TABLESPACE tbs8,
PARTITION region_west
VALUES ('CA','AZ','NM','OR','WA','UT','NV','CO')
NOLOGGING,
PARTITION region_south
VALUES ('TX','KY','TN','LA','MS','AR','AL','GA'),
PARTITION region_central
VALUES ('OH','ND','SD','MO','IL','MI','IA'),
PARTITION region_null
VALUES (NULL),
PARTITION region_unknown
VALUES (DEFAULT)
);

Creacin de tablas de referencia con particiones


Para crear una tabla de referencia con particiones, se especifica una clusula PARTITION
BY referencia en la sentencia CREATE TABLE. Esta clusula especifica el nombre de una
restriccin de referencia y esta restriccin se convierte en la restriccin de referencia de
particin que se utiliza como la base para el particionado de referencia en la tabla. La
restriccin de referencia debe estar habilitado y cumplir.
Al igual que con otras tablas con particiones, puede especificar los atributos por omisin a
nivel de objeto, y puede especificar opcionalmente descriptores de particin que anulan los
valores predeterminados de nivel de objeto en una base por particin.
Ejemplo 4-9 crea un padre rdenes de mesa que se particionadas por rangos de fecha de
pedido. La referencia particiones order_items tabla secundaria se crea con cuatro
particiones, Q1_2005, Q2_2005, Q3_2005 y Q4_2005, donde cada particin contiene las filas
order_items correspondientes a rdenes de la particin principal respectiva.

Ejemplo 4-9 Creacin de tablas de referencia de particiones

CREATE TABLE orders


( order_id
NUMBER(12),
order_date
TIMESTAMP WITH LOCAL TIME ZONE,
order_mode
VARCHAR2(8),
customer_id
NUMBER(6),
order_status
NUMBER(2),
order_total
NUMBER(8,2),
sales_rep_id
NUMBER(6),
promotion_id
NUMBER(6),
CONSTRAINT orders_pk PRIMARY KEY(order_id)
)

PARTITION BY RANGE(order_date)
( PARTITION Q1_2005 VALUES LESS
PARTITION Q2_2005 VALUES LESS
PARTITION Q3_2005 VALUES LESS
PARTITION Q4_2005 VALUES LESS
);

THAN
THAN
THAN
THAN

(TO_DATE('01-APR-2005','DD-MON-YYYY')),
(TO_DATE('01-JUL-2005','DD-MON-YYYY')),
(TO_DATE('01-OCT-2005','DD-MON-YYYY')),
(TO_DATE('01-JAN-2006','DD-MON-YYYY'))

CREATE TABLE order_items


( order_id
NUMBER(12) NOT NULL,
line_item_id
NUMBER(3) NOT NULL,
product_id
NUMBER(6) NOT NULL,
unit_price
NUMBER(8,2),
quantity
NUMBER(8),
CONSTRAINT order_items_fk
FOREIGN KEY(order_id) REFERENCES orders(order_id)
)
PARTITION BY REFERENCE(order_items_fk);

Si se proporcionan descriptores de particin, entonces el nmero de particiones descritas


debe ser exactamente igual al nmero de particiones o subparticiones en la tabla
referenciada. Si la tabla principal es una tabla particionada compuesta, a continuacin, la
tabla tiene una particin para cada subparticin de su padre, de lo contrario la tabla tiene una
particin para cada particin de su padre.
Lmites de particin no se pueden especificar para las particiones de una tabla de referencia
con particiones.
Las particiones de una tabla de referencia particiones pueden ser nombrados. Si una
particin no se nombra explcitamente, que hereda su nombre de la particin correspondiente
en la tabla primaria, a menos que hered conflictos de nombres con un nombre explcito
existente. En este caso, la particin tiene un nombre generado por el sistema.
Las particiones de una tabla de referencia particiones colocar con la particin
correspondiente de la tabla primaria, si no se especifica ningn espacio de tabla explcita
para la particin de la referencia-tabla particionada.

Creacin de tablas con particiones compuestas


Para crear una tabla con particiones compuesto, se inicia mediante el uso de la particin
[RANGE | LISTA] clusula de una sentencia CREATE TABLE. A continuacin, se especifica
un SUBPARTITION POR [RANGE LINE | | HASH] clusula que sigue parecida sintaxis y
reglas que la particin [RANGE LINE | | HASH] clusula. La particin individual y clusulas
SUBPARTITION o subparticiones y, opcionalmente, una clusula TEMPLATE
SUBPARTITION, siguen.
Creacin de tablas con particiones compuestas Range-hash

La declaracin en el Ejemplo 4-10 crea una tabla con particiones rango hash. Cuatro
particiones gama se crean, cada uno con ocho subparticiones. Debido a que los
subparticiones no se nombran, nombres generados por el sistema son asignados, pero la
tienda en la clusula los distribuye a travs de los 4 espacios de tablas especificadas (ts1, ...,
ts4).

Ejemplo 4-10 Creacin de una tabla con particiones gama-hash compuesto

CREATE TABLE sales


( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
, PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
, PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
, PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
);

Las particiones de una tabla con particiones gama-hash son estructuras lgicas solamente,
porque sus datos se almacenan en los segmentos de sus subparticiones. Al igual que con
particiones, estas subparticiones comparten los mismos atributos lgicos. A diferencia de las
particiones de rango en una tabla de rango dividido, los subparticiones no pueden tener
diferentes atributos fsicos de la particin propietaria, aunque no estn obligados a residir en
el mismo espacio de tablas.
Los atributos especificados para una particin gama aplican a todos los subparticiones de
esa particin. Puede especificar diferentes atributos para cada particin gama, y puede
especificar una tienda en la clusula en el nivel de particin si la lista de espacios de tabla a
travs del cual los subparticiones de esa particin debe extenderse es diferente de las de
otras particiones. Todo esto se ilustra en el siguiente ejemplo.

CREATE TABLE emp (deptno NUMBER, empname VARCHAR(32), grade NUMBER)


PARTITION BY RANGE(deptno) SUBPARTITION BY HASH(empname)
SUBPARTITIONS 8 STORE IN (ts1, ts3, ts5, ts7)

(PARTITION p1 VALUES LESS THAN (1000),


PARTITION p2 VALUES LESS THAN (2000)
STORE IN (ts2, ts4, ts6, ts8),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
(SUBPARTITION p3_s1 TABLESPACE ts4,
SUBPARTITION p3_s2 TABLESPACE ts5));

La siguiente declaracin es un ejemplo de cmo crear un ndice local de la tabla emp donde
los segmentos de ndices se distribuyen en los espacios de tabla ts7, TS 8 y TS9.

CREATE INDEX emp_ix ON emp(deptno)


LOCAL STORE IN (ts7, ts8, ts9);

te ndice local equipartitioned con la tabla base de la siguiente manera:


Consiste en tantas particiones como la tabla base.
Cada particin de ndice se compone de tantas subparticiones como la tabla de
particiones de base correspondiente.
Las entradas de ndice para filas de un subparticin dada de la tabla base se
almacenan en la subparticin correspondiente del ndice.

La creacin de compuestos Range-Lista de tablas con particiones


Las particiones del alcance de una gama de la lista compuesta tabla con particiones se
describen como para las tablas particionadas por rangos no-compuesto. Esto permite a
los incisos opcionales de una clusula de particin para especificar fsicos y otros
atributos, incluyendo tablas, especficas de un segmento de particin. Si no se reemplaza
en el nivel de particin, las particiones heredan los atributos de la tabla subyacente.
La lista de descripciones SUBPARTITION, en las clusulas SUBPARTITION, se
describen como de lista particiones no compuestos, excepto el nico atributo fsico que
se puede especificar un espacio de tabla (opcional). Subparticiones heredan todos los
dems atributos fsicos de la descripcin de la particin.
Ejemplo 4-11 ilustra cmo se puede utilizar gama-list particin. En el ejemplo de
seguimiento de datos de ventas de productos por trimestres y dentro de cada trimestre,
los grupos por los Estados especificados.

Ejemplo 4-11 Creacin de una tabla con particiones rango-lista compuesta

CREATE TABLE quarterly_regional_sales


(deptno number, item_no varchar2(20),
txn_date date, txn_amount number, state varchar2(2))
TABLESPACE ts4
PARTITION BY RANGE (txn_date)
SUBPARTITION BY LIST (state)
(PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY'))
(SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q1_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q1_1999_southcentral VALUES ('OK', 'TX')
),
PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('1-JUL-1999','DD-MON-YYYY'))
(SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')
),
PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))
(SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q3_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q3_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q3_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q3_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q3_1999_southcentral VALUES ('OK', 'TX')
),
PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))
(SUBPARTITION q4_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q4_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q4_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q4_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q4_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q4_1999_southcentral VALUES ('OK', 'TX')
)
);

Una fila se asigna a una particin mediante la comprobacin de si el valor de la columna de


particin para una fila cae dentro de un rango particin especfica. La fila se asigna luego a
un subparticin dentro de esa particin mediante la identificacin de la subparticin cuya lista
de valores descriptor contiene un valor que coincide con el valor de la columna subparticin.
Por ejemplo, algunas filas de ejemplo se insertan como sigue:

(10, 4532130, '23-ene-1999 ', 8934.10,' WA ') se asigna a q1_1999_northwest subparticin


(20, 5671621, '15-May-1999 ', 49021.21,' OR ') se asigna a q2_1999_northwest subparticin
(30, 9977612, 07-Sep-1999 ', 30987.90,' FL ') se asigna a q3_1999_southeast subparticin
(40, 9977612, '29-Nov-1999 ', 67891.45,' TX ') se asigna a subparticin
q4_1999_southcentral
(40, 4532130, '5-Jan-2000 ', 897,231.55,' TX ') no est asignado a ninguna particin en la
tabla y muestra un error
(50, 5671621, '17-Dec-1999 ', 76123.35,' CA ') no se asigna a ningn subparticin en la
tabla y muestra un error
Las particiones de un rango de lista de tabla con particiones son estructuras lgicas
solamente, porque sus datos se almacenan en los segmentos de sus subparticiones. La lista
subparticiones tienen las mismas caractersticas que lista las particiones. Puede especificar
una subparticin predeterminado, tal como se especifica una particin por defecto para la
lista de particiones.
El ejemplo siguiente crea una tabla que especifica un espacio de tablas a nivel de particin y
subparticin. El nmero de subparticiones dentro de cada particin vara, y se especifican
subparticiones predeterminados.
CREATE TABLE sample_regional_sales
(deptno number, item_no varchar2(20),
txn_date date, txn_amount number, state varchar2(2))
PARTITION BY RANGE (txn_date)
SUBPARTITION BY LIST (state)
(PARTITION q1_1999 VALUES LESS THAN (TO_DATE('1-APR-1999','DD-MON-YYYY'))
TABLESPACE tbs_1
(SUBPARTITION q1_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q1_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q1_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q1_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q1_others VALUES (DEFAULT) TABLESPACE tbs_4
),
PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('1-JUL-1999','DD-MON-YYYY'))
TABLESPACE tbs_2
(SUBPARTITION q2_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q2_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q2_1999_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q2_1999_southeast VALUES ('FL', 'GA'),
SUBPARTITION q2_1999_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q2_1999_southcentral VALUES ('OK', 'TX')
),
PARTITION q3_1999 VALUES LESS THAN (TO_DATE('1-OCT-1999','DD-MON-YYYY'))
TABLESPACE tbs_3
(SUBPARTITION q3_1999_northwest VALUES ('OR', 'WA'),
SUBPARTITION q3_1999_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q3_others VALUES (DEFAULT) TABLESPACE tbs_4
),
PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))

TABLESPACE tbs_4
);

Este ejemplo da como resultado las siguientes descripciones: SUBPARTITION


Todos los subparticiones heredan sus atributos fsicos, que no sean tablas, derivadas de incumplimientos a
nivel de espacio de tabla. Esto se debe a que el nico atributo fsico que se ha especificado para particiones o
subparticiones es tablas. No hay tabla de atributos fsicos determinado nivel, por lo que por defecto a nivel de
espacio de tablas se heredan en todos los niveles.
Los primeros 4 subparticiones de particin q1_1999 estn contenidos en tbs_1, a excepcin de los q1_others
SUBPARTITION, que se almacena en tbs_4 y contiene todas las filas que no se asignan a ninguna de las otras
particiones.
Los 6 subparticiones de particin q2_1999 se almacenan en tbs_2.
Los primeros 2 subparticiones de particin q3_1999 estn contenidos en tbs_3, a excepcin de los q3_others
SUBPARTITION, que se almacena en tbs_4 y contiene todas las filas que no se asignan a ninguna de las otras
particiones.
No existe descripcin subparticin para la particin q4_1999. Esto se traduce en una SUBPARTITION
predeterminada se crean y se almacenan en tbs_4. El nombre subparticin es generada por el sistema en forma
SYS_SUBPn.
Para aprender cmo utilizar una plantilla subparticin puede simplificar la especificacin de una tabla con
particiones compuesto, consulte "Uso de plantillas SUBPARTITION para describir las tablas con particiones
Compuesto".
La creacin de compuestos Rango estndar tablas con particiones
Las particiones del alcance de un compuesto de tabla con particiones gama-gama son similares a las tablas
particionadas por rangos no compuesto. Esto permite a los incisos opcionales de una clusula de particin para
especificar fsicos y otros atributos, incluyendo tablas, especficas de un segmento de particin. Si no se
reemplaza a nivel de particin, las particiones heredan los atributos de la tabla subyacente.
Las descripciones SUBPARTITION alcance, en las clusulas SUBPARTITION, son similares a las particiones
rango no compuestos, excepto el nico atributo fsico que se puede especificar un espacio de tabla es opcional.
Subparticiones heredan todos los dems atributos fsicos de la descripcin de la particin.
Ejemplo 4-12 ilustra cmo se puede utilizar la particin rango de alcance. En el ejemplo de seguimiento de los
envos. El acuerdo de nivel de servicio con el cliente establece que cada pedido se entrega en el mes
calendario despus de realizar el pedido. Se identifican los siguientes tipos de rdenes:
E (antes de tiempo): rdenes que se entregan antes de mediados del prximo mes despus de la realizacin
del pedido. Estas rdenes probablemente superen las expectativas de los clientes.
A (CONVENIDO): rdenes que se entregan en el mes calendario despus de que se hizo el pedido (pero no
rdenes tempranas).
L (TARDE): rdenes de que slo fueron entregados a partir del segundo mes calendario despus de realizar el
pedido.
Ejemplo 4-12 Creacin de una tabla particionada compuesta rango de alcance
CREATE TABLE shipments
( order_id
NUMBER NOT NULL
, order_date
DATE NOT NULL
, delivery_date DATE NOT NULL
, customer_id
NUMBER NOT NULL
, sales_amount NUMBER NOT NULL
)
PARTITION BY RANGE (order_date)
SUBPARTITION BY RANGE (delivery_date)
( PARTITION p_2006_jul VALUES LESS THAN (TO_DATE('01-AUG-2006','dd-MON-yyyy'))

( SUBPARTITION p06_jul_e VALUES LESS THAN (TO_DATE('15-AUG-2006','dd-MON-yyyy'))


, SUBPARTITION p06_jul_a VALUES LESS THAN (TO_DATE('01-SEP-2006','dd-MON-yyyy'))
, SUBPARTITION p06_jul_l VALUES LESS THAN (MAXVALUE)
)
PARTITION p_2006_aug VALUES LESS THAN (TO_DATE('01-SEP-2006','dd-MON-yyyy'))
( SUBPARTITION p06_aug_e VALUES LESS THAN (TO_DATE('15-SEP-2006','dd-MON-yyyy'))
, SUBPARTITION p06_aug_a VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
, SUBPARTITION p06_aug_l VALUES LESS THAN (MAXVALUE)
)
PARTITION p_2006_sep VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
( SUBPARTITION p06_sep_e VALUES LESS THAN (TO_DATE('15-OCT-2006','dd-MON-yyyy'))
, SUBPARTITION p06_sep_a VALUES LESS THAN (TO_DATE('01-NOV-2006','dd-MON-yyyy'))
, SUBPARTITION p06_sep_l VALUES LESS THAN (MAXVALUE)
)
PARTITION p_2006_oct VALUES LESS THAN (TO_DATE('01-NOV-2006','dd-MON-yyyy'))
( SUBPARTITION p06_oct_e VALUES LESS THAN (TO_DATE('15-NOV-2006','dd-MON-yyyy'))
, SUBPARTITION p06_oct_a VALUES LESS THAN (TO_DATE('01-DEC-2006','dd-MON-yyyy'))
, SUBPARTITION p06_oct_l VALUES LESS THAN (MAXVALUE)
)
PARTITION p_2006_nov VALUES LESS THAN (TO_DATE('01-DEC-2006','dd-MON-yyyy'))
( SUBPARTITION p06_nov_e VALUES LESS THAN (TO_DATE('15-DEC-2006','dd-MON-yyyy'))
, SUBPARTITION p06_nov_a VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
, SUBPARTITION p06_nov_l VALUES LESS THAN (MAXVALUE)
)
PARTITION p_2006_dec VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
( SUBPARTITION p06_dec_e VALUES LESS THAN (TO_DATE('15-JAN-2007','dd-MON-yyyy'))
, SUBPARTITION p06_dec_a VALUES LESS THAN (TO_DATE('01-FEB-2007','dd-MON-yyyy'))
, SUBPARTITION p06_dec_l VALUES LESS THAN (MAXVALUE)
)

);

Una fila se asigna a una particin mediante la comprobacin de si el valor de la columna de particin para una
fila cae dentro de un rango particin especfica. La fila se asigna luego a un SUBPARTITION dentro de esa
particin mediante la identificacin de si el valor de la columna subparticiones cae dentro de un rango
especfico. Por ejemplo, un envo con una fecha de fin, en septiembre de 2006 y una fecha de entrega del 28 de
octubre 2006 cae en la particin p06_oct_a.
Para aprender cmo utilizar una plantilla subparticin puede simplificar la especificacin de una tabla con
particiones compuesto, consulte "Uso de plantillas SUBPARTITION para describir las tablas con particiones
Compuesto".
La creacin de compuestos Lista-* Tablas con particiones
Los conceptos de la lista hash, lista de vinos, y la lista de rango particionamiento compuesto son similares a los
conceptos de rango-hash, gama de vinos, y la particin del rango de alcance. Sin embargo, por lista *
particionamiento compuesto especificar PARTITION BY LIST para definir la estrategia de particin.
La lista de particiones de una lista * composite tabla con particiones son similares a las tablas particionadas por
rangos no compuesto. Esto permite a los incisos opcionales de una clusula de particin para especificar fsicos
y otros atributos, incluyendo tablas, especficas de un segmento de particin. Si no se reemplaza a nivel de
particin, las particiones heredan los atributos de la tabla subyacente.
Las descripciones SUBPARTITION, en el SUBPARTITION o clusulas subparticiones, son similares a los
mtodos de rango * particionamiento compuesto.
Para obtener ms informacin acerca de la definicin de un mtodo subparticin particionamiento compuesto
list-hash, consulte "Creacin de tablas con particiones compuestas Range-Hash". Para obtener ms informacin
acerca de la definicin subparticin de una lista-lista de mtodos de particionamiento compuesto, consulte
"Creacin de compuestos Range-Lista de tablas con particiones". Para obtener ms informacin acerca de la

definicin de un mtodo subparticin particionamiento compuesto lista de rango, consulte "Creacin de


compuestos Gama estndar tablas con particiones".
Creacin de tablas con particiones compuestas List-hash
Ejemplo 4-13 muestra una tabla de las cuentas que se lista dividida por regiones y subpartitioned utilizando
hash identificador de cliente.
Ejemplo 4-13 Creacin de una tabla con particiones lista-hash compuesto
CREATE TABLE accounts
( id
NUMBER
, account_number NUMBER
, customer_id
NUMBER
, balance
NUMBER
, branch_id
NUMBER
, region
VARCHAR(2)
, status
VARCHAR2(1)
)
PARTITION BY LIST (region)
SUBPARTITION BY HASH (customer_id) SUBPARTITIONS 8
( PARTITION p_northwest VALUES ('OR', 'WA')
, PARTITION p_southwest VALUES ('AZ', 'UT', 'NM')
, PARTITION p_northeast VALUES ('NY', 'VM', 'NJ')
, PARTITION p_southeast VALUES ('FL', 'GA')
, PARTITION p_northcentral VALUES ('SD', 'WI')
, PARTITION p_southcentral VALUES ('OK', 'TX')
);

La creacin de compuestos Lista-Lista de tablas con particiones


Ejemplo 4-14 muestra una tabla de cuentas que est lista dividida por regiones y subpartitioned utilizando la
lista por estado de cuenta.
Ejemplo 4-14 Creacin de una lista de lista de tabla particionada compuesta
CREATE TABLE accounts
( id
NUMBER
, account_number NUMBER
, customer_id
NUMBER
, balance
NUMBER
, branch_id
NUMBER
, region
VARCHAR(2)
, status
VARCHAR2(1)
)
PARTITION BY LIST (region)
SUBPARTITION BY LIST (status)
( PARTITION p_northwest VALUES ('OR', 'WA')
( SUBPARTITION p_nw_bad VALUES ('B')
, SUBPARTITION p_nw_average VALUES ('A')
, SUBPARTITION p_nw_good VALUES ('G')
)
, PARTITION p_southwest VALUES ('AZ', 'UT', 'NM')
( SUBPARTITION p_sw_bad VALUES ('B')

, SUBPARTITION p_sw_average VALUES ('A')


, SUBPARTITION p_sw_good VALUES ('G')
)
PARTITION p_northeast VALUES ('NY', 'VM', 'NJ')
( SUBPARTITION p_ne_bad VALUES ('B')
, SUBPARTITION p_ne_average VALUES ('A')
, SUBPARTITION p_ne_good VALUES ('G')
)
PARTITION p_southeast VALUES ('FL', 'GA')
( SUBPARTITION p_se_bad VALUES ('B')
, SUBPARTITION p_se_average VALUES ('A')
, SUBPARTITION p_se_good VALUES ('G')
)
PARTITION p_northcentral VALUES ('SD', 'WI')
( SUBPARTITION p_nc_bad VALUES ('B')
, SUBPARTITION p_nc_average VALUES ('A')
, SUBPARTITION p_nc_good VALUES ('G')
)
PARTITION p_southcentral VALUES ('OK', 'TX')
( SUBPARTITION p_sc_bad VALUES ('B')
, SUBPARTITION p_sc_average VALUES ('A')
, SUBPARTITION p_sc_good VALUES ('G')
)

);

La creacin de compuestos Lista estndar tablas con particiones


Ejemplo 4-15 muestra una tabla de las cuentas que se lista dividida por regiones y
subpartitioned con rango de saldo de la cuenta. Tenga en cuenta que el movimiento de la fila
est activada. Subparticiones para diferentes particiones lista podra tener diferentes rangos
especificados.
Ejemplo 4-15 Creacin de una tabla con particiones lista gama compuesta

CREATE TABLE accounts


( id
NUMBER
, account_number NUMBER
, customer_id
NUMBER
, balance
NUMBER
, branch_id
NUMBER
, region
VARCHAR(2)
, status
VARCHAR2(1)
)
PARTITION BY LIST (region)
SUBPARTITION BY RANGE (balance)
( PARTITION p_northwest VALUES ('OR', 'WA')

( SUBPARTITION p_nw_low VALUES LESS THAN (1000)


, SUBPARTITION p_nw_average VALUES LESS THAN (10000)
, SUBPARTITION p_nw_high VALUES LESS THAN (100000)
, SUBPARTITION p_nw_extraordinary VALUES LESS THAN (MAXVALUE)
)
PARTITION p_southwest VALUES ('AZ', 'UT', 'NM')
( SUBPARTITION p_sw_low VALUES LESS THAN (1000)
, SUBPARTITION p_sw_average VALUES LESS THAN (10000)
, SUBPARTITION p_sw_high VALUES LESS THAN (100000)
, SUBPARTITION p_sw_extraordinary VALUES LESS THAN (MAXVALUE)
)
PARTITION p_northeast VALUES ('NY', 'VM', 'NJ')
( SUBPARTITION p_ne_low VALUES LESS THAN (1000)
, SUBPARTITION p_ne_average VALUES LESS THAN (10000)
, SUBPARTITION p_ne_high VALUES LESS THAN (100000)
, SUBPARTITION p_ne_extraordinary VALUES LESS THAN (MAXVALUE)
)
PARTITION p_southeast VALUES ('FL', 'GA')
( SUBPARTITION p_se_low VALUES LESS THAN (1000)
, SUBPARTITION p_se_average VALUES LESS THAN (10000)
, SUBPARTITION p_se_high VALUES LESS THAN (100000)
, SUBPARTITION p_se_extraordinary VALUES LESS THAN (MAXVALUE)
)
PARTITION p_northcentral VALUES ('SD', 'WI')
( SUBPARTITION p_nc_low VALUES LESS THAN (1000)
, SUBPARTITION p_nc_average VALUES LESS THAN (10000)
, SUBPARTITION p_nc_high VALUES LESS THAN (100000)
, SUBPARTITION p_nc_extraordinary VALUES LESS THAN (MAXVALUE)
)
PARTITION p_southcentral VALUES ('OK', 'TX')
( SUBPARTITION p_sc_low VALUES LESS THAN (1000)
, SUBPARTITION p_sc_average VALUES LESS THAN (10000)
, SUBPARTITION p_sc_high VALUES LESS THAN (100000)
, SUBPARTITION p_sc_extraordinary VALUES LESS THAN (MAXVALUE)
)
ENABLE ROW MOVEMENT;

La creacin de compuestos Intervalo: * Tablas con particiones


Los conceptos de intervalo * particionamiento compuesto son similares a los conceptos de rango * particin. Sin
embargo, se extiende la clusula PARTITION BY RANGE para incluir la definicin de intervalo. Debe especificar
al menos una particin de rango mediante la clusula de particin. La gama de particin valor de la clave
determina el alto valor de las particiones gama, que se llama el punto de transicin, y la base de datos crea
automticamente particiones del intervalo de datos ms all de ese punto de transicin.
Los subparticiones de intervalos en una tabla con particiones de intervalos * se crean cuando la base de datos
crea el intervalo. Puede especificar la definicin de las futuras subparticiones slo con una plantilla subparticin.
Para obtener ms informacin acerca de cmo utilizar una plantilla subparticin, consulte "Uso de plantillas
SUBPARTITION para describir las tablas con particiones Compuesto".
Creacin de tablas con particiones compuestas Intervalo-hash
Puede crear una tabla con particiones intervalo-hash con mltiples particiones hash usando uno de los

siguientes mtodos:
Especificar mltiples particiones hash en la clusula particiones.
Utilice una plantilla subparticin.
Si no utiliza uno de estos mtodos, entonces futuras particiones intervalo obtener un solo subparticin hash.
Ejemplo 4-16 se muestra la tabla de ventas, el intervalo de particiones con intervalos de un mes en TIME_ID,
con subparticiones hash cust_id. Tenga en cuenta que este ejemplo se especifica varias particiones hash, sin
asignacin de espacio de tablas especficas para las particiones hash individuales.
Ejemplo 4-16 Creacin de una tabla con particiones intervalo-hash compuesto
CREATE TABLE sales
( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
SUBPARTITION BY HASH (cust_id) SUBPARTITIONS 4
( PARTITION before_2000 VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy')))
PARALLEL;

El siguiente ejemplo muestra la misma tabla de ventas, el intervalo de particiones con intervalos de un mes en
TIME_ID, de nuevo con subparticiones picadillo por cust_id. Esta vez, sin embargo, particiones hash
individuales se almacenan en espacios de tablas separadas. Tenga en cuenta que la plantilla SUBPARTITION
se utiliza para definir la asignacin de espacio de tabla para futuras subparticiones hash.
CREATE TABLE sales
( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
SUBPARTITION BY hash(cust_id)
SUBPARTITION template
( SUBPARTITION p1 TABLESPACE ts1
, SUBPARTITION p2 TABLESPACE ts2
, SUBPARTITION p3 TABLESPACE ts3
, SUBPARTITION P4 TABLESPACE ts4
)
( PARTITION before_2000 VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy'))
) PARALLEL;

La creacin de compuestos Intervalo-Lista de tablas con particiones


La nica manera de definir la lista de subparticiones para futuras particiones de intervalo es con la plantilla
SUBPARTITION. Si no utiliza la plantilla subparticiones, entonces la nica subparticin que se crean para cada
particin de intervalo es una subparticin DEFAULT. Para obtener ms informacin acerca de cmo utilizar una
plantilla subparticin, consulte "Uso de plantillas SUBPARTITION para describir las tablas con particiones
Compuesto".
Ejemplo 4-17 se muestra la tabla de ventas, el intervalo de particiones con intervalos diarios en TIME_ID, con la
lista de subparticiones por channel_id.
Ejemplo 4-17 Creacin de un intervalo de la lista tabla particionada compuesta

CREATE TABLE sales


( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)
, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id) INTERVAL (NUMTODSINTERVAL(1,'DAY'))
SUBPARTITION BY LIST (channel_id)
SUBPARTITION TEMPLATE
( SUBPARTITION p_catalog VALUES ('C')
, SUBPARTITION p_internet VALUES ('I')
, SUBPARTITION p_partners VALUES ('P')
, SUBPARTITION p_direct_sales VALUES ('S')
, SUBPARTITION p_tele_sales VALUES ('T')
)
( PARTITION before_2000 VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy')))
PARALLEL;

La creacin de compuestos Intervalo estndar tablas con particiones


La nica manera de definir subparticiones gama para futuras particiones de intervalo es con la plantilla
SUBPARTITION. Si no utiliza la plantilla subparticin, entonces la nica subparticin que se crea para cada
particin de intervalo es una subparticin gama con el lmite superior MAXVALUE. Para obtener ms
informacin acerca de cmo utilizar una plantilla subparticin, consulte "Uso de plantillas SUBPARTITION para
describir las tablas con particiones Compuesto".
Ejemplo 4-18 se muestra la tabla de ventas, el intervalo de particiones con intervalos diarios en TIME_ID, con
subparticiones gama de amount_sold.
Ejemplo 4-18 Creacin de una tabla con particiones intervalo de gama compuesta
CREATE TABLE sales
( prod_id
NUMBER(6)
, cust_id
NUMBER
, time_id
DATE
, channel_id
CHAR(1)
, promo_id
NUMBER(6)

, quantity_sold NUMBER(3)
, amount_sold
NUMBER(10,2)
)
PARTITION BY RANGE (time_id) INTERVAL (NUMTODSINTERVAL(1,'DAY'))
SUBPARTITION BY RANGE(amount_sold)
SUBPARTITION TEMPLATE
( SUBPARTITION p_low VALUES LESS THAN (1000)
, SUBPARTITION p_medium VALUES LESS THAN (4000)
, SUBPARTITION p_high VALUES LESS THAN (8000)
, SUBPARTITION p_ultimate VALUES LESS THAN (maxvalue)
)
( PARTITION before_2000 VALUES LESS THAN (TO_DATE('01-JAN-2000','dd-MON-yyyy')))
PARALLEL;

Uso de plantillas SUBPARTITION para describir las tablas con particiones compuestas
Puede crear subparticiones en una tabla con particiones compuesto utilizando una plantilla subparticin. Una
plantilla de subparticin simplifica la especificacin de subparticiones al no requerir que un descriptor de
subparticin puede especificar para cada particin en la tabla. En su lugar, usted describe subparticiones slo
una vez en una plantilla, a continuacin, aplicar esa plantilla subparticin a cada particin en la tabla. Para el
intervalo-* tablas con particiones de material compuesto, la plantilla SUBPARTITION es la nica manera de
definir subparticiones para las particiones de intervalo.
La plantilla SUBPARTITION se utiliza cada vez que un descriptor de subparticin no se especifica para una
particin. Si se especifica un descriptor de subparticin, a continuacin, se utiliza en lugar de la plantilla de
subparticin para esa particin. Si no se especifica ninguna plantilla subparticin, y ningn descriptor
subparticin se suministra para una particin, se crea un nico subparticin defecto.
Especificar una plantilla SUBPARTITION una tabla con particiones *-Hash
Para el rango-hash, intervalo-hash, y lista de hash tablas con particiones, la plantilla subparticin puede
describir los subparticiones en detalle, o puede especificar slo el nmero de subparticiones hash.
Ejemplo 4-19 Creacin de una tabla con particiones gama-hash con una plantilla subparticin.
CREATE TABLE emp_sub_template (deptno NUMBER, empname VARCHAR(32), grade NUMBER)
PARTITION BY RANGE(deptno) SUBPARTITION BY HASH(empname)
SUBPARTITION TEMPLATE
(SUBPARTITION a TABLESPACE ts1,
SUBPARTITION b TABLESPACE ts2,
SUBPARTITION c TABLESPACE ts3,
SUBPARTITION d TABLESPACE ts4
)
(PARTITION p1 VALUES LESS THAN (1000),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);

Este ejemplo genera la siguiente descripcin de la tabla:


Cada particin tiene cuatro subparticiones como se describe en la plantilla SUBPARTITION.
Cada subparticin tiene un espacio de tablas especificado. Se requiere que si se especifica un espacio de

tablas para una subparticin en una plantilla subparticin, entonces se debe especificar para todos.
Los nombres de los subparticiones, a menos que se utilice en intervalos * subparticiones, se generan
mediante la concatenacin del nombre de la particin con el nombre subparticin en la forma:
Nombre name_subpartition particin
Para el intervalo-* subparticiones, los nombres SUBPARTITION son generados por el sistema en la forma:
SYS_SUBPn
La consulta siguiente muestra los nombres SUBPARTITION y espacios de tabla:
SQL> SELECT TABLESPACE_NAME, PARTITION_NAME, SUBPARTITION_NAME
2 FROM DBA_TAB_SUBPARTITIONS WHERE TABLE_NAME='EMP_SUB_TEMPLATE'
3 ORDER BY TABLESPACE_NAME;
TABLESPACE_NAME
--------------TS1
TS1
TS1
TS2
TS2
TS2
TS3
TS3
TS3
TS4
TS4
TS4

PARTITION_NAME
--------------P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3

SUBPARTITION_NAME
-----------------P1_A
P2_A
P3_A
P1_B
P2_B
P3_B
P1_C
P2_C
P3_C
P1_D
P2_D
P3_D

12 rows selected.

Especificar una plantilla SUBPARTITION una tabla con particiones *-List


Ejemplo 4-20, para un rango de lista de tabla con particiones, ilustra cmo el uso de una plantilla subparticin
puede ayudarle a raya los datos a travs de tablas. En este ejemplo, se crea una tabla donde los subparticiones
mesa son rayas verticales, lo que significa que subparticin n de todas las particiones estn en el mismo
espacio de tablas.
Ejemplo 4-20 Creacin de un rango de lista de tabla con particiones con una plantilla subparticin
CREATE TABLE stripe_regional_sales
( deptno number, item_no varchar2(20),
txn_date date, txn_amount number, state varchar2(2))
PARTITION BY RANGE (txn_date)
SUBPARTITION BY LIST (state)
SUBPARTITION TEMPLATE
(SUBPARTITION northwest VALUES ('OR', 'WA') TABLESPACE tbs_1,
SUBPARTITION southwest VALUES ('AZ', 'UT', 'NM') TABLESPACE tbs_2,
SUBPARTITION northeast VALUES ('NY', 'VM', 'NJ') TABLESPACE tbs_3,
SUBPARTITION southeast VALUES ('FL', 'GA') TABLESPACE tbs_4,
SUBPARTITION midwest VALUES ('SD', 'WI') TABLESPACE tbs_5,

SUBPARTITION south VALUES ('AL', 'AK') TABLESPACE tbs_6,


SUBPARTITION others VALUES (DEFAULT ) TABLESPACE tbs_7
)
(PARTITION q1_1999 VALUES LESS THAN ( TO_DATE('01-APR-1999','DD-MON-YYYY')),
PARTITION q2_1999 VALUES LESS THAN ( TO_DATE('01-JUL-1999','DD-MON-YYYY')),
PARTITION q3_1999 VALUES LESS THAN ( TO_DATE('01-OCT-1999','DD-MON-YYYY')),
PARTITION q4_1999 VALUES LESS THAN ( TO_DATE('1-JAN-2000','DD-MON-YYYY'))
);

Si ha especificado los espacios de tabla a nivel de particin (por ejemplo, para la particin tbs_1 q1_1999, tbs_2
para la particin q2_1999, tbs_3 para la particin q3_1999 y tbs_4 para la particin q4_1999) y no en la plantilla
subparticin, la tabla sera rayas horizontales. Todos subparticiones estaran en el espacio de tabla de la
particin propietaria.
Utilizando varias columnas Claves de particionamiento
Para el rango de particiones y tablas hash particionado, puede especificar un mximo de 16 columnas clave de
particionamiento. Uso de varias columnas de particin cuando la clave de particionamiento se compone de
varias columnas y columnas subsiguientes definir una granularidad ms alta que las anteriores. El escenario
ms comn es una fecha clave descompuesto o TIMESTAMP, que consiste en columnas separadas, para el
ao, mes y da.
En la evaluacin de las llaves de varias columnas de particin, la base de datos utiliza el segundo valor slo si
el primer valor no puede identificar de forma nica una sola particin de destino, y utiliza el tercer valor slo si la
primera y segunda no determinan la particin correcta, y as sucesivamente. Un valor no puede determinar la
particin correcta slo cuando una particin unida coincide exactamente con la que el valor y el mismo enlazado
se definen para la siguiente particin. La columna n-sima se investig solamente cuando todos los (n-1)
valores anteriores de la clave de varias columnas coinciden exactamente con los lmites (n-1) de una particin.
Una segunda columna, por ejemplo, se evala solamente si la primera columna coincide exactamente con el
valor lmite de particin. Si todos los valores de columna coinciden exactamente con todos los valores
consolidados para una particin, entonces la base de datos determina que la fila no cabe en esta particin y
considera la siguiente particin para un partido.
Para las definiciones de contorno no deterministas (particiones sucesivas con valores idnticos para al menos
una columna), el valor lmite de particin se convierte en un valor inclusive, que representa un "menor o igual"
lmite. Esto est en contraste con los lmites deterministas, donde los valores son siempre considerados como
"menos de" lmites.
Ejemplo 4-21 ilustra la evaluacin de la columna de una tabla de varias columnas de rango dividido, el
almacenamiento de la informacin real FECHA en tres columnas separadas: ao, mes y da. La granularidad de
particin es un trimestre calendario. La tabla con particiones que se evala se crea de la siguiente manera:
Ejemplo 4-21 Creacin de una tabla de varias columnas particionadas por rangos
CREATE TABLE sales_demo (
year
NUMBER,
month
NUMBER,
day
NUMBER,
amount_sold
NUMBER)
PARTITION BY RANGE (year,month)
(PARTITION before2001 VALUES LESS
PARTITION q1_2001
VALUES LESS
PARTITION q2_2001
VALUES LESS
PARTITION q3_2001
VALUES LESS
PARTITION q4_2001
VALUES LESS
PARTITION future
VALUES LESS

THAN
THAN
THAN
THAN
THAN
THAN

(2001,1),
(2001,4),
(2001,7),
(2001,10),
(2002,1),
(MAXVALUE,0));

REM 12-DEC-2000
INSERT INTO sales_demo
REM 17-MAR-2001
INSERT INTO sales_demo
REM 1-NOV-2001
INSERT INTO sales_demo
REM 1-JAN-2002
INSERT INTO sales_demo

VALUES(2000,12,12, 1000);
VALUES(2001,3,17, 2000);
VALUES(2001,11,1, 5000);
VALUES(2002,1,1, 4000);

El valor por ao de 12-DEC-2000 cumple la primera particin, before2001, as que no hay


una evaluacin adicional:

SELECT * FROM sales_demo PARTITION(before2001);


YEAR
MONTH
DAY AMOUNT_SOLD
---------- ---------- ---------- ----------2000
12
12
1000

La informacin para 17-MAR-2001 se almacenan en la particin q1_2001. La columna de


clave de particionamiento primera, aos, no por s mismo determinar la particin correcta, por
lo que la segunda particin de la columna de clave, el mes, debe ser evaluado.

SELECT * FROM sales_demo PARTITION(q1_2001);


YEAR
MONTH
DAY AMOUNT_SOLD
---------- ---------- ---------- ----------2001
3
17
2000

Siguiendo la misma regla de determinacin en cuanto a la marca anterior, la segunda columna, mes,
determina q4_2001 particin como particin correcta para 1-NOV-2001:

SELECT * FROM sales_demo PARTITION(q4_2001);


YEAR
MONTH
DAY AMOUNT_SOLD
---------- ---------- ---------- ----------2001
11
1
5000

La particin de 01-JAN-2002 se determina mediante la evaluacin de slo la columna de aos, lo que indica la
particin futuro:
SELECT * FROM sales_demo PARTITION(future);
YEAR
MONTH
DAY AMOUNT_SOLD
---------- ---------- ---------- ----------2002
1
1
4000

Si la base de datos se encuentra con MAXVALUE en una de las columnas de claves de


particionamiento, entonces todos los dems valores de las columnas posteriores se vuelven irrelevantes.
Es decir, una definicin de la futura particin en el ejemplo precedente, que tiene un lmite de
(MAXVALUE, 0) es equivalente a una cota de (MAXVALUE, 100) o una cota de (MAXVALUE,
MAXVALUE).
El siguiente ejemplo ilustra el uso de un enfoque de varias columnas con particiones de los
supplier_parts de mesa, el almacenamiento de la informacin acerca de que los proveedores entregan
que partes. Para distribuir los datos en particiones de igual tamao, no es suficiente para la particin de
tabla basada en la supplier_id, debido a que algunos proveedores podran proporcionar cientos de miles
de piezas, mientras que otros proporcionan slo unas pocas partes de la especialidad. En su lugar, el
cuadro de la particin (supplier_id, PARTNUM) para aplicar manualmente las particiones del mismo
tamao.
CREATE TABLE supplier_parts (
supplier_id
NUMBER,
partnum
NUMBER,
price
NUMBER)
PARTITION BY RANGE (supplier_id, partnum)
(PARTITION p1 VALUES LESS THAN (10,100),
PARTITION p2 VALUES LESS THAN (10,200),
PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE));

Los tres registros siguientes se insertan en la tabla:

INSERT INTO supplier_parts VALUES (5,5, 1000);


INSERT INTO supplier_parts VALUES (5,150, 1000);
INSERT INTO supplier_parts VALUES (10,100, 1000);

Los dos primeros registros se insertan en p1 particin, identificada de forma nica por supplier_id. Sin embargo,
el tercer disco se inserta en p2 particin, sino que coincide con los valores lmite de intervalo de particin p1
exactamente y por lo tanto la base de datos considera la siguiente particin para un partido. El valor de
PARTNUM satisface los criterios <200, por lo que se inserta en p2 particin.
SELECT * FROM supplier_parts PARTITION (p1);
SUPPLIER_ID
PARTNUM
PRICE
----------- ---------- ---------5
5
1000
5
150
1000
SELECT * FROM supplier_parts PARTITION (p2);
SUPPLIER_ID
PARTNUM
PRICE
----------- ---------- ---------10
100
1000

S-ar putea să vă placă și