有關Oracle表分割槽進行(DML)維護後對索引的影響的分析
對索引的幾種情況分別進行總結:
1、如果刪除分割槽,則會導致該表下所有的索引狀態處於不可用狀態(除本地字首索引外);
2、如果重新命名錶,同上
3、如果truncate分割槽資料,同上;
4、重新命名分割槽,不會對索引產生任何影響。
解釋:
對於分割槽表,索引有以下幾種方式:
1、普通索引,與分割槽無關,就是平常的索引;
2、全域性分割槽索引,獨立於分割槽的索引,按照獨立的分割槽方式分割槽。按照網上介紹的和個人的實踐,這個方式查詢效率不高;
3、本地字首分割槽索引,即基於分割槽表的欄位進行的分割槽,建立方式很簡單,在普通索引建立的語句後面加個local即可,效率相對於普通索引高一點;
4、本地非字首分割槽索引,即非基於分割槽表的分割槽欄位,除非是特殊情況,這種方式效率較低,不推薦使用。
當索引處於不可用狀態時,資料將不能插入,會提示:ora-01502:state unusuable。
且這種情下,只要表中有一個索引處於不可用狀態,都會使表處於不可插入狀態。
可以修改引數來實現這種情況下的資料插入問題:alter session set skip_unusable_indexes=true;
但是有種情況除外,當有存在唯一主鍵索引時,資料依然不能插入。
而且主鍵索引也不能drop,因此想透過刪除主鍵索引再修改引數來實現資料的可插入是不可實現的。
因此這種情況下(索引狀態處於不可用狀態時)較好的辦法是,先刪除要進行本地索引分割槽的索引(此時尚未進行本地分割槽),
建立本地分割槽索引後,再drop表分割槽,這樣的好處是本來drop分割槽後需要重建n+1個索引,
現在只要重建n個索引,這樣的話就省去了重建這個索引的時間了。
對於本地分割槽字首索引,刪除分割槽只會對所在分割槽的部分產生影響,對於其他的部分則仍然是正常狀態的。
另:修改引數只能對於當前session所在的使用者有效,對於其他session,如果沒有設定該條件,資料還是處於不可插入狀態的。
以上情況,需要在實際的應用中充分考慮到這些問題才能最大的減少所帶來的資料丟失。
重新命名分割槽不會對索引狀態產生影響。
注:
1、如何刪除分割槽
alter table [table_name] drop partition [partition_name];
2、如何刪除與建立本地分割槽索引
刪除:drop index [index_name];
建立:create index [index_name] on [table_name]([index_column]) tablespace [tablespace_name] local [nologging/logging];
注意:
當在大表上建立索引時,使用NOLOGGING選項可以最小化重做記錄.使用NOLOGGING選項有以下優點.
節省重做日誌空間
降低索引建立實際
提高索引並行建立的效能.
但是nologging引數不建議在部署了dataguard的情況下使用,因為dataguard是基於歸檔日誌來進行遠端備份的。
3、如何重建索引:
alter index [index_name] rebuild [parallel {number}] [nologging/loggin];
4、如何建立分割槽:
--範圍分割槽
create table [table_name] partition by range([col_name])(
partition [part_name] values less than [range_value] tablespace [tablespace_name],
...
)
--列表分割槽
--hash分割槽
5、如何截斷分割槽:
alter table [table_name] truncate partition
延伸:truncate一個表或一個分割槽,能使HWM重至為0,而delete則不能。
6、如何重新命名分割槽:
alter table [table_name] rename partition [old_name] to [new_name];
7、如何查詢索引狀態:
select ind.table_name, ind.index_name, ind.status
from user_indexes ind
where ind.index_name = '[index_name]'
and ind.table_name = '[table_name]'
8、如何新增分割槽:
alter table [table_name] add partition [partition_name] values less than([range_value]).
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-264925/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響(1)索引
- oracle本地分割槽索引跨分割槽對成本的影響Oracle索引
- 分割槽表的不同操作對索引的影響索引
- 在範圍分割槽表上分割槽維護操作對全域性及本地索引狀態的影響(2)索引
- oracle分割槽表的常規操作導致對索引的影響Oracle索引
- 操作分割槽表對global和local索引的影響索引
- 關於 Oracle 分割槽索引的建立和維護Oracle索引
- oracle分割槽表的維護Oracle
- 【eygle】Oracle的分割槽表和Local索引建立與維護Oracle索引
- oracle點陣圖索引對DML操作的影響Oracle索引
- 【轉】Oracle分割槽表維護Oracle
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- Oracle分割槽表及分割槽索引Oracle索引
- oracle 針對普通表的索引分割槽及10g新增hash 索引分割槽Oracle索引
- 分割槽索引維護(add partition)索引
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- ORACLE分割槽表梳理系列(二)- 分割槽表日常維護及注意事項Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- 分割槽表的分割槽資料刪除、truncate會對全域性和區域性索引產生什麼影響索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 關於oracle的表空間,分割槽表,以及索引的總結Oracle索引
- oracle 分割槽表進行shrink操作Oracle
- 【Oracle】-【COMMIT對索引的影響】-從trace看COMMIT對索引的影響OracleMIT索引
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結(轉)Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結 -- 轉Oracle索引
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- ORACLE 分割槽索引UNUSABLE導致的DML操作失敗引起的血案Oracle索引
- 分割槽表並行建立索引並行索引
- 對oracle分割槽表的理解整理Oracle
- 測試oracle子分割槽維護Oracle
- 對列進行連線操作會影響索引的使用索引