ALTER TABLE ... RENAME PARTITION/SUBPARTITION 用於重新命名分區或子分區,此操作僅修改中繼資料,但會使依賴舊名稱的指令碼失效,執行前需確認新名稱唯一併排查代碼依賴。
文法介紹
ALTER TABLE table_name RENAME PARTITION old_name TO new_name;
ALTER TABLE table_name RENAME SUBPARTITION old_name TO new_name;參數說明
參數名稱 | 參數要求 | 參數說明 | 參數樣本 |
| 必填 | 目標資料分割表的名稱。 |
|
| 必填 | 要重新命名現有分區或子分區的名稱。 |
|
| 必填 | 為分區或子分區指定的新名稱。 |
|
注意事項
執行此命令的使用者需是該表的所有者,或擁有對該表的
ALTER許可權。MOVE PARTITION會擷取目標資料分割的AccessExclusiveLock鎖,在鎖持有期間,所有對該分區的DDL和DML操作將被阻塞,建議在業務低峰期執行。新分區/子分區名稱在表內必須唯一,不能與現有分區或子分區名稱衝突。
此命令是
DDL操作,執行後自動認可,無法復原。如需撤銷,需要再次執行RENAME操作將名稱改回。如果應用程式代碼、預存程序或視圖中寫入程式碼了舊的分區名,重新命名後將導致這些對象執行失敗。執行重新命名之前,建議進行全面的影響分析並同步更新所有依賴對象。
使用樣本
本樣本示範如何將一個複合分區表 customer_data 中的子分區 sp_asia 重新命名為 sp_2023_asia,以符合按年份和地區命名的規範。
環境準備
前置檢查
執行操作
結果驗證
常見問題
Q1:執行時報錯 ORA-14078: partition name is already in use?
這是因為您指定的新名稱 new_name 已經被該表中的另一個分區或子分區使用,需要更換一個在表內唯一的名稱。
Q2:執行時報錯 ORA-14076: partition name must be specified?
這是因為您指定的舊名稱 old_name 不存在,請通過前置檢查核對正確的名稱。
Q3:重新命名分區後,之前引用該分區的程式或指令碼無法工作了,為什嗎?
這是因為程式或指令碼中寫入程式碼了舊的分區名稱,重新命名後需要同步修改所有顯式引用舊名稱的代碼,將其更新為新名稱。
相關語句
ALTER TABLE…ADD PARTITION:為分區表添加新的分區。
ALTER TABLE…MERGE PARTITION:合并兩個相鄰的分區為一個分區。
ALTER TABLE…SPLIT PARTITION:將一個分區拆分為兩個分區。
ALTER TABLE…DROP PARTITION:刪除分區表中的指定分區。