-
ANALYSE TABLE genopbygger ikke indekset, vel?
Jeg ved det ikke, men i dag bør du bruge
DBMS_STATS.GATHER_TABLE_STATS
i stedet forANALYZE TABLE
-
Direkte indlæsning betyder, at data ikke indsættes række for række, men som bulk, se Direkte stibelastning
-
Hvis dit indeks bliver
UNUSABLE
så skal det være et globalt indeks. -
Brug
UPDATE GLOBAL INDEXES
klausul, dvs.alter table target_table drop partition target_eldest_partition UPDATE GLOBAL INDEXES;
eller opret lokale indekser. -
Afhænger af hvilke kolonner du har indekseret. I stedet for hele tabellen kan du også køre
DBMS_STATS.GATHER_INDEX_STATS
. MedDBMS_STATS.GATHER_TABLE_STATS
du kan også angive kun enkelte partitioner og endda enkelte kolonner.
btw, til mange spørgsmål burde mit svar faktisk være:"Konsulterede du Oracle-dokumentationen"? eller "Kender du google"? Ifølge dine skærmbilleder bruger du skemaet SYS
og tablespace SYSAUX
for dine brugerobjekter. Det skal du ikke gøre. Opret din egen bruger og opret ethvert objekt i dette skema.
Generelt er der tre typer af partitionerede indekser:
- GLOBAL INDEKS:Du har et stort indeks, der strækker sig over hele tabellen. Dette er obligatorisk for f.eks. UNIKKE INDEKSER, hvis de indekserede kolonner ikke er en del af partitionsnøglen. Faktisk er et sådant indeks ikke opdelt. (som vist i
ALL_INDEXES
) - LOKALT INDEKS:Dette indeks er opdelt på samme måde som den underliggende tabel. Hver tabelpartition har en tilsvarende indekspartition.
- OPDELT INDEKS:Dette indeks er opdelt, men forskelligt end den underliggende tabel. Jeg tror, det er endda muligt at oprette et partitioneret indeks på en ikke-partitioneret tabel. Opdelte indekser er kun begrænset til meget specielle tilfælde. Jeg kan faktisk ikke forestille mig, hvor et sådant indeks ville give mening.