Todos os produtos
Search
Central de documentação

PolarDB:ALTER TABLE…TRUNCATE PARTITION

Última atualização: Jun 28, 2026

Remove todos os dados de uma partição especificada e mantém a definição da partição intacta. Esta operação exclui permanentemente os dados da partição. Faça backup dos dados necessários antes de executar este comando, pois não é possível recuperá-los após a conclusão da operação.

Sinopse

ALTER TABLE table_name TRUNCATE PARTITION partition_name
  [{DROP|REUSE} STORAGE]

Parâmetros

Parâmetro

Obrigatório

Descrição

Exemplo

table_name

Sim

Nome da tabela particionada.

sales_records

partition_name

Sim

Nome da partição a truncar.

p_2023_q1

`{DROP

REUSE} STORAGE`

Não

Analisado para compatibilidade com a sintaxe Oracle, mas sem efeito no armazenamento.

DROP STORAGE

Observações de uso

  • Execute este comando como proprietário da tabela ou como usuário com o privilégio ALTER sobre ela.

  • O comando TRUNCATE PARTITION adquire um AccessExclusiveLock no nível da tabela. Isso bloqueia 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). Execute este comando em horários de baixa demanda e reserve tempo suficiente para sua conclusão.

  • A operação consiste em uma atualização de metadados combinada com exclusão de arquivos. A conclusão ocorre em segundos, independentemente do tamanho da partição — mesmo naquelas com centenas de milhões de linhas — e gera sobrecarga mínima de I/O, CPU e memória.

  • Se a tabela tiver gatilhos ON TRUNCATE, esta operação os acionará. Compreenda a lógica de negócios desses gatilhos antes de prosseguir.

  • A operação invalida as estatísticas da tabela, o que pode degradar o desempenho das consultas. Execute ANALYZE na tabela pai imediatamente após truncar a partição.

  • O comando TRUNCATE PARTITION falha se a tabela tiver índices globais. Um índice global mantém a unicidade e os caminhos de acesso em todas as partições, e a operação não consegue limpar as entradas relevantes do índice sem comprometer sua integridade.

Exemplo

Este exemplo demonstra a limpeza de uma partição trimestral histórica em uma tabela de registros de vendas. Trata-se de uma tarefa típica de gerenciamento de ciclo de vida de dados, na qual você exclui dados antigos, mas preserva a estrutura da partição para reutilização futura.

Configurar o ambiente

Crie uma tabela particionada por intervalo e insira dados de amostra.

-- Create a table partitioned by sale_date
CREATE TABLE sales_records (
    sale_id    INT NOT NULL,
    product_id INT NOT NULL,
    sale_date  DATE NOT NULL
)
PARTITION BY RANGE (sale_date) (
    PARTITION p_2023_q1 VALUES LESS THAN (TO_DATE('2023-04-01', 'YYYY-MM-DD')),
    PARTITION p_2023_q2 VALUES LESS THAN (TO_DATE('2023-07-01', 'YYYY-MM-DD'))
);

-- Insert one row into each partition
INSERT INTO sales_records VALUES (1, 101, TO_DATE('2023-01-15', 'YYYY-MM-DD'));
INSERT INTO sales_records VALUES (2, 102, TO_DATE('2023-04-20', 'YYYY-MM-DD'));
COMMIT;

Verificar a partição antes de truncar

Confirme se a partição existe e contém dados antes de fazer qualquer alteração.

-- Confirm the partition p_2023_q1 exists
SELECT PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'SALES_RECORDS';

-- Confirm the partition contains data
SELECT COUNT(*) FROM sales_records PARTITION (p_2023_q1);
-- Expected result: 1
Importante

Faça backup dos dados necessários antes de prosseguir. O comando TRUNCATE PARTITION exclui permanentemente os dados e não permite reversão.

Truncar a partição

ALTER TABLE sales_records TRUNCATE PARTITION p_2023_q1;

Verificar e atualizar estatísticas

Confirme se a definição da partição ainda existe e se os dados foram removidos. Em seguida, atualize as estatísticas da tabela.

-- Confirm the partition definition still exists
SELECT PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'SALES_RECORDS';
-- Expected result: both p_2023_q1 and p_2023_q2 are still listed

-- Confirm the data has been deleted
SELECT COUNT(*) FROM sales_records PARTITION (p_2023_q1);
-- Expected result: 0

-- Update statistics on the parent table
ANALYZE sales_records;

Perguntas frequentes

Qual é a diferença entre TRUNCATE PARTITION e DROP PARTITION?

O comando TRUNCATE PARTITION exclui os dados de uma partição, mas mantém sua definição. Já o DROP PARTITION remove tanto a definição da partição quanto seus dados. Use TRUNCATE PARTITION quando planejar recarregar dados na mesma partição posteriormente.

É possível recuperar dados após executar TRUNCATE PARTITION?

Não. O TRUNCATE PARTITION é uma operação DDL que exclui dados permanentemente. Por padrão, ela não é registrada nos logs de transação e não permite reversão ou recuperação por métodos padrão de flashback.

Por que recebo o erro RA-02149: specified partition does not exist?

O nome da partição não existe ou há incompatibilidade de maiúsculas e minúsculas. Verifique o nome exato com o seguinte comando:

SELECT PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'SALES_RECORDS';

Se o nome contiver letras minúsculas ou caracteres especiais, coloque-o entre aspas duplas.

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

O usuário atual não tem o privilégio ALTER na tabela de destino. Entre em contato com o administrador do banco de dados para conceder o privilégio necessário.

Por que recebo o erro ERROR: cannot truncate partition of table because it has global indexes?

O TRUNCATE PARTITION não consegue remover dados de uma tabela com índices globais, pois esse tipo de índice abrange todas as partições e a operação não pode limpar com segurança apenas as entradas afetadas. Exclua os índices globais antes de truncar a partição ou reestruture a tabela para evitar seu uso.

Instruções SQL relacionadas