Exchange Table Subpartition With Data And Its All LOCAL Partition Indexes 子分区

You have a table called TAB1 which is AUTO PARTITION ON A DATE COLUMN and then SUB-PARTITOIN further.

Now you are trying to move data and its sub-partition LOCAL INDEXES from TAB1 to TAB3 using exchange partition.

You have a staging table as TAB2. All three tables TAB1 (main table) , TAB2 (staging table) and TAB3 (history table) have same table structure.

Now the question is Do you have to have same indexes structure with diff name on TAB2 and TAB3 as TAB1? If not then how do to exchange the partition?

SOLUTION

NOTE: In the images and/or the document content below, the user information and data used represents fictitious data from the Oracle sample schema(s) or Public Documentation delivered with an Oracle database product. Any similarity to actual persons, living or dead, is purely coincidental and not intended in any manner.

You need to have an index on the exchange table that indexes the same columns as the local index on the partitioned table.

Text: index mismatch for tables in ALTER TABLE EXCHANGE SUBPARTITION

Cause:

Ensure that the indexes for the two tables have indexes which follow this rule For every non partitioned index for the non partitioned table, there has to be an identical LOCAL index on the partitioned table and vice versa

Here's a testcase you can review

  • drop any objects already created

drop table test_part cascade constraints;

drop table test_exch cascade constraints;

-- create range/list composite partitioned table

CREATE TABLE test_part (

customer_id NUMBER(6),

cust_first_name VARCHAR2(20),

cust_last_name VARCHAR2(20),

nls_territory VARCHAR2(30),

credit_limit NUMBER(9,2))

PARTITION BY RANGE (credit_limit)

SUBPARTITION BY LIST (nls_territory)

SUBPARTITION TEMPLATE

(SUBPARTITION east VALUES ('CHINA', 'JAPAN', 'INDIA', 'THAILAND'),

SUBPARTITION west VALUES ('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'),

SUBPARTITION other VALUES (DEFAULT))

(PARTITION p1 VALUES LESS THAN (1000),

PARTITION p2 VALUES LESS THAN (2500),

PARTITION p3 VALUES LESS THAN (MAXVALUE));

-- create local index on partitions

CREATE INDEX test_part_idx ON test_part(credit_limit, nls_territory)

STORAGE (INITIAL 1M MAXEXTENTS UNLIMITED)

LOCAL

(PARTITION p1,

PARTITION p2,

PARTITION p3

(SUBPARTITION east, SUBPARTITION west, SUBPARTITION other));

-- create the exchange table and index

CREATE TABLE test_exch2 (

customer_id NUMBER(6),

cust_first_name VARCHAR2(20),

cust_last_name VARCHAR2(20),

nls_territory VARCHAR2(30),

credit_limit NUMBER(9,2))

partition by list(nls_territory)

(partition east VALUES ('CHINA', 'JAPAN', 'INDIA', 'THAILAND'),

partition west VALUES ('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'),

partition other VALUES (DEFAULT));

CREATE INDEX test_exch2_idx ON test_exch2 (credit_limit, nls_territory);

alter table test_part exchange partition p1 with table test_exch2;

If you want to exchange out just a single subpartition of a partition (i.e. not the entire partition and all its subpartitions), then do this

-- create exchange table to hold the subpartition

CREATE TABLE test_exch (

customer_id NUMBER(6),

cust_first_name VARCHAR2(20),

cust_last_name VARCHAR2(20),

nls_territory VARCHAR2(30),

credit_limit NUMBER(9,2))

/

CREATE INDEX test_exch_idx ON test_exch (credit_limit, nls_territory);

alter table test_part exchange subpartition P2_OTHER with table test_exch;

Make sure to use without validation, or it will try to validate each row in the exchange table should go into the partition you are trying to put it into , and that takes a long time

Now the question is Do I have to have same indexes structure with diff name on TAB2 and TAB3 as TAB1? If not then how do I exchange the partition?

In your testcase, the index name does have to be different on the exchange table

If you want your local index partitions to be usable after the exchange, you have to use including indexes clause, and you have one index on the exchange table for every local index on tab1 and yes, the index names have to be different.

相关推荐
山峰哥3 小时前
解锁SQL优化新境界:从索引策略到高效查询实战
数据库·sql·oracle
l1t3 小时前
DeepSeek总结的Open DUMP Viewer for Oracle发版说明
数据库·oracle
oradh4 小时前
Oracle数据库索引组织表概述
数据库·oracle·oracle基础·oracle索引组织表·索引组织表·iot表
我科绝伦(Huanhuan Zhou)6 小时前
Oracle BBED 工具部署全流程:Linux 64位环境实操指南
linux·数据库·oracle
数厘19 小时前
2.21 sql聚合函数的特性与避坑指南(NULL值处理、DISTINCT在聚合函数中的应用)
数据库·sql·oracle
渔舟小调1 天前
P11 | 收藏与行程:用户行为类接口的设计模式
数据库·设计模式·oracle
阿坤带你走近大数据1 天前
OracleSQL优化案例-2
大数据·oracle·sql优化
aq55356001 天前
ThinkPHP5.x核心特性全解析
android·数据库·oracle·php·laravel
oradh1 天前
Oracle数据库索引概述
数据库·oracle·oracle基础·oracle入门基础·oracle索引·索引概述·索引基础
杨云龙UP1 天前
ODA-Oracle实践记录:通过Navicat导出导入表CSV文件并清理重复数据,处理OA待办延迟刷新问题_20260416
linux·运维·服务器·数据库·sql·mysql·oracle