oracle分区索引的失效和重建代码示例
上一篇文章中我们了解了oracle普通表转化为分区表的方法的相关内容,接下来的这篇文章,我们将探讨oracle分区索引的失效和重建问题,提供了相关代码示例供大家参考,具体如下。
--创建测试表 SQL>createtabletasselectobject_id,object_namefromdba_objects;
表已创建。
SQL>selectmin(object_id),max(object_id)fromt; MIN(OBJECT_ID)MAX(OBJECT_ID) ---------------------------- 276083 SQL>createtablet_part(object_idint,object_namevarchar2(1000))partitionbyrange(object_id) 2( 3partitionp1valueslessthan(10000), 4partitionp2valueslessthan(20000), 5partitionp3valueslessthan(30000), 6partitionp4valueslessthan(40000), 7partitionpmvalueslessthan(maxvalue));
表已创建。
SQL>insertintot_partselect*fromt;
已创建72663行。
SQL>commit; --创建本地分区索引 SQL>createindexidx_part_localont_part(object_name)local;
索引已创建。
创建全局非分区索引
SQL>createindexidx_part_globalont_part(object_id)global;
索引已创建。
删除其中一个分区
SQL>altertablet_partdroppartitionp1;
表已更改。
全局非分区索引失效,本地分区索引没有失效
SQL>selectstatus,index_namefromuser_indexesswhereindex_name='IDX_PART_GLOBAL'; STATUSINDEX_NAME -------------------------------------- UNUSABLEIDX_PART_GLOBAL SQL>selectstatus,index_namefromuser_ind_partitionsswhereindex_name='IDX_PART_LOCAL'; STATUSINDEX_NAME -------------------------------------- USABLEIDX_PART_LOCAL USABLEIDX_PART_LOCAL USABLEIDX_PART_LOCAL USABLEIDX_PART_LOCAL --重建失效索引 SQL>alterindexidx_part_globalrebuild;
索引已更改。
在删除表分区的时候,可以通过以下命令进行索引重建
altertablet_partdroppartitionp2updateindexes;
创建全局分区索引
SQL>dropindexidx_part_global;
索引已删除。
SQL>CREATEINDEXidx_part_global_fullONt_part(object_id) 2GLOBALPARTITIONBYRANGE(object_id) 3(PARTITIONp1VALUESLESSTHAN(10000), 4PARTITIONp2VALUESLESSTHAN(30000), 5PARTITIONp3VALUESLESSTHAN(MAXVALUE));
索引已创建。
--删除其中一个分区 SQL>altertablet_partdroppartitionp3;
表已更改。
--全局分区索引失效 SQL>selectstatus,index_namefromuser_ind_partitionsswhereindex_name='IDX_PART_GLOBAL_FULL'; STATUSINDEX_NAME -------------------------------------- UNUSABLEIDX_PART_GLOBAL_FULL UNUSABLEIDX_PART_GLOBAL_FULL UNUSABLEIDX_PART_GLOBAL_FULL SQL>select/*+index(tIDX_PART_LOCAL)*/*fromt_parttwhereobject_name='/7f6c264c_IIOPAddress'; OBJECT_IDOBJECT_NAME --------------------------------------------- 35031/7f6c264c_IIOPAddress 35030/7f6c264c_IIOPAddress SQL>select/*+index(tIDX_PART_GLOBAL_FULL)*/*fromt_parttwhereobject_id>35000;
select/*+index(tIDX_PART_GLOBAL_FULL)*/*fromt_parttwhereobject_id>35000
*
第1行出现错误:
ORA-01502:索引'SCOTT.IDX_PART_GLOBAL_FULL'或这类索引的分区处于不可用状态
当需要对分区表进行下面操作时,都会导致全局索引的失效。
ADD(HASH) COALESCE(HASH) DROP EXCHANGE MERGE MOVE SPLIT TRUNCATE
之后需要对失效索引进行重建,也可以在删除分区表的时候指定UPDATEINDEXES直接进行索引的重建。
以上就是本文关于oracle分区索引的失效和重建代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:oracle数据库启动阶段分析、oracle虚拟专用数据库详细介绍等,有什么问题可以直接留言,小编会及时回复大家的。感谢朋友们对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。