首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用本地索引交换范围-分区

用本地索引交换范围-分区
EN

Stack Overflow用户
提问于 2017-07-12 15:54:24
回答 1查看 712关注 0票数 0

我们的表有一个月间隔的范围分区。表中的索引(包括主键)是本地索引。

但是,当将这些表中的分区与没有分区的表交换时,本地索引就变得不可用了。在Oracle文档中,它只讨论全局索引的问题。因此,通过向索引添加分区键,我们将全局主索引转换为本地索引。

示例查询-

代码语言:javascript
复制
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'
);

选择将索引状态设为

可用

代码语言:javascript
复制
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'
);

交换分区后的select索引状态将索引状态设为

不可用

我们想做在线分区交换。我们是否可以使用如下语句进行交换?

更新索引

使用

交换分区

口供?

我们尝试在更新索引中使用EXCHANGE语句,但这些索引仍然无法使用。

代码语言:javascript
复制
ALTER TABLE sourcetable 
EXCHANGE PARTITION p1 WITH TABLE desttable UPDATE INDEXES;
EN

回答 1

Stack Overflow用户

发布于 2017-07-13 09:44:04

UPDATE INDEXES只适用于全局索引。既然你没有,这个条款就没有效果了。

您必须使用INCLUDING INDEXES。但是,为此您必须在源表和目标表上创建相同的索引。试试这个:

代码语言:javascript
复制
CREATE INDEX desttable_idx ON desttable ( OWNER );
ALTER TABLE sourcetable EXCHANGE PARTITION p1 WITH TABLE desttable INCLUDING INDEXES;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45062507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档