Oracle 表的移動和索引的重建

perfychi發表於2013-05-06

from:space.itpub.net/spacecp.php?action=spaceblogs&op=add

Oracle 表的移動和索引的重建

緣起一個表空間太大,刪除資料後由於檔案尾被用,無法resize,打算把所有表空間上的物件move到一個臨時儲存的表空間做整理。
move一個表到另外一個表空間時,索引不會跟著一起move,而且會失效。(LOB型別例外)表move,我們分為:
*普通表move
*分割槽表move
*LONG,LOB大欄位型別move來進行測試和說明。
索引的move,我們透過rebuild來實現
SQL> select * from v$version;
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE 9.2.0.6.0 Production
TNS for Solaris: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production
一:move普通表、索引基本語法:
alter table tab_name move tablespace tbs_name;
move過的普通表,在不用到失效的索引的操作語句中,語句執行正常,但如果操作的語句用到了索引(主鍵當做唯一索引),則此時報告用到
的索引失效,語句執行失敗,其他如外來鍵,非空約束,預設值等不會失效。
我們需要重新建立主鍵或索引,基本語法為:
alter index index_name rebuild;
alter index pk_name rebuild;
如果我們需要move索引,則使用rebuild語法:
alter index index_name rebuild tablespace tbs_name;
alter index pk_name rebuild tablespace tbs_name;
提示:查詢表所具有的索引,可以使用user_indexes檢視(索引和主鍵都在這個檢視裡可找到)。
二:move分割槽表及索引和普通表一樣,索引會失效,區別的僅僅是語法而已。
分割槽基本語法:特別提醒注意,如果是單級分割槽,則使用關鍵字PARTITION,如果是多級分割槽,則使用SUBPARTITION替代PARTITION。如果分割槽或分割槽索引比較大,可以使用並行move或rebuild,PARALLEL (DEGREE 2);如:
ALTER TABLE PART_ALARMTEXTDATA move SUBPARTITION ALARMTEXTDATA_050910_ATD01 TABLESPACE users PARALLEL (DEGREE 2);
ALTER INDEX GLOBAL_ALARMTEXTDATA REBUILD tablespace users PARALLEL (DEGREE 2);
ALTER INDEX LOCAL_ALARMTEXTDATA REBUILD SUBPARTITION ALARMTEXTDATA_050910_ATD01 TABLESPACE users PARALLEL (DEGREE 2);
移動表的某個分割槽:
================
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name;
重建全域性索引:
================
ALTER INDEX global_index REBUILD;或
ALTER INDEX global_index REBUILD tablespace tbs_name; ......

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-759882/,如需轉載,請註明出處,否則將追究法律責任。

相關文章