Divide uma partição de intervalo (RANGE) ou lista (LIST) em duas novas partições. Essa operação reorganiza os dados e é irreversível. Antes de executar este comando, planeje os limites e nomes das novas partições e faça backup dos seus dados.
Sinopse
-- Split a RANGE partition
ALTER TABLE table_name SPLIT PARTITION partition_name
AT (range_part_value)
INTO
(
PARTITION new_part1
[TABLESPACE tablespace_name],
PARTITION new_part2
[TABLESPACE tablespace_name]
);
-- Split a LIST partition
ALTER TABLE table_name SPLIT PARTITION partition_name
VALUES (value[, value]...)
INTO
(
PARTITION new_part1
[TABLESPACE tablespace_name],
PARTITION new_part2
[TABLESPACE tablespace_name]
);
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Nome da tabela particionada de destino. |
|
|
|
Sim |
Nome da partição existente a ser dividida. |
|
|
|
Para dividir uma partição |
Define o ponto de divisão para uma partição |
|
|
|
Para dividir uma partição |
Especifique a lista de valores a serem atribuídos à primeira nova partição ao dividir uma partição |
|
|
|
Sim |
Indica os nomes das duas novas partições e um tablespace opcional. A partição |
|
|
|
NãoValor padrão: tablespace padrão da tabela |
Determina o tablespace de armazenamento para as novas partições. É possível definir tablespaces diferentes ou o mesmo tablespace para ambas as novas partições. |
|
Observações
Você deve ser o proprietário da tabela ou ter a permissão
ALTERsobre ela.O comando
SPLIT PARTITIONadquire umAccessExclusiveLock, que é um bloqueio exclusivo no nível da tabela. 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 este comando fora do horário de pico e reserve uma janela de tempo suficiente.-
O ponto de divisão deve ser válido:
Em partições RANGE, o valor na cláusula
ATprecisa estar entre os limites superior e inferior da partição a ser dividida.Em partições LIST, a lista de valores na cláusula
VALUESdeve ser um subconjunto da lista de valores da partição original.
Exemplos
Dividir uma partição de intervalo (RANGE)
Este exemplo demonstra como dividir uma partição de log anual chamada p_2022 em duas partições semestrais denominadas p_2022_h1 e p_2022_h2.
Preparar o ambiente
Realizar a verificação prévia
Executar o comando
Verificar o resultado
Dividir uma partição de lista (LIST)
Neste cenário, dividimos uma partição de vendas asiáticas chamada p_asia, que contém vários países e regiões, em uma partição separada para a China chamada p_china e outra partição chamada p_asia_others para os demais países e regiões asiáticos.
Preparar o ambiente
Realizar a verificação prévia
Executar o comando
Verificar o resultado
Perguntas frequentes
P1: Por que recebo o erro ORA-14080: partition cannot be split?Geralmente, esse erro ocorre porque o ponto de divisão definido é inválido. Para uma partição RANGE, o valor na cláusula AT deve estar entre os limites superior e inferior da partição sendo dividida. Já em uma partição LIST, a lista de valores na cláusula VALUES precisa ser um subconjunto próprio e não vazio da lista de valores da partição original.
P2: Por que recebo o erro ORA-14078: partition name is already in use?Esse erro indica que o nome da nova partição especificado na cláusula INTO já está sendo usado por outra partição na tabela. Altere o nome para um identificador exclusivo dentro da tabela.
P3: Por que o SPLIT PARTITION está lento?Essa operação envolve reorganização e cópia física de dados. O tempo de execução é proporcional ao volume de dados na partição e gera uma quantidade significativa de I/O. Trata-se de uma operação que consome muitos recursos. Execute-a fora do horário de pico.
Instruções SQL relacionadas
ALTER TABLE MERGE PARTITION: Mescla duas partições contíguas em uma única partição.
ALTER TABLE SPLIT SUBPARTITION: Divide uma subpartição em duas subpartições.
ALTER TABLE ADD PARTITION: Adiciona uma nova partição a uma tabela particionada.
ALTER TABLE ADD SUBPARTITION: Inclui uma nova subpartição em uma partição de primeiro nível específica de uma tabela com particionamento composto.