關於 Oracle 分割槽索引的失效和重建

2021-09-30 16:40:24 字數 3659 閱讀 6687

–建立測試表

sql> create table t as select object_id,object_name from dba_objects;

表已建立。

sql> select min(object_id),max(object_id) from t;

min(object_id) max(object_id)

-------------- --------------

2          76083

sql> create table t_part(object_id int,object_name varchar2(1000)) partition by range(object_id)

2  (

3  partition p1 values less than (10000),

4  partition p2 values less than (20000),

5  partition p3 values less than (30000),

6  partition p4 values less than (40000),

7  partition pm values less than (maxvalue));

表已建立。

sql> insert into t_part select * from t;

已建立72663行。

sql> commit;

–建立本地分割槽索引

sql> create index idx_part_local on t_part(object_name) local;

索引已建立。

–建立全域性非分割槽索引

sql> create index idx_part_global on t_part(object_id) global;

索引已建立。

–刪除其中乙個分割槽

sql> alter table t_part drop partition p1;

表已更改。

–全域性非分割槽索引失效,本地分割槽索引沒有失效

sql> select status,index_name from user_indexes s where index_name=『idx_part_global』;

status   index_name

-------- ------------------------------

unusableidx_part_global

sql> select status,index_name from user_ind_partitions s where index_name=『idx_part_local』;

status   index_name

-------- ------------------------------

usableidx_part_local

usableidx_part_local

usableidx_part_local

usableidx_part_local

–重建失效索引

sql> alter index idx_part_global rebuild;

索引已更改。

–在刪除表分割槽的時候,可以通過以下命令進行索引重建

alter table t_part drop partition p2 update indexes;

–建立全域性分割槽索引

sql> drop index idx_part_global;

索引已刪除。

sql> create index idx_part_global_full on t_part (object_id)

2     global partition by range (object_id)

3        (partition p1 values less than (10000),

4         partition p2 values less than (30000),

5         partition p3 values less than (maxvalue));

索引已建立。

–刪除其中乙個分割槽

sql> alter table t_part drop partition p3;

表已更改。

–全域性分割槽索引失效

sql> select status,index_name from user_ind_partitions s where index_name=『idx_part_global_full』;

status   index_name

-------- ------------------------------

unusableidx_part_global_full

unusableidx_part_global_full

unusableidx_part_global_full

sql> select /+index(t idx_part_local)/ * from t_part t where object_name = 『/7f6c264c_iiopaddress』;

object_id object_name

---------- -----------------------------------

35031 /7f6c264c_iiopaddress

35030 /7f6c264c_iiopaddress

sql> select /+index(t idx_part_global_full)/ * from t_part t where object_id > 35000;

select /+index(t idx_part_global_full)/ * from t_part t where object_id > 35000

*第 1 行出現錯誤:

ora-01502: 索引 『scott.idx_part_global_full』 或這類索引的分割槽處於不可用狀態

當需要對分割槽表進行下面操作時,都會導致全域性索引的失效。

add (hash) 

coalesce (hash)

drop

exchange

merge

move

split

truncate

之後需要對失效索引進行重建,也可以在刪除分割槽表的時候指定 update indexes 直接進行索引的重建。

Oracle 分割槽表中索引失效

當對分割槽表進行 一些操作時,會造成索引失效。當有truncate drop exchange 操作分割槽 時全域性索引 會失效。exchange 的臨時表沒有索引,或者 有索引,沒有用including indexes的關鍵字,會導致區域性的索引失效,就是某個分割槽失效 重建區域性索引只能用alt...

Oracle分割槽索引

表可以按 range hash list 分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,oracle 對於分割槽表上的索引分為 2類,即區域性索引和全域性索引,下面分別對這 2種索引的特點和侷限性做個總結。1.區域性索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽...

oracle分割槽索引

前兩天做乙個大的分割槽表的資料清理,split 分割槽後,忘記rebuild 索引,導致生產庫查詢的分割槽表非常的緩慢 對分割槽表某個分割槽做split 如果沒有在alter table 語句最後加上update indexes,被 出的兩個分割槽的本地索引和整個表的全域性索引都會失效。當根據索引字...