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

PolarDB:ALTER TABLE DROP SUBPARTITION

最終更新日:Mar 11, 2026

コンポジット・パーティションテーブルからサブパーティションとそのデータを削除します。この操作により、サブパーティションのデータは完全に削除されます。このステートメントを実行する前に、データがバックアップされているか、または不要であることを確認してください。

概要

ALTER TABLE table_name DROP SUBPARTITION subpartition_name;

パラメータ

パラメータ

必須

説明

table_name

はい

削除するサブパーティションを含むコンポジット・パーティションテーブルの名前。

customer_data

subpartition_name

はい

削除するサブパーティションの名前。

p_2022_asia

注意事項

  • このコマンドを実行するには、テーブルオーナーまたは特権ユーザーである必要があります。

  • テーブル内の最後のサブパーティションを削除することはできません。

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

この例では、2022年のアジア リージョンのユーザー データ用サブパーティションを削除して、ストレージ容量を解放します。customer_data テーブルは、コンポジット・パーティション済みテーブルであり、登録年によるパーティショニング(レンジ・パーティショニング)とリージョンによるサブパーティショニング(リスト・サブパーティショニング)が行われています。

環境の準備

このステップでは、customer_data という名前のコンポジット・パーティションテーブルを作成します。このテーブルは、登録年で範囲パーティション化され、ユーザーリージョンでリストサブパーティション化されています。

-- コンポジット・パーティションテーブルを作成します
CREATE TABLE customer_data (
    customer_id  INT NOT NULL,
    region       VARCHAR2(10),
    reg_date     DATE
)
PARTITION BY RANGE (reg_date)
SUBPARTITION BY LIST (region)
(
    PARTITION p_2022 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD'))
    (
        SUBPARTITION p_2022_asia    VALUES ('Asia'),
        SUBPARTITION p_2022_europe  VALUES ('Europe')
    ),
    PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD'))
    (
        SUBPARTITION p_2023_asia    VALUES ('Asia'),
        SUBPARTITION p_2023_europe  VALUES ('Europe')
    )
);

-- データを挿入します
INSERT INTO customer_data VALUES (101, 'Asia', TO_DATE('2022-06-10', 'YYYY-MM-DD'));
INSERT INTO customer_data VALUES (102, 'Europe', TO_DATE('2022-07-20', 'YYYY-MM-DD'));
INSERT INTO customer_data VALUES (103, 'Asia', TO_DATE('2023-06-10', 'YYYY-MM-DD'));
INSERT INTO customer_data VALUES (104, 'Europe', TO_DATE('2023-07-20', 'YYYY-MM-DD'));

事前チェックの実行

サブパーティションを削除する前に、そのデータをバックアップし、存在することを確認してください。

-- 重要: サブパーティションを削除する前に、関連するデータがバックアップされていることを確認してください。

-- サブパーティション構造をチェックして、p_2022_asia サブパーティションが存在することを確認します。
SELECT SUBPARTITION_NAME 
FROM USER_TAB_SUBPARTITIONS 
WHERE TABLE_NAME = 'CUSTOMER_DATA';

コマンドの実行

DROP SUBPARTITION コマンドを実行して、p_2022_asia サブパーティションを削除します。

ALTER TABLE customer_data DROP SUBPARTITION p_2022_asia;

結果の検証

  1. サブパーティションとそのデータが削除されたことを確認します。

    -- 構造の検証: サブパーティションが削除されたことを確認します。
    SELECT SUBPARTITION_NAME FROM USER_TAB_SUBPARTITIONS 
    WHERE TABLE_NAME = 'CUSTOMER_DATA';
    -- クエリ結果に p_2022_asia が含まれなくなります。
    
    -- データの検証: サブパーティション内のデータが削除されたことを確認します。
    SELECT COUNT(*) FROM customer_data WHERE customer_id = 101;
    -- クエリ結果は 0 です。
  2. テーブル統計の更新。

    サブパーティションを削除した後、クエリ オプティマイザーが正確な実行計画を生成するように、テーブルの統計を直ちに更新してください。

    ANALYZE CUSTOMER_DATA;

よくある質問

Q1: なぜ ORA-00942: テーブルまたはビューが存在しませんエラーが発生するのですか?

A: このエラーは通常、対象テーブルに対する ALTER 権限が不足している場合、またはテーブル名やスキーマ名にスペルミスがある場合に発生します。権限設定を確認し、オブジェクト名が正しいことを確認してください。

Q2: ORA-14006: invalid partition name エラーはなぜ発生するのですか?
A: このエラーは、指定されたサブパーティション名が存在しないか、スペルに誤りがあることを示します。ALL_TAB_SUBPARTITIONS ビューを照会して、正しい名前を確認してください。名前がダブルクォーテーションで囲まれていない場合、データベースは照合のために名前を大文字に変換します。

Q3: なぜ ORA-01031: insufficient privileges エラーが発生するのですか?
A: 対象テーブルに対する ALTER 権限がありません。必要な権限を付与するために、データベース管理者に連絡してください。

Q4: DROP SUBPARTITION を実行した後、データを回復できますか?
A: いいえ。DROP SUBPARTITION は、ごみ箱をバイパスする永続的な削除です。データを回復する唯一の方法は、操作前に作成されたデータベースバックアップから復元することです。

関連 SQL ステートメント