oracle删表分区同时维护索引,有关Oracle表分区进行(DML)维护后对索引的影响的分析...
對(duì)索引的幾種情況分別進(jìn)行總結(jié):1、如果刪除分區(qū),則會(huì)導(dǎo)致該表下所有的索引狀態(tài)處于不可用狀態(tài)(除本地前綴索引外);2、如果重命名表,同上3、如果truncate分區(qū)數(shù)據(jù),同上;4、重命名分區(qū),不會(huì)對(duì)索引產(chǎn)生任何影響。解釋:對(duì)于分區(qū)表,索引有以下幾種方式:1、普通索引,與分區(qū)無關(guān),就是平常的索引;2、全局分區(qū)索引,獨(dú)立于分區(qū)的索引,按照獨(dú)立的分區(qū)方式分區(qū)。按照網(wǎng)上介紹的和個(gè)人的實(shí)踐,這個(gè)方式查詢效率不高;3、本地前綴分區(qū)索引,即基于分區(qū)表的字段進(jìn)行的分區(qū),創(chuàng)建方式很簡單,在普通索引建立的語句后面加個(gè)local即可,??? 效率相對(duì)于普通索引高一點(diǎn);4、本地非前綴分區(qū)索引,即非基于分區(qū)表的分區(qū)字段,除非是特殊情況,這種方式效率較低,不推薦使用。當(dāng)索引處于不可用狀態(tài)時(shí),數(shù)據(jù)將不能插入,會(huì)提示:ora-01502:state unusuable。且這種情下,只要表中有一個(gè)索引處于不可用狀態(tài),都會(huì)使表處于不可插入狀態(tài)。可以修改參數(shù)來實(shí)現(xiàn)這種情況下的數(shù)據(jù)插入問題:alter session set skip_unusable_indexes=true;但是有種情況除外,當(dāng)有存在唯一主鍵索引時(shí),數(shù)據(jù)依然不能插入。而且主鍵索引也不能drop,因此想通過刪除主鍵索引再修改參數(shù)來實(shí)現(xiàn)數(shù)據(jù)的可插入是不可實(shí)現(xiàn)的。因此這種情況下(索引狀態(tài)處于不可用狀態(tài)時(shí))較好的辦法是,先刪除要進(jìn)行本地索引分區(qū)的索引(此時(shí)尚未進(jìn)行本地分區(qū)),創(chuàng)建本地分區(qū)索引后,再drop表分區(qū),這樣的好處是本來drop分區(qū)后需要重建n+1個(gè)索引,現(xiàn)在只要重建n個(gè)索引,這樣的話就省去了重建這個(gè)索引的時(shí)間了。對(duì)于本地分區(qū)前綴索引,刪除分區(qū)只會(huì)對(duì)所在分區(qū)的部分產(chǎn)生影響,對(duì)于其他的部分則仍然是正常狀態(tài)的。另:修改參數(shù)只能對(duì)于當(dāng)前session所在的用戶有效,對(duì)于其他session,如果沒有設(shè)置該條件,數(shù)據(jù)還是處于不可插入狀態(tài)的。以上情況,需要在實(shí)際的應(yīng)用中充分考慮到這些問題才能最大的減少所帶來的數(shù)據(jù)丟失。重命名分區(qū)不會(huì)對(duì)索引狀態(tài)產(chǎn)生影響。注:1、如何刪除分區(qū)alter table [table_name] drop partition [partition_name];2、如何刪除與創(chuàng)建本地分區(qū)索引刪除:drop index [index_name];創(chuàng)建:create index [index_name] on [table_name]([index_column]) tablespace [tablespace_name] local [nologging/logging];注意:當(dāng)在大表上建立索引時(shí),使用NOLOGGING選項(xiàng)可以最小化重做記錄.使用NOLOGGING選項(xiàng)有以下優(yōu)點(diǎn).節(jié)省重做日志空間降低索引建立實(shí)際提高索引并行建立的性能.但是nologging參數(shù)不建議在部署了dataguard的情況下使用,因?yàn)閐ataguard是基于歸檔日志來進(jìn)行遠(yuǎn)程備份的。3、如何重建索引:alter index [index_name] rebuild [parallel {number}] [nologging/loggin];4、如何創(chuàng)建分區(qū):--范圍分區(qū)create table [table_name] partition by range([col_name])(partition [part_name] values less than [range_value] tablespace [tablespace_name],...)--列表分區(qū)--hash分區(qū)5、如何截?cái)喾謪^(qū):alter table [table_name] truncate partition延伸:truncate一個(gè)表或一個(gè)分區(qū),能使HWM重至為0,而delete則不能。6、如何重命名分區(qū):alter table [table_name] rename partition [old_name] to [new_name];7、如何查詢索引狀態(tài):select ind.table_name, ind.index_name, ind.statusfrom user_indexes indwhere ind.index_name = '[index_name]'and ind.table_name = '[table_name]'8、如何添加分區(qū):alter table [table_name] add partition [partition_name] values less than([range_value]).
總結(jié)
以上是生活随笔為你收集整理的oracle删表分区同时维护索引,有关Oracle表分区进行(DML)维护后对索引的影响的分析...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农行刷卡金是什么意思呢
- 下一篇: 启动oracle00119,oracle