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

Tabla particionada de Oracle

¿Qué es la tabla particionada de Oracle?

El particionamiento divide una tabla, un índice o una tabla organizada por índices en componentes más pequeños. Cada componente se denomina partición (o subpartición para objetos particionados compuestos). Cada partición tiene un nombre único y, opcionalmente, puede tener características de almacenamiento individuales:los ejemplos incluyen la compresión o el almacenamiento en diferentes espacios de tabla. Una estrategia de creación de particiones bien diseñada puede mejorar el acceso a las consultas y las actualizaciones al limitar la operación a una única partición o a un subconjunto de particiones.

Particionamiento para el rendimiento:eliminación de particiones

La característica de tablas particionadas de Oracle permite que el optimizador de consultas omita las particiones que no son requeridas por una instrucción SQL en particular. Según la instrucción SQL, el optimizador puede identificar las particiones y subparticiones a las que se debe acceder, así como a las que no. Esto puede resultar en mejoras sustanciales en el rendimiento de las consultas, porque el optimizador se enfoca en un subconjunto específico de datos que se puede refinar aún más si existen predicados adicionales.

El optimizador hace esto usando la información de partición almacenada en el diccionario de datos para identificar el contenido de una partición sin consultar los datos que contiene. El particionamiento es una capa adicional del diccionario de datos entre tablas/índices y espacios de tabla

Limitación de la tabla con particiones

En Oracle Database 11g, una tabla puede tener un máximo de 1048575 (1024K – 1) particiones. Con la única excepción de las tablas que contienen columnas de tipos de datos LONG o LONG RAW, todas las tablas se pueden particionar (incluidas las columnas de tipo CLOB o BLOB).

Tipo de particiones de tabla

El particionamiento está disponible en la base de datos de Oracle desde la versión 8.0 y Oracle agrega continuamente más y más funciones con cada versión. La siguiente tabla muestra un resumen de los principales cambios

La principal estrategia de partición proporcionada por Oracle es
(1)Rango
(2)Lista
(3) Hash
(4)Compuesto

Cómo crear la tabla de particiones

Dependiendo de los tipos de Partición, esta es la forma de crear la tabla de Partición

División de rango

Oracle Particiona los datos en función de rangos consecutivos de valores de la clave de partición.
El punto final de cada partición se especifica mediante la siguiente sintaxis:

VALUES LESS THAN (value-list)

Ejemplo

CREATE TABLE EXP_RANGE
 (ID NUMBER(15) NOT NULL,
 CODE_ID NUMBER(15) NOT NULL,
 PERIOD_NAME VARCHAR2(15) NOT NULL,
 ACTUAL_FLAG VARCHAR2(1) NOT NULL,
 VERSION_ID NUMBER(15),
 LAST_UPDATE_DATE DATE NOT NULL,
 . . . . . .
 )
 PARTITION BY RANGE (PERIOD_NAME)
 (
 PARTITION PR1 VALUES LESS THAN ('JAN-2019'),
 PARTITION PR2 VALUES LESS THAN ('FEB-2019')
 . . .
 . . .
 );

El particionamiento por rangos es útil para particionar datos históricos y de transacciones, ya que los límites de la partición por rangos definen el orden de partición en tablas e índices

División de listas

En este método, Oracle asigna filas específicas a particiones, según una lista estática de valores literales. La clave de partición para la partición de listas solo se puede basar en una sola columna.

CREATE TABLE EXP_LIST
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 OPEN_FLAG VARCHAR2(4) NOT NULL,
 . . . . . .
 ) PARTITION BY LIST (open_flag)
 (
 PARTITION PR1 VALUES ('YES'),
 PARTITION PR2 VALUES ('NO')
 );

Partición hash

En este oráculo se utilizó el algoritmo hash para decidir la ubicación física de los datos. La partición hash distribuirá los datos de manera uniforme en un número fijo de particiones.

CREATE TABLE EXP_HASH
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 ORDERED_ITEM VARCHAR2(2000),
 OPEN_FLAG VARCHAR2(1) NOT NULL,
 . . . . . .
 )
 PARTITION BY HASH (ID)
 PARTITIONS 10
 . . .
 . . .;
 );

Particionamiento compuesto

En este oráculo se utiliza la combinación de partición de rango, lista y hash. Los métodos de partición compuesta son range-hash o range-list.

CREATE TABLE sales_details
   ( prod_id       NUMBER(6)
   , cust_id       NUMBER
   , time_id       DATE
   , channel_id    VARCHAR2(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_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy'))
  , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy'))
  , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy'))
  , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy'))
  );

Cómo mover el objeto existente al objeto particionado

Hay muchas maneras de lograr esta hazaña. Estoy explicando aquí el método simplista
1. Cree una tabla particionada vacía usando la cláusula particionada y con la opción paralela. El nombre de la tabla debe tener un nombre diferente al de la tabla sin particiones.
2. Complete los datos para la partición requerida desde la tabla sin particiones.
3. Considere usar la sugerencia de Oracle APPEND con una declaración INSERT como un cambio de código fácil que proporciona un buen rendimiento. Si el registro está habilitado y hay índices presentes, es posible que la sugerencia INSERTAR /*+ ANEXAR */ no sea efectiva. Para minimizar la sobrecarga del mantenimiento de índices, elimine los índices antes de la migración y vuelva a crearlos una vez que se haya llenado la tabla particionada.
4.Cambie el nombre de la tabla particionada al mismo que la tabla original, o cambie el sinónimo.
5. Crear índices de tabla para la tabla particionada

También lee
Índice de partición de Oracle
Consulta paralela de Oracle
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm