Adiciona uma nova subpartição a uma partição de primeiro nível especificada em uma tabela com particionamento composto. Antes de executar esta instrução, confirme se a partição pai possui uma política de subparticionamento definida e se os limites ou valores da nova subpartição não entram em conflito com as subpartições existentes.
Sinopse
ALTER TABLE table_name
MODIFY PARTITION partition_name
ADD SUBPARTITION { list_subpartition | range_subpartition };
-- LIST subpartition definition
SUBPARTITION subpartition_name
VALUES (value[, value]...)
[TABLESPACE tablespace_name]
-- RANGE subpartition definition
SUBPARTITION subpartition_name
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Nome da tabela de destino com particionamento composto. |
|
|
|
Sim |
Nome da partição de primeiro nível à qual adicionar a nova subpartição. |
|
|
|
Sim |
Nome da nova subpartição. Deve ser exclusivo em todas as partições e subpartições da tabela. |
|
|
|
Sim |
Valores de limite para a nova subpartição. Para uma subpartição LIST, especifique um ou mais valores literais. Para uma subpartição RANGE, use |
|
|
|
Não. Padrão: tablespace padrão da tabela. |
Tablespace para a nova subpartição. |
|
Observações de uso
O tipo de subpartição (LIST ou RANGE) deve corresponder ao tipo das subpartições existentes na mesma partição pai.
O nome definido em
subpartition_namedeve ser exclusivo entre todas as partições e subpartições da tabela.Ao adicionar uma subpartição RANGE, o valor de limite definido por
VALUES LESS THAN (...)deve ser maior que o limite superior de todas as subpartições existentes. Subpartições RANGE só podem ser anexadas em ordem crescente. Para inserir uma subpartição intermediária, useALTER TABLE ... SPLIT SUBPARTITIONpara dividir uma subpartição existente.Ao adicionar uma subpartição LIST, os valores em sua lista
VALUES (...)não podem se sobrepor aos valores de nenhuma subpartição existente na mesma partição pai.Não use
ADD SUBPARTITIONem uma partição regida por uma regraMAXVALUEouDEFAULT. Em vez disso, useALTER TABLE ... SPLIT SUBPARTITIONpara dividir a partição de limite existente.ADD SUBPARTITIONadquire um bloqueio exclusivo no nível da tabela (AccessExclusiveLock), que 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) na tabela. Execute este comando fora do horário de pico e reserve tempo suficiente para sua conclusão.Não há limite declarado para o número de subpartições, mas mantenha o total de partições por tabela abaixo de 1.000 para garantir desempenho e gerenciabilidade ideais.
Se a tabela possuir um índice, o banco de dados criará automaticamente uma partição de índice correspondente para a nova subpartição.
Você deve ser proprietário da tabela ou ter privilégios de administrador para executar este comando.
A nova subpartição inicialmente não possui estatísticas. Para ajudar o otimizador de consultas a gerar planos de execução precisos, colete estatísticas imediatamente após adicionar a subpartição.
Exemplos
Adicionar uma subpartição LIST a uma tabela com particionamento composto RANGE-LIST
Este exemplo adiciona uma subpartição para a região Africa à partição de 2023 de uma tabela com particionamento composto por ano de venda (RANGE) e região de venda (LIST).
Preparar o ambiente
Realizar verificação prévia
Adicionar a subpartição
Verificar o resultado
Adicionar uma subpartição RANGE a uma tabela com particionamento composto RANGE-RANGE
Este exemplo adiciona uma subpartição referente ao segundo trimestre (Q2) à partição de 2023 de uma tabela com particionamento composto por ano do pedido (RANGE) e data do pedido (RANGE).
Preparar o ambiente
Realizar verificação prévia
Adicionar a subpartição
Verificar o resultado
Perguntas frequentes
Por que recebo o erro ORA-14321: subpartition ... already exists?
A definição VALUES da nova subpartição entra em conflito com uma já existente sob a mesma partição pai. No caso de uma subpartição LIST, o valor já pertence a outra subpartição. Para subpartições RANGE, o novo limite não é estritamente superior ao último definido. Especifique um valor de limite sem sobreposição e tente novamente.
Por que recebo o erro ORA-02269: partition does not exist?
A partition_name indicada na cláusula MODIFY PARTITION não existe na tabela. Consulte USER_TAB_PARTITIONS para obter o nome correto da partição de primeiro nível.
Por que recebo o erro ORA-14150: subpartitioning is not specified?
A tabela de destino não possui uma política de subparticionamento. O comando ADD SUBPARTITION aplica-se apenas a tabelas com particionamento composto.
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 um administrador de banco de dados para conceder o privilégio necessário.
Por que recebo o erro ORA-14074: partition bound must collate higher than that of the last partition?
O comando ADD SUBPARTITION só permite anexar uma subpartição RANGE ao final do intervalo existente, em ordem crescente. Para inserir uma subpartição intermediária, use ALTER TABLE ... SPLIT SUBPARTITION.
Instruções relacionadas
ALTER TABLE ADD PARTITION: Adiciona uma nova partição de primeiro nível a uma tabela particionada.
ALTER TABLE DROP SUBPARTITION: Exclui uma subpartição especificada.
ALTER TABLE SPLIT SUBPARTITION: Divide uma subpartição em duas.