Daten per Exchange Partition massenhaft laden oder archivieren
OraclePartitionierungBefehl
-- 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';Was es tut
Tauscht im Dictionary das Segment einer Partition mit dem Segment einer regulären Tabelle; Millionen von Zeilen "kommen" so in Sekunden in die Tabelle oder "verlassen" sie zur Archivierung. FOR EXCHANGE WITH TABLE legt eine Staging-Tabelle an, die Kompatibilität der Spalten und versteckten Spalten garantiert.
Wann einsetzen
Für DWH-/ETL-Massenladungen, das Auslagern einer alten Partition in eine Archivtabelle und um Indizes und Statistiken während des Ladens vorzubereiten, ohne die Live-Tabelle zu beeinträchtigen.
Vorsicht
Erfordert die Partitioning-Option (kostenpflichtig, EE). WITHOUT VALIDATION prüft nicht, ob die Staging-Zeilen in die Partitionsgrenzen passen; falsche Daten bleiben in der falschen Partition und Abfragen können falsche Ergebnisse liefern; im Zweifel WITH VALIDATION verwenden (Full Scan). Ohne UPDATE GLOBAL INDEXES werden globale Indizes UNUSABLE. Der Zustand von Unique-/PK-Constraints muss auf beiden Seiten übereinstimmen.