Carga masiva o archivado de datos con exchange partition
OracleParticionamientoComando
-- 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.