分區(qū)表中全局及本地分區(qū)索引什么時(shí)候會(huì)失效及如何處理final

這篇文章給大家介紹分區(qū)表中全局及本地分區(qū)索引什么時(shí)候會(huì)失效及如何處理final,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)服務(wù),我們努力開(kāi)拓更好的視野,通過(guò)不懈的努力,成都創(chuàng)新互聯(lián)公司贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),成都小程序開(kāi)發(fā),網(wǎng)站開(kāi)發(fā),技術(shù)開(kāi)發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫(kù)的技術(shù)開(kāi)發(fā)工程師。

分區(qū)表中 local 索引的維護(hù)會(huì)在oracle 操作表分區(qū)的時(shí)候自動(dòng)進(jìn)行,需要注意的是global 索引,當(dāng)global索引所在表執(zhí)行alter table 涉及下列操作時(shí),會(huì)導(dǎo)至該索引失效,需要重新建立:

? ADD PARTITION | SUBPARTITION
? COALESCE PARTITION | SUBPARTITION
? DROP PARTITION | SUBPARTITION
? EXCHANGE PARTITION | SUBPARTITION
? MERGE PARTITION | SUBPARTITION
? MOVE PARTITION | SUBPARTITION
? SPLIT PARTITION | SUBPARTITION
? TRUNCATE PARTITION | SUBPARTITION

因此,建議用戶在執(zhí)行上述操作sql 語(yǔ)句后附加update indexes 子句,oracle
即會(huì)自動(dòng)維護(hù)全局索引,當(dāng)然,需要注意這中間有一個(gè)平衡,你要平衡操作ddl 的
時(shí)間和重建索引哪個(gè)時(shí)間更少,以決定是否需要附加updateindexes 子句。

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

執(zhí)行alter table add partition 時(shí)未指定update indexes 子句:
a. 如果是range/list分區(qū),其local 索引和global 索引不會(huì)受影響;
b. 如果是hash 分區(qū),新加分區(qū)及有數(shù)據(jù)移動(dòng)的分區(qū)的local 索引和global索引會(huì)被
置為unuseable,需要重新編譯。

在執(zhí)行drop partition時(shí)如果沒(méi)有指定update indexes 子句,會(huì)導(dǎo)致glocal
索引的失效,對(duì)于local索引,刪除分區(qū)時(shí)對(duì)應(yīng)的索引分區(qū)會(huì)被同時(shí)刪除,且
它分區(qū)的local 索引不會(huì)受到影響。


在執(zhí)行split partition/subpartition 時(shí),如果沒(méi)有指定update indexes 子
句,都會(huì)造成local 和global 索引的失效。不過(guò)如果你split partition/
subpartition 的是個(gè)空分區(qū),或者沒(méi)有觸發(fā)任何數(shù)據(jù)移動(dòng)或變化,那么即使不加
update indexes,也不會(huì)影響到索引。當(dāng)然,保險(xiǎn)起見(jiàn),建議你還是執(zhí)行完之后,
查詢一下數(shù)據(jù)字典,確認(rèn)一下當(dāng)前索引的狀態(tài)。


下面簡(jiǎn)單測(cè)試一下:

1. 創(chuàng)建一個(gè)Range分區(qū)表:

CREATE TABLE DFMS.TEST04
PARTITION BY RANGE(OBJECT_ID)

  PARTITION P1 VALUES LESS THAN (2000)
    TABLESPACE LOG_DATA, 
  PARTITION P2 VALUES LESS THAN (8000)
    TABLESPACE LOG_DATA, 
  PARTITION P3 VALUES LESS THAN (20000)
    TABLESPACE LOG_DATA, 
  PARTITION P4 VALUES LESS THAN (40000)
    TABLESPACE LOG_DATA, 
  PARTITION PMAX VALUES LESS THAN (MAXVALUE)
    TABLESPACE LOG_DATA
)
AS
SELECT * FROM DBA_OBJECTS ;

2. 建立一個(gè)PK, 同時(shí)生成global index: 
alter table DFMS.TEST04 add constraint pk_id primary key(object_id); 

建立一個(gè)local index :
CREATE INDEX DFMS.IDX1_TEST04 ON DFMS.TEST04
(OBJECT_NAME)  LOCAL ;

3. 我們通過(guò)dba_indexes視圖查看global index的狀態(tài)發(fā)現(xiàn)是valid : 
select index_name, status, last_analyzed,partitioned
from dba_indexes where index_name='PK_ID' ;

本地索引local index通過(guò)dba_indexes查看的狀態(tài)是N/A, 需要通過(guò)
dba_ind_partitions來(lái)查看,可以看到每個(gè)索引分區(qū)都是USABLE狀態(tài)。
而通過(guò)DBA_PART_INDEXES可以看到這個(gè)本地分區(qū)索引的整體狀態(tài)。

select * from dba_ind_partitions where index_name='IDX1_TEST04' ;
select * from dba_indexes where index_name='IDX1_TEST04' ;
select * from DBA_PART_INDEXES where index_name='IDX1_TEST04' ;

4. 因?yàn)榇嬖趍axvalue,我們先測(cè)試split對(duì)全局及本地索引的影響 .

4.1 新分區(qū)中都有數(shù)據(jù)的情況

alter table test04 split partition pmax at (80000) into 
(partition p5 tablespace log_data ,
 partition pmax  tablespace log_data); 

我們從table的腳本可以看出pmax被分成p5和pmax兩部分 :

....
  PARTITION P5 VALUES LESS THAN (80000), 
  PARTITION PMAX VALUES LESS THAN (MAXVALUE) ;
.....


顯然由于select max(object_id) from TEST04 的行數(shù)是101769,split
后舊分區(qū)中符合less than 80000的留在了第一個(gè)分區(qū)p5,其他的都存在
了第二個(gè)分區(qū)(新的pmax分區(qū))。

我們查詢global index及l(fā)ocal index的狀態(tài):

select index_name, status, last_analyzed,partitioned
from dba_indexes where index_name='PK_ID' ; 

這里顯然觸發(fā)了數(shù)據(jù)的移動(dòng),global index索引狀態(tài)變成UNUSABLE.

select * from dba_ind_partitions where index_name='IDX1_TEST04' ;

因?yàn)樾聅plit出來(lái)的分區(qū)(這里指p5)中有數(shù)據(jù),原pmax中的數(shù)據(jù)被拆分到
新分區(qū)p5及新的pmax中,發(fā)現(xiàn)p1,p2,p3,p4 對(duì)應(yīng)的本地索引仍然是USABLE,
而新的p5及新pmax對(duì)應(yīng)的本地索引都是UNUSABLE. 

OK, 我們對(duì)global index及p5,pmax對(duì)應(yīng)的本地分區(qū)索引進(jìn)行rebuild :

alter index PK_ID rebuild online; 

然后查詢發(fā)現(xiàn)global index變成valid :
select index_name, status, last_analyzed,partitioned
from dba_indexes where index_name='PK_ID' ; 

alter index IDX1_TEST04 rebuild partition p5 online; 
alter index IDX1_TEST04 rebuild partition pmax online;  
執(zhí)行之后查詢:
select * from dba_ind_partitions where index_name='IDX1_TEST04' ;
可以看到兩個(gè)索引分區(qū)p5及pmax狀態(tài)都變成USABLE .

4.2 新分區(qū)中有一個(gè)沒(méi)有數(shù)據(jù)

TEST04 的行數(shù)是101769,那么我們將p6新分區(qū)設(shè)置為110000,那么pmax分區(qū)
顯然就沒(méi)有數(shù)據(jù)了。

alter table test04 split partition pmax at (110000) into 
(partition p6 tablespace log_data , partition pmax  tablespace log_data); 

查看global index及l(fā)ocal index可以看到全局索引及每個(gè)本地索引分區(qū)都是
USABLE, 這是因?yàn)闆](méi)有觸發(fā)數(shù)據(jù)移動(dòng) 。
select index_name, status, last_analyzed,partitioned from dba_indexes where index_name='PK_ID' ;
select * from dba_ind_partitions where index_name='IDX1_TEST04' ;

備注:在split pmax分區(qū)時(shí)新的分區(qū)名稱可以隨便起(不一定含有pmax),比如上面
的可以使用p6,p7, 只是p6會(huì)遵循less than 110000, 而第二個(gè)分區(qū)p7仍然是less
than maxvalue. 

 還有因?yàn)檫@里是表空間沒(méi)有變化,如果非空的分區(qū)存儲(chǔ)屬性和原來(lái)的存儲(chǔ)屬性不一樣,也會(huì)發(fā)生數(shù)據(jù)移動(dòng),也會(huì)導(dǎo)致索引失效。

5. 測(cè)試drop partition對(duì)全局及本地索引的影響。

對(duì)test04表的最后一個(gè)沒(méi)有數(shù)據(jù)的pmax分區(qū)進(jìn)行刪除動(dòng)作。
alter table test04 drop partition pmax ; 

因?yàn)閯h除的分區(qū)沒(méi)有數(shù)據(jù),所以不涉及數(shù)據(jù)變化,所以對(duì)全局及本地所以
都沒(méi)有影響 。

假設(shè)我們要?jiǎng)h除有數(shù)據(jù)的部分,既不保留分區(qū)也不保留數(shù)據(jù),那么本地索引
不會(huì)受到影響,global index會(huì)失效。
alter table test04 drop partition p6 ; 
查詢
select * from dba_indexes where index_name='PK_ID' ;
全局索引失效,狀態(tài)變成UNUSABLE .
select * from dba_ind_partitions where index_name='IDX1_TEST04' ;
本地索引(其他分區(qū))狀態(tài)不變,為USABLE .


6. 測(cè)試add partition 對(duì)全局索引和本地索引的影響。
alter table test04 add partition p6  values less than (120000) ;
查詢狀態(tài):
select * from dba_indexes where index_name='PK_ID' ;
select * from dba_ind_partitions where index_name='IDX1_TEST04' ;
發(fā)現(xiàn)Range分區(qū),加入分區(qū)對(duì)于全局及本地索引都沒(méi)有影響。
同樣測(cè)試list分區(qū),也可以知道加入分區(qū)對(duì)于全局及本地索引都沒(méi)有影響。
這主要是因?yàn)闆](méi)有觸發(fā)數(shù)據(jù)的移動(dòng)。

對(duì)于Hash分區(qū),由于add parittion會(huì)發(fā)生數(shù)據(jù)分布平衡的I/O操作,數(shù)據(jù)
會(huì)發(fā)生移動(dòng),所以本地分區(qū)索引及全局索引都會(huì)置為UNUSABLE, 需rebuild.
下面做簡(jiǎn)單測(cè)試:


CREATE TABLE DFMS.TEST05
PARTITION BY HASH (OBJECT_ID)
PARTITIONS 8
STORE IN (LOG_DATA)
AS SELECT * FROM DBA_OBJECTS ; 

加入global及l(fā)ocal index .
alter table DFMS.TEST05 add constraint pk_test05_id primary key(object_id); 
CREATE INDEX DFMS.IDX1_TEST05 ON DFMS.TEST05 (OBJECT_NAME)  LOCAL ;

加入新分區(qū):
alter table test05 add partition ; 

查詢
select * from dba_indexes where index_name='PK_TEST05_ID' ;
select * from dba_ind_partitions where index_name='IDX1_TEST05' ;
發(fā)現(xiàn)global index是UNUSABLE狀態(tài),本地分區(qū)索引中的第一個(gè)和最后一個(gè)
分區(qū)的本地分區(qū)索引是UNUSABLE狀態(tài),其它是USABLE. 顯然因?yàn)閿?shù)據(jù)從第一
個(gè)分區(qū)被拆分到了新的hasn分區(qū),所以這兩個(gè)分區(qū)中的數(shù)據(jù)發(fā)生了移動(dòng),
導(dǎo)致了本地分區(qū)索引的失效,因?yàn)橛袛?shù)據(jù)行的移動(dòng),當(dāng)然global index也
變成了失效狀態(tài)(UNUSABLE) .  


7. 測(cè)試truncate partition 對(duì)全局索引和本地索引的影響。


Truncate partition 就像truncate table 一樣,直接從頭部截?cái)鄶?shù)據(jù)。在不指
定update indexes 子句的情況下,truncate partition 也會(huì)造成分區(qū)所在表的
global 索引失效。語(yǔ)法非常簡(jiǎn)單:
alter table tbname truncate partition/subpartition ptname;

alter table test04 truncate partition p6 ;
查詢
select * from dba_indexes where index_name='PK_ID' ;
select * from dba_ind_partitions where index_name='IDX1_TEST04' ;
發(fā)現(xiàn)global index索引失效,本地分區(qū)索引狀態(tài)都是USABLE .

8. 其他操作如 Merge Partitions,Exchange Partitions及coalesce partitions
等較少使用,這里不做測(cè)試。 

其實(shí)總之,如果發(fā)生數(shù)據(jù)移動(dòng),那么索引肯定是需要注意的。

關(guān)于分區(qū)表中全局及本地分區(qū)索引什么時(shí)候會(huì)失效及如何處理final就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:分區(qū)表中全局及本地分區(qū)索引什么時(shí)候會(huì)失效及如何處理final
分享地址:http://bm7419.com/article12/pceogc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航靜態(tài)網(wǎng)站、微信公眾號(hào)、服務(wù)器托管、企業(yè)建站網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管