Todos os produtos
Search
Central de documentação

PolarDB:ALTER TABLE TRUNCATE SUBPARTITION

Última atualização: Jun 28, 2026

Exclui todos os dados de uma subpartição especificada em uma tabela com partição composta. Esta operação remove permanentemente os dados, mas preserva a estrutura da subpartição. Antes de executar este comando, certifique-se de que os dados não são mais necessários ou já possuem backup.

Sinopse

ALTER TABLE table_name 
  TRUNCATE SUBPARTITION subpartition_name 
  [{DROP|REUSE} STORAGE]

Parâmetros

Parâmetro

Obrigatório

Descrição

Exemplo

table_name

Sim

Nome da tabela de destino com partição composta.

customer_data

subpartition_name

Sim

Nome da subpartição a ser truncada.

p_2022_asia

`{DROP

REUSE} STORAGE`

Não

O sistema analisa esta cláusula para compatibilidade com a sintaxe Oracle, mas a ignora sem afetar o armazenamento.

DROP STORAGE/

REUSE STORAGE

Observações

  • Você deve ser o proprietário da tabela ou ter a permissão ALTER sobre ela.

  • O comando TRUNCATE SUBPARTITION adquire um bloqueio exclusivo no nível da tabela (AccessExclusiveLock). Esse bloqueio impede todas as operações de Linguagem de Manipulação de Dados (DML) e a maioria das operações de Linguagem de Definição de Dados (DDL) na tabela. Execute esta instrução fora do horário de pico e reserve tempo suficiente para sua conclusão, evitando assim o bloqueio de outras operações críticas.

  • Por ser uma operação DDL, TRUNCATE SUBPARTITION confirma implicitamente a transação atual. Após a execução do comando, não é possível recuperar os dados excluídos com ROLLBACK. Faça backup dos dados antes de realizar esta operação.

  • Como operação de metadados que inclui exclusão de arquivos, TRUNCATE SUBPARTITION pode ser concluída em segundos, mesmo em tabelas com centenas de milhões de registros. A sobrecarga de I/O, CPU e memória é extremamente baixa.

Exemplos

Este exemplo demonstra como excluir dados da subpartição referente aos usuários da região da Ásia no ano de 2022. O cenário utiliza uma tabela de clientes com partição composta por ano de registro (RANGE) e região do usuário (LIST).

Preparar o ambiente

Esta etapa cria uma tabela com partição composta chamada customer_data. A tabela é particionada por intervalo (range) com base no ano de registro (p_2022) e subparticionada por lista (list) conforme a região do usuário (p_2022_asia e p_2022_europe). Em seguida, insira dados de teste nessas duas subpartições.

-- 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')
    )
);

-- 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'));

Realizar a verificação prévia

Antes de truncar a subpartição, confirme se há backup dos dados. Em seguida, verifique a estrutura e o conteúdo da subpartição de destino.

-- Important: Before you empty the subpartition, make sure 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';

-- Check the subpartition data to confirm that it contains data.
SELECT COUNT(*) FROM customer_data SUBPARTITION (p_2022_asia);

Executar o comando

Execute TRUNCATE SUBPARTITION para truncar a subpartição p_2022_asia.

ALTER TABLE customer_data TRUNCATE SUBPARTITION p_2022_asia;

Verificar o resultado

Confirme se a estrutura da subpartição foi mantida e se os dados foram excluídos.

-- Verify the structure: Confirm that the subpartition definition still exists.
SELECT SUBPARTITION_NAME FROM USER_TAB_SUBPARTITIONS 
WHERE TABLE_NAME = 'CUSTOMER_DATA';
-- The query result should include p_2022_asia.

-- Verify the data: Confirm that the data in the subpartition has been emptied.
SELECT COUNT(*) FROM customer_data SUBPARTITION (p_2022_asia);
-- The query result is 0.

Perguntas frequentes

P1: Qual é a diferença entre TRUNCATE SUBPARTITION e DROP SUBPARTITION?

TRUNCATE SUBPARTITION exclui os dados de uma subpartição, mas mantém sua definição. Já DROP SUBPARTITION remove tanto a definição da subpartição quanto os dados nela contidos.

P2: É possível recuperar dados após a execução de TRUNCATE SUBPARTITION?

Não. TRUNCATE é uma operação DDL que exclui dados permanentemente. Por padrão, ela não é registrada no log de transações, tornando impossível a recuperação dos dados por métodos convencionais como rollback ou flashback.

P3: Qual é a diferença entre TRUNCATE SUBPARTITION e DELETE FROM ... SUBPARTITION?

TRUNCATE SUBPARTITION é uma operação DDL eficiente que exclui dados diretamente ao liberar blocos de dados, sem possibilidade de reversão. Por outro lado, DELETE é uma operação DML que remove dados linha por linha, registra logs, permite reversão e aciona gatilhos de exclusão.

P4: Por que recebo o erro "ORA-02149: relation ... does not exist"?

Esse erro ocorre quando o nome da subpartição não existe ou quando o uso de maiúsculas e minúsculas no nome especificado não corresponde ao nome real, pois os nomes diferenciam maiúsculas de minúsculas. Para confirmar o nome correto, realize a verificação prévia.

P5: Por que recebo o erro "ORA-01031: insufficient privileges"?

Esse erro indica que o usuário executor do comando não possui a permissão ALTER na tabela de destino. Entre em contato com o administrador do banco de dados para conceder a permissão necessária.

Instruções SQL relacionadas