-
ANALYZE TABLE não reconstrói o índice, certo?
Não sei, mas hoje em dia você deveria usarDBMS_STATS.GATHER_TABLE_STATS
em vez deANALYZE TABLE
-
O carregamento direto significa que os dados não são inseridos linha por linha, mas em massa, consulte Carregamento de caminho direto
-
Se o seu índice se tornarUNUSABLE
então deve ser um índice global.
-
Use oUPDATE GLOBAL INDEXES
cláusula, ou seja,alter table target_table drop partition target_eldest_partition UPDATE GLOBAL INDEXES;
ou criar índices locais.
-
Depende de quais colunas você indexou. Em vez da tabela inteira, você também pode executarDBMS_STATS.GATHER_INDEX_STATS
. ComDBMS_STATS.GATHER_TABLE_STATS
você também pode especificar apenas partições únicas e até colunas únicas.
btw, para muitas perguntas minha resposta deveria ser:"Você consultou a documentação do Oracle"? ou "Você conhece o google"? De acordo com suas capturas de tela, você usa o esquema
SYS
e tablespace SYSAUX
para seus objetos de usuário. Você não deveria fazer isso. Crie seu próprio usuário e crie qualquer objeto neste esquema. Em geral, existem três tipos de índices particionados:
- ÍNDICE GLOBAL:você tem um grande índice que abrange toda a tabela. Isso é obrigatório, por exemplo, para UNIQUE INDEXES se as colunas indexadas não fizerem parte da chave de partição. Na verdade, esse índice não é particionado. (como mostrado em
ALL_INDEXES
) - LOCAL INDEX:Este índice é particionado da mesma forma que a tabela subjacente. Cada partição de tabela tem uma partição de índice correspondente.
- ÍNDICE PARTICIONADO:este índice é particionado, mas diferente do que a tabela subjacente. Acho que é até possível criar um índice particionado em uma tabela não particionada. Índices particionados são limitados apenas a casos de uso muito especiais. Na verdade não consigo imaginar onde tal índice faria sentido.