Oracle Partition Exchange is a Data Definition Language (DDL) operation that exchanges the data segment associated with a partition of a partitioned table and the data segment associated with a standalone, nonpartitioned table.
Unlike conventional data movement operations, Partition Exchange does not normally copy individual rows from the source table into the target partition.
Instead, Oracle changes the metadata associations that determine which database object owns each segment.
The result is that the data previously accessible through the standalone table becomes accessible through the target partition, while the original partition data becomes accessible through the standalone table.
This is a two-way exchange, not a one-way data transfer.
Oracle stores table data in segments, which consist of extents allocated from tablespaces. Extents contain database blocks.
A partitioned heap table generally has a separate data segment for each populated partition.
A standalone heap table has its own data segment.
During a conventional Partition Exchange, Oracle changes the segment associations between these two logical objects.
Logical objects and physical segments
Before exchange
Table partition P2
Segment A
Existing data
Staging table
Segment B
Replacement data
After exchange
Table partition P2
Segment B
Replacement data
Staging table
Segment A
Previous data
The physical database blocks do not need to be rewritten merely to perform the exchange.
The partition name, table name, and partition boundaries remain unchanged. The other partitions of the table are not exchanged.
This is the primary reason Partition Exchange can operate efficiently on very large datasets.
Every range partition has an upper boundary and an effective lower boundary determined by the preceding partition.
Oracle can validate whether all rows in the standalone table belong to the target partition.
Two validation modes are available.
WITH VALIDATION
Oracle checks the partition-key values of the staging data before completing the exchange.
If any row belongs outside the target partition's range, the exchange fails.
Validation may require reading a substantial amount of staging data, so the operation may take significantly longer than a metadata-only exchange.
WITHOUT VALIDATION
Oracle generally skips the partition-boundary verification.
This can make the operation much faster, but it introduces a serious responsibility: the DBA must ensure that the staging data belongs to the correct partition.
If invalid data is exchanged, Oracle's partition-pruning assumptions may no longer correspond to the physical placement of the rows.
Enabled primary-key or unique constraints can cause Oracle to perform validation even when WITHOUT VALIDATION is requested.
Partition Exchange affects table segments and can also affect associated indexes.
A local index is partitioned in alignment with its table. Each local index partition corresponds to a table partition.
When compatible indexes exist on the standalone table, Oracle can exchange the relevant index segments along with the table data.
This can avoid rebuilding a large local index partition after the exchange.
The INCLUDING INDEXES and EXCLUDING INDEXES options determine how the corresponding index structures are handled.
Excluding indexes can leave the affected index structures unusable, requiring subsequent maintenance.
A global index is not necessarily aligned with the table's partition boundaries.
It can contain entries referencing rows across multiple table partitions.
Consequently, exchanging one partition can affect index entries maintained by a global index.
Oracle provides the UPDATE GLOBAL INDEXES option to maintain global-index usability during the exchange.
This maintenance can introduce significant additional I/O, REDO, UNDO, and execution time.
Therefore, a partition exchange involving global-index maintenance may not have the same near-constant-time behavior as a simple segment exchange.
Partition Exchange generally avoids the row-by-row data modifications associated with conventional bulk loading.
However, the operation still changes Oracle's data dictionary and may involve index maintenance or validation.
Therefore, it is incorrect to describe Partition Exchange as generating no REDO or UNDO.
The amount of logging depends on the operation's characteristics.
|
Operation |
Main overhead |
|---|---|
|
Exchange without validation |
Metadata changes |
|
Exchange with validation |
Metadata changes and row validation |
|
Exchange including compatible local indexes |
Metadata changes for table and index segments |
|
Exchange with global-index maintenance |
Metadata changes and potentially substantial index DML |
|
Conventional bulk INSERT |
Row insertion, index maintenance, and transaction logging |
Partition Exchange is DDL and requires appropriate object-level locking.
Concurrent operations that hold conflicting locks can delay or prevent the exchange.
Oracle also performs implicit transaction commits around DDL.
A successful Partition Exchange cannot be undone by issuing a normal transaction rollback afterward.
However, the DDL statement itself is atomic: Oracle does not leave a partially exchanged pair of segments if the operation fails.
This distinction is important when designing ETL error handling and recovery procedures.
The exchanged segment retains its physical allocation.
If a staging table's segment resides in a different tablespace from the original partition, the exchange does not automatically move the segment into the partition's previous tablespace.
The new partition data may therefore remain physically allocated in the staging tablespace.
This matters for storage administration, tablespace capacity, backup strategies, and performance planning.
Partition Exchange changes the data associated with a partition, potentially changing its row count, data distribution, number of blocks, and index characteristics.
Accurate optimizer statistics are essential for choosing efficient execution plans after the exchange.
Depending on the Oracle version, statistics may need to be gathered, transferred, or refreshed.
In Oracle 10g, a conservative approach is to explicitly gather statistics for the exchanged partition and verify the table-level statistics afterward.
Partition-level and global statistics should be treated separately.
The standalone table must be structurally compatible with the partitioned table.
Compatibility involves more than matching column names. Physical column definitions, ordering, data types, and internal attributes can matter.
LOB columns, hidden columns, unused columns, constraints, indexes, and other object characteristics can introduce additional requirements.
The exchange is not a general-purpose mechanism for merging, filtering, or transforming rows.
It operates on the complete partition and the complete standalone table.
A conventional Global Temporary Table cannot be used as the standalone exchange table.
Partition Exchange is particularly valuable for large-scale ETL and data warehouse workloads.
Typical applications include replacing a daily partition with newly loaded data, publishing a completed monthly batch, archiving historical partitions, and replacing data after offline validation.
The key architectural advantage is that data preparation can occur independently of the production partitioned table, while publication is performed through a single DDL operation.