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 |
|
|
|
Sim |
Nome da tabela particionada. |
|
|
|
|
Sim |
Nome da partição a truncar. |
|
|
|
`{DROP |
REUSE} STORAGE` |
Não |
Analisado para compatibilidade com a sintaxe Oracle, mas sem efeito no armazenamento. |
|
Observações de uso
Execute este comando como proprietário da tabela ou como usuário com o privilégio
ALTERsobre ela.O comando
TRUNCATE PARTITIONadquire umAccessExclusiveLockno 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
ANALYZEna tabela pai imediatamente após truncar a partição.O comando
TRUNCATE PARTITIONfalha 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
Verificar a partição antes de truncar
Truncar a partição
Verificar e atualizar estatísticas
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
ALTER TABLE DROP PARTITION: Remove a definição de uma partição e todos os seus dados.
ALTER TABLE ADD PARTITION: Adiciona uma nova partição a uma tabela particionada.
ALTER TABLE SPLIT PARTITION: Divide uma partição em duas.