Ich bin kein DBA, muss aber dieses Problem beheben.
In meiner Oracle 9i-Datenbank befinden sich 2 permanente Tablespaces. Eine für die Tabellen und die andere für die anderen Indizes als die temporären und UNDO-Tabellenbereiche
Letzte Woche habe ich die Ausnahme bekommen
ORA-01654: Index
<name of the index>
Kann im Tabellenbereich<name of the Index tablespace>
Nicht um 128 erweitert werden.
Ich habe die Größe des Tablespace erheblich erhöht. Trotzdem erhalte ich diesen Fehler.
Ich habe viele Daten gelöscht, um Speicherplatz freizugeben. Aber das nützt nichts.
Behebt dieses Problem das Verkleinern des Tabellenbereichs oder das Ändern der Größe der Datendateien des permanenten Tabellenbereichs?
Außerdem wurden die Statistiken seit März nicht mehr gesammelt. Hilft mir das Sammeln der neuesten Statistiken in irgendeiner Weise?
Das Löschen von Daten macht keinen Unterschied, da Oracle den Speicherplatz zum erneuten Ausfüllen bereitgehalten hat. Die oberste Speicherplatznutzung in einer Tabelle wird als Hochwassermarke bezeichnet. Tom Kyte hat ein großartiger Beitrag darüber .
Sie reduzieren die Hochwassermarke, indem Sie die Tabelle neu erstellen:
alter table my_table_name move;
Wenn nach dem Vergrößern des Tabellenbereichs immer noch der Fehler angezeigt wird, gibt es mehrere mögliche Gründe ...
Die Antwort auf 1 to ist, mehr Platz hinzuzufügen.
So ermitteln Sie Ihren Standardtabellenbereich:
select * from dba_users where username = 'MY_USER'
Wenn dies nicht Ihr Indextabellenbereich ist, müssen Sie ihn beim Erstellen des Index angeben.
create index i_my_table
on my_table ( my_column )
tablespace my_index_ts
< other options >
Ja, wenn Sie in 9i sind, lohnt es sich auf jeden Fall, Statistiken zu sammeln, da diese nicht automatisch erfasst werden, wenn genügend Änderungen an der Tabelle vorgenommen wurden - in späteren Versionen. Verwenden Sie DBMS_STATS.GATHER_TABLE_STATS()
und tun Sie dies erst, nachdem die Tabelle neu erstellt wurde.
Leider können Sie in Oracle die Größe eines Tablespace nicht reduzieren. Um diese Option zu verwenden, müssten Sie den Tabellenbereich neu erstellen, jedoch kleiner, und alles dorthin verschieben.
Sie können etwas Platz auf Ihren größten Tischen zurückgewinnen mit:
ALTER TABLE xxx ENABLE ROW MOVEMENT
ALTER TABLE xxx SHRINK SPACE
ALTER TABLE xxx DISABLE ROW MOVEMENT
Beachten Sie, dass Sie danach wahrscheinlich einige Objekte neu erstellen müssen.