เมื่อเรามี การ add/move/split ... อะไรก็ตามที่ กระทำให้ data มีการเปลี่ยน partitions indexes:
เราควรสนใจ option: "UPDATE GLOBAL INDEXES" with global "UPDATE INDEXES" with local
เราควรสนใจ option: "UPDATE GLOBAL INDEXES" with global "UPDATE INDEXES" with local
นี่เป็นตัวอย่าง คร่าวๆ กับ hash table + gloabal index
CREATE TABLE TEMP_PAR01
(no NUMBER,
data VARCHAR2 (50))
PARTITION BY HASH (no)
PARTITIONS 5;
CREATE INDEX temp01_global_par_idx ON temp_par01(no)
GLOBAL PARTITION BY hash(no)
PARTITIONS 5;
alter table temp_par01 add partition p6;
analyze table temp_par01 compute statistics;
ไม่พบ error ใดๆ ทั้งสิ้นเพราะยังไม่มีข้อมูล
ใส่ข้อมูลเพื่อทดสอบ:
begin
for x in 1 .. 1000
loop
insert into TEMP_PAR01 (no) values (x);
end loop;
end;
/
commit;
ลอง เพิ่ม partition อีกครั้ง
alter table temp_par01 add partition p7;
analyze table temp_par01 compute statistics;
analyze table temp_par01 compute statistics
*
ERROR at line 1:
ORA-01502: index 'SCOTT.TEMP01_GLOBAL_PAR_IDX' or partition of such index is in unusable state
พบว่า partitions indexes กลายเป็น unusable state
select partition_name, status from user_ind_partitions
where index_name='TEMP01_GLOBAL_PAR_IDX';
PARTITION_NAME STATUS
------------------------------ --------
SYS_P62 UNUSABLE
SYS_P63 UNUSABLE
SYS_P64 UNUSABLE
SYS_P65 UNUSABLE
SYS_P61 UNUSABLE
ดังนั้นลองใช้ "UPDATE GLOBAL INDEXES"
Use "UPDATE GLOBAL INDEXES" with global "UPDATE INDEXES" with local
alter table temp_par01 add partition p8 UPDATE GLOBAL INDEXES;
analyze table temp_par01 compute statistics;
ไม่เจอ error:
select partition_name, status from user_ind_partitions where index_name='TEMP01_GLOBAL_PAR_IDX';
PARTITION_NAME STATUS
------------------------------ --------
SYS_P62 USABLE
SYS_P63 USABLE
SYS_P64 USABLE
SYS_P65 USABLE
SYS_P61 USABLE
สรุปได้ว่า ขณะที่มีการ เพิ่ม partition tables ก็ได้มีการ update ที่ indexes ด้วย
ข้อดีตรงนี้ ช่วยให้เรามั่นใจ ได้ว่า indexes ที่้ใช้กลายเป็น unusable state
ข้อดีตรงนี้ ช่วยให้เรามั่นใจ ได้ว่า indexes ที่้ใช้กลายเป็น unusable state
อย่างไร เมื่อมีการกระทำกับ partitions tables อย่าลืม check status ของ partitions indexes ด้วย
ถ้าพบ unusable state ก็ทำการ rebuild partitions indexes นั้นๆไป
ALTER INDEX < index_name > REBUILD PARTITION < partition_name>