-
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, ovveroalter 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
. ConDBMS_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:
- 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
) - INDICE LOCALE:questo indice è partizionato allo stesso modo della tabella sottostante. Ogni partizione di tabella ha una partizione di indice corrispondente.
- 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.