DBAtlas · Atlas de operaciones de bases de datos

Carga masiva o archivado de datos con exchange partition

OracleParticionamiento

Comando

-- 1) Staging table that exactly matches the target (12.2+):
CREATE TABLE customer_app.sale_stage
  FOR EXCHANGE WITH TABLE customer_app.sale_part;

-- 2) Load the staging table and build indexes matching the local indexes:
INSERT /*+ APPEND */ INTO customer_app.sale_stage
SELECT * FROM customer_app.sale_load WHERE created_at >= DATE '2027-01-01';
COMMIT;
CREATE INDEX customer_app.sale_stage_customer_ix ON customer_app.sale_stage (customer_id);

-- 3) Swap (dictionary-only operation, no data movement):
ALTER TABLE customer_app.sale_part
  EXCHANGE PARTITION p2027 WITH TABLE customer_app.sale_stage
  INCLUDING INDEXES WITHOUT VALIDATION
  UPDATE GLOBAL INDEXES;

-- 4) Verify:
SELECT COUNT(*) FROM customer_app.sale_part PARTITION (p2027);
SELECT index_name, partition_name, status
FROM   dba_ind_partitions
WHERE  index_owner = 'CUSTOMER_APP' AND status <> 'USABLE';

Qué hace

Intercambia en el diccionario el segmento de una partición con el segmento de una tabla normal; millones de filas "entran" en la tabla o "salen" de ella para archivarse en segundos. FOR EXCHANGE WITH TABLE crea una tabla de staging que garantiza la compatibilidad de columnas y columnas ocultas.

Cuándo usarlo

Para cargas masivas de DWH/ETL, sacar una partición antigua a una tabla de archivo, y preparar índices y estadísticas sin afectar a la tabla activa durante la carga.

Precaución

Requiere la opción Partitioning (EE con costo adicional). WITHOUT VALIDATION no comprueba que las filas de staging encajen en los límites de la partición; los datos erróneos se quedan en la partición equivocada y las consultas pueden devolver resultados incorrectos; si no está seguro use WITH VALIDATION (full scan). Sin UPDATE GLOBAL INDEXES los índices globales pasan a UNUSABLE. Los estados de las restricciones unique/PK deben coincidir en ambos lados.

Abrir en DBAtlas →

Relacionado