全部產品
Search
文件中心

PolarDB:ALTER TABLE…RENAME PARTITION

更新時間:Oct 24, 2025

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;

參數說明

參數名稱

參數要求

參數說明

參數樣本

table_name

必填

目標資料分割表的名稱。

customer_data

old_name

必填

要重新命名現有分區或子分區的名稱。

sp_asia

new_name

必填

為分區或子分區指定的新名稱。

sp_2023_asia

注意事項

  • 執行此命令的使用者需是該表的所有者,或擁有對該表的ALTER許可權。

  • MOVE PARTITION會擷取目標資料分割的AccessExclusiveLock鎖,在鎖持有期間,所有對該分區的DDLDML操作將被阻塞,建議在業務低峰期執行。

  • 新分區/子分區名稱在表內必須唯一,不能與現有分區或子分區名稱衝突。

  • 此命令是DDL操作,執行後自動認可,無法復原。如需撤銷,需要再次執行RENAME操作將名稱改回。

  • 如果應用程式代碼、預存程序或視圖中寫入程式碼了舊的分區名,重新命名後將導致這些對象執行失敗。執行重新命名之前,建議進行全面的影響分析並同步更新所有依賴對象。

使用樣本

本樣本示範如何將一個複合分區表 customer_data 中的子分區 sp_asia 重新命名為 sp_2023_asia,以符合按年份和地區命名的規範。

環境準備

本步驟將建立一個 RANGE-LIST 複合分區表 customer_data 並插入資料。

-- 建立複合分區表
CREATE TABLE customer_data (
    customer_id INT, region VARCHAR2(20), reg_date DATE
)
PARTITION BY RANGE (reg_date)
SUBPARTITION BY LIST (region) (
    PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')) (
        SUBPARTITION sp_asia VALUES ('Asia'),
        SUBPARTITION sp_2023_europe VALUES ('Europe')
    )
);

前置檢查

檢查待重新命名的子分區是否存在。

-- 確認舊子分區 sp_asia 存在
SELECT SUBPARTITION_NAME FROM USER_TAB_SUBPARTITIONS 
WHERE TABLE_NAME = 'CUSTOMER_DATA';

執行操作

執行 RENAME SUBPARTITION 命令,將子分區 sp_asia 重新命名為 sp_2023_asia

ALTER TABLE customer_data RENAME SUBPARTITION sp_asia TO sp_2023_asia;

結果驗證

驗證子分區名稱已更新。

-- 結構驗證:確認子分區名稱已更新
SELECT SUBPARTITION_NAME FROM USER_TAB_SUBPARTITIONS 
WHERE TABLE_NAME = 'CUSTOMER_DATA';
-- 查詢結果中應包含 sp_2023_asia,不包含 sp_asia

常見問題

Q1:執行時報錯 ORA-14078: partition name is already in use
這是因為您指定的新名稱 new_name 已經被該表中的另一個分區或子分區使用,需要更換一個在表內唯一的名稱。

Q2:執行時報錯 ORA-14076: partition name must be specified
這是因為您指定的舊名稱 old_name 不存在,請通過前置檢查核對正確的名稱。

Q3:重新命名分區後,之前引用該分區的程式或指令碼無法工作了,為什嗎?
這是因為程式或指令碼中寫入程式碼了舊的分區名稱,重新命名後需要同步修改所有顯式引用舊名稱的代碼,將其更新為新名稱。

相關語句