it-swarm-eu.dev

ORA-01654: Index <Name des Index> kann im Tabellenbereich <Name des Index-Tabellenbereichs> nicht um 128 erweitert werden

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?

4
Savitha

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 ...

  1. Der Index ist selbst für den neu vergrößerten Tablespace zu groß. Wie groß ist die Tabelle und wie groß sind die Spalten, die Sie indizieren?
  2. Sie geben beim Erstellen des Index keinen Tabellenbereich an und verwenden nicht den Ihrer Meinung nach verwendeten, unabhängig vom Standardtabellenbereich für Ihr Schema.

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.

8
Ben

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.

2
Benoit