Oracle
 sql >> Database >  >> RDS >> Oracle

Dopo aver eliminato la partizione, l'indice è diventato inutilizzabile, cosa devo fare,

  • ANALYZE TABLE non ricostruisce l'indice, giusto?

    Non lo so, ma al giorno d'oggi dovresti usare DBMS_STATS.GATHER_TABLE_STATS anziché ANALYZE TABLE

  • Il caricamento diretto significa che i dati non vengono inseriti riga per riga ma come bulk, vedere Carico diretto del percorso

  • Se il tuo indice diventa UNUSABLE quindi deve essere un indice globale.

  • Usa UPDATE GLOBAL INDEXES clausola, ovvero alter table target_table drop partition target_eldest_partition UPDATE GLOBAL INDEXES; oppure crea indici locali.

  • Dipende da quali colonne hai indicizzato. Invece dell'intera tabella puoi anche eseguire DBMS_STATS.GATHER_INDEX_STATS . Con DBMS_STATS.GATHER_TABLE_STATS puoi anche specificare solo singole partizioni e persino singole colonne.

btw, per molte domande la mia risposta dovrebbe essere:"Hai consultato la documentazione Oracle"? o "Conosci Google"? Secondo i tuoi screenshot usi lo schema SYS e tablespace SYSAUX per i tuoi oggetti utente. Non dovresti farlo. Crea il tuo utente e crea qualsiasi oggetto in questo schema.

In generale ci sono tre tipi di indici partizionati:

  1. INDICE GLOBALE:hai un grande indice che copre l'intera tabella. Questo è obbligatorio ad esempio per INDICI UNICI se le colonne indicizzate non fanno parte della chiave di partizione. In realtà tale indice non è partizionato. (come mostrato in ALL_INDEXES )
  2. INDICE LOCALE:questo indice è partizionato allo stesso modo della tabella sottostante. Ogni partizione di tabella ha una partizione di indice corrispondente.
  3. INDICE PARTIZIONATO:questo indice è partizionato ma diverso rispetto alla tabella sottostante. Penso che sia anche possibile creare un indice partizionato su una tabella non partizionata. Gli indici partizionati sono limitati solo a casi d'uso molto speciali. In realtà non riesco a immaginare dove un tale indice avrebbe senso.