Todos os produtos
Search
Central de documentação

PolarDB:ALTER TABLE DROP SUBPARTITION

Última atualização: Jun 28, 2026

Remove permanentemente uma subpartição e seus dados de uma tabela com particionamento composto. Faça backup dos dados antes de executar esta instrução.

Sinopse

ALTER TABLE table_name DROP SUBPARTITION subpartition_name;

Parâmetros

Parâmetro

Obrigatório

Descrição

Exemplo

table_name

Sim

Tabela com particionamento composto que contém a subpartição a ser removida.

customer_data

subpartition_name

Sim

Subpartição a ser removida.

p_2022_asia

Observações

  • Você deve ser o proprietário da tabela ou um usuário privilegiado para executar este comando.

  • Não é possível remover a última subpartição de uma tabela.

  • A instrução DROP SUBPARTITION adquire um bloqueio exclusivo no nível da tabela (AccessExclusiveLock). Esse bloqueio impede todas as operações DML e a maioria das operações DDL na tabela. Execute esta instrução em horários de baixa demanda para evitar o bloqueio de outras operações.

Exemplos

Este exemplo remove uma subpartição da tabela customer_data, que utiliza composite partitioned table com range partitioning por ano e list subpartitioning por região.

Prepare the environment

Crie uma tabela com particionamento composto chamada customer_data, particionada por intervalo (range) conforme o ano de registro e subparticionada por lista (list) conforme a região.

-- Create a composite partitioned table
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 data
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'));

Perform the pre-check

Faça backup dos dados da subpartição e verifique se ela existe.

-- Important: Before you drop the subpartition, make sure that you have backed up the relevant data.

-- Check the subpartition structure to confirm that the p_2022_asia subpartition exists.
SELECT SUBPARTITION_NAME 
FROM USER_TAB_SUBPARTITIONS 
WHERE TABLE_NAME = 'CUSTOMER_DATA';

Execute the command

Execute DROP SUBPARTITION para remover p_2022_asia.

ALTER TABLE customer_data DROP SUBPARTITION p_2022_asia;

Verifique the result

  1. Verifique se a subpartição e seus dados foram removidos.

    -- Structure verification: Confirm that the subpartition is dropped.
    SELECT SUBPARTITION_NAME FROM USER_TAB_SUBPARTITIONS 
    WHERE TABLE_NAME = 'CUSTOMER_DATA';
    -- The query result no longer contains p_2022_asia.
    
    -- Data verification: Confirm that the data in the subpartition is dropped.
    SELECT COUNT(*) FROM customer_data WHERE customer_id = 101;
    -- The query result is 0.
  2. Atualize as estatísticas da tabela.

    Atualize as estatísticas imediatamente após remover uma subpartição para que o otimizador de consultas gere planos de execução precisos.

    ANALYZE CUSTOMER_DATA;

Perguntas frequentes

P1: Por que recebo o erro ORA-00942: table or view does not exist?

R: Você não tem privilégios ALTER na tabela de destino ou o nome da tabela ou do esquema está incorreto. Verifique seus privilégios e os nomes dos objetos.

P2: Por que ocorre o erro ORA-14006: invalid partition name? R: O nome da subpartição não existe ou foi digitado incorretamente. Consulte ALL_TAB_SUBPARTITIONS para verificar o nome. Sem aspas duplas, o banco de dados converte o nome para letras maiúsculas durante a correspondência.

P3: Por que recebo o erro ORA-01031: insufficient privileges? R: Faltam privilégios ALTER na tabela de destino. Entre em contato com seu DBA para conceder os privilégios necessários.

P4: É possível recuperar dados após a execução do DROP SUBPARTITION? R: Não. A instrução DROP SUBPARTITION exclui os dados permanentemente e ignora a Lixeira. Restaure a partir de um backup feito antes da operação.

Instruções SQL relacionadas