我们有一个月间隔范围分区的表。包括主键的表上的索引是本地索引。
但是,当使用没有分区的表交换这些表中的分区时,本地索引将变为UNUSABLE。在Oracle文档中,它只讨论全局索引的问题。因此,我们通过将分区键添加到索引来将全局主索引转换为本地。
示例查询 -
CREATE TABLE sourcetable
(owner varchar2(30), OBJECT_NAME VARCHAR2(100))
PARTITION BY RANGE (owner)
(PARTITION P1 VALUES LESS THAN (MAXVALUE));
CREATE TABLE DESTTABLE
(owner varchar2(30), OBJECT_NAME VARCHAR2(100));
create index sourcetable_idx
on sourcetable ( owner )
local ;
alter table sourcetable add constraint src_pk primary key ( owner );
insert into sourcetable select U.OBJECT_ID, u.object_name from user_objects u
where rownum <11;
select index_name,partition_name,status from user_ind_partitions
where index_name IN (
select index_name from user_indexes
where table_name = 'SOURCETABLE'
);
select将索引状态设为
USABLE
ALTER TABLE sourcetable
EXCHANGE PARTITION p1 WITH TABLE desttable;
select index_name,partition_name,status from user_ind_partitions
where index_name IN (
select index_name from user_indexes
where table_name = 'SOURCETABLE'
);
交换分区后选择索引状态会将索引状态显示为
UNUSABLE
我们想做在线分区交换。有没有办法可以使用
这样的语句进行交换更新指数
使用
交换分区
语句?
我们尝试将EXCHANGE语句与UPDATE INDEXES一起使用,但索引仍然不可用。
ALTER TABLE sourcetable
EXCHANGE PARTITION p1 WITH TABLE desttable UPDATE INDEXES;
答案 0 :(得分:0)
UPDATE INDEXES
仅适用于全局索引。由于你没有,这个条款没有效果。
您必须使用INCLUDING INDEXES
。但是,为此必须在源表和目标表上创建相同的索引。试试这个:
CREATE INDEX desttable_idx ON desttable ( OWNER );
ALTER TABLE sourcetable EXCHANGE PARTITION p1 WITH TABLE desttable INCLUDING INDEXES;