炼数成金 门户 大数据 Oracle 查看内容

在Oracle数据库中,哪些操作会导致索引失效?

2018-2-2 15:50| 发布者: 炼数成金_小数| 查看: 22284| 评论: 0|原作者: 李华荣|来自: DBA宝典

摘要: 当某些操作导致数据行的ROWID改变,索引就会完全失效。可以分普通表和分区表来讨论哪些操作将导致索引失效。在SQL*Loader加载过程中会维护索引,由于数据量比较大,在SQL*Loader加载过程中出现异常情况,也会导致Ora ...

数据库 SQL Hadoop Oracle 培训

题目
 在Oracle数据库中,哪些操作会导致索引失效?

A答案

当某些操作导致数据行的ROWID改变,索引就会完全失效。可以分普通表和分区表来讨论哪些操作将导致索引失效。
(一)普通表索引失效的情形如下所示:
① 手动置索引无效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。
② 如果对表进行MOVE操作(包含移动表空间和压缩操作)或在线重定义表后,那么该表上所有的索引状态会变为UNUSABLE。MOVE操作的SQL语句为:ALTER TABLE TT MOVE;。
③ SQL*Loader加载数据。
在SQL*Loader加载过程中会维护索引,由于数据量比较大,在SQL*Loader加载过程中出现异常情况,也会导致Oracle来不及维护索引,导致索引处于失效状态,影响查询和加载。异常情况主要有:在加载过程中杀掉SQL*Loader进程、重启或表空间不足等。
(二)分区表索引失效的情形如下所示:
① 对分区表的某个含有数据的分区执行了TRUNCATE、DROP操作可以导致该分区表的全局索引失效,而分区索引依然有效,如果操作的分区没有数据,那么不会影响索引的状态。需要注意的是,对分区表的ADD操作对分区索引和全局索引没有影响。
② 执行EXCHANGE操作后,全局索引和分区索引都无条件地会被置为UNUSABLE(无论分区是否含有数据)。但是,若包含INCLUDING INDEXES子句(缺省情况下为EXCLUDING INDEXES),则全局索引会失效,而分区索引依然有效。
③ 如果执行SPLIT的目标分区含有数据,那么在执行SPLIT操作后,全局索引和分区索引都会被被置为UNUSABLE。如果执行SPLIT的目标分区没有数据,那么不会影响索引的状态。
④ 对分区表执行MOVE操作后,全局索引和分区索引都会被置于无效状态。
④ 手动置其无效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。
对于分区表而言,除了ADD操作之外,TRUNCATE、DROP、EXCHANGE和SPLIT操作均会导致全局索引失效,但是可以加上UPDATE GLOBAL INDEXES子句让全局索引不失效。重建分区索引的命令为:ALTER INDEX IDX_RANG_LHR REBUILD PARTITION P1;。

分区表的索引是否失效情况如下表所示:


DB笔试面试历史连接
http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-5-24 08:07 , Processed in 0.189926 second(s), 25 queries .