DBAtlas · Атлас эксплуатации баз данных

Массовая загрузка или архивирование данных через exchange partition

OracleСекционирование

Команда

-- 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';

Что делает

Меняет местами в словаре сегмент секции и сегмент обычной таблицы; миллионы строк "входят" в таблицу или "уходят" из неё в архив за секунды. FOR EXCHANGE WITH TABLE создаёт staging-таблицу с гарантированной совместимостью столбцов и скрытых столбцов.

Когда использовать

Для массовых загрузок DWH/ETL, выноса старой секции в архивную таблицу и подготовки индексов и статистики без влияния на рабочую таблицу во время загрузки.

Внимание

Требует опции Partitioning (платная, EE). WITHOUT VALIDATION не проверяет, что строки staging укладываются в границы секции; неверные данные остаются в неверной секции, и запросы могут возвращать неверные результаты; если не уверены, используйте WITH VALIDATION (полное сканирование). Без UPDATE GLOBAL INDEXES глобальные индексы становятся UNUSABLE. Состояния ограничений Unique/PK должны совпадать с обеих сторон.

Открыть в DBAtlas →

Связанные материалы