Charger en masse ou archiver des données par échange de partition
OraclePartitionnementCommande
-- 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';Ce que fait la commande
Échange dans le dictionnaire le segment d'une partition avec celui d'une table ordinaire ; des millions de lignes "entrent" dans la table ou en "sortent" pour archivage en quelques secondes. FOR EXCHANGE WITH TABLE crée une table de staging qui garantit la compatibilité des colonnes et des colonnes cachées.
Quand l'utiliser
Pour les chargements en masse DWH/ETL, le déplacement d'une ancienne partition vers une table d'archive, et la préparation des index et statistiques sans affecter la table active pendant le chargement.
Attention
Exige l'option Partitioning (EE payante). WITHOUT VALIDATION ne vérifie pas que les lignes de staging respectent les bornes de la partition ; les données erronées restent dans la mauvaise partition et les requêtes peuvent renvoyer des résultats faux ; en cas de doute, utilisez WITH VALIDATION (parcours complet). Sans UPDATE GLOBAL INDEXES, les index globaux deviennent UNUSABLE. L'état des contraintes unique/PK doit être identique des deux côtés.