すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ALTER TABLE RENAME PARTITION

最終更新日:Oct 24, 2025

パーティションまたはサブパーティションの名前を変更します。これはメタデータのみの操作ですが、古い名前を参照するスクリプトを無効にする可能性があります。このコマンドを実行する前に、新しい名前が一意であることを確認し、依存するコードをチェックしてください。

概要

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 権限を持っている必要があります。

  • RENAME PARTITION は、ターゲットパーティションに対してテーブルレベルの排他ロック AccessExclusiveLock を取得します。このロックは、テーブルに対するすべてのデータ操作言語 (DML) およびほとんどのデータ定義言語 (DDL) 操作をブロックします。この文はオフピーク時に実行し、テーブルに対する他の重大な操作をブロックしないように、完了するのに十分な時間を確保してください。

  • 新しいパーティションまたはサブパーティションの名前は、テーブル内で一意である必要があります。

  • 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: パーティションの名前を変更した後、それを参照するアプリケーションやスクリプトが動作しなくなるのはなぜですか?
これは、アプリケーションやスクリプトが古いパーティション名をハードコーディングしている場合に発生します。そのような参照をすべて更新して、新しい名前を使用する必要があります。

関連する SQL 文