ORA-14257: cannot move partition other than a Range or Hash partition

dcswinner發表於2012-11-22

對於經常有delete,insert 的表來說,其對應索引應該經常重建,以減小索引的大小,提高資料庫的效能。

寫了一個sql:

SELECT 'alter index '||t.index_name||' rebuild partition '||t.partition_name||';'
  FROM user_ind_partitions t WHERE t.index_name='IDX2_EVT_BAG_MAIL_RELA_SEA_T'
AND t.partition_name

將拼出來的sql執行對索引經常重建報:

ORA-14257: cannot move partition other than a Range or Hash partition

發現原來此表是前幾個月建的符合分割槽表,分割槽是按照range分割槽,子分割槽是hash分割槽。

因此這種寫法是有問題的,應該直接重建子分割槽,重新調整上面的sql:

SELECT 'alter index '||t.index_name||' rebuild subpartition '||t.subpartition_name||';'
  FROM user_ind_subpartitions t WHERE t.index_name='IDX2_EVT_BAG_MAIL_RELA_SEA_T'
AND t.partition_name


SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16612;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16613;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16614;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16615;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16616;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16617;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16618;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16619;
 
Index altered
SQL> alter index IDX2_EVT_BAG_MAIL_RELA_SEA_T rebuild subpartition SYS_SUBP16620;

重建成功!

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

相關文章