O que deve ser feito para introduzir partições de intervalo em uma tabela não particionada existente no oracle? Existe uma maneira fácil de fazer e segura de fazer isso?
Especialmente nos casos em que há muitas restrições na tabela, como chaves estrangeiras.
Este documento de Tim Hall demonstra as etapas necessárias. Não é algo trivial de se fazer.
Você não pode adicionar uma partição a uma tabela não particionada, desde que a tabela não seja do tipo
PARTITIONED
.Você pode criar uma nova tabela particionada e adicionar a tabela não particionada como uma partição dela.
Outra abordagem é usar o
dbms_redefinition
pacote, que é muito poderoso e flexível em uso e a maioria das etapas pode ser executada em segundo plano. Geralmente, funciona em 2 fases:No entanto, não é tão fácil de usar e você pode cair em algumas armadilhas.
Desde o Oracle 12.2.0.1,
ALTER TABLE
há uma novamodify_to_partitioned
cláusula, que permite convertê-lo em uma tabela particionada. No entanto, existem algumas restrições e você não pode convertê-lo novamente em não particionado com o mesmo método.Existe até uma
ONLINE
cláusula, bem como umaUPDATE INDEXES
cláusula com a opção de definir o índice como índice local ou global.