it-swarm-eu.dev

ORA-01654: Nelze rozšířit index <název indexu> o 128 v tabulkovém prostoru <název tabulkového prostoru indexu>

Nejsem DBA, ale musím tento problém vyřešit.

V databázi Oracle 9i jsou 2 stálé tabulkové prostory. Jeden pro tabulky a druhý pro indexy kromě dočasných a UNDO tabulkových prostorů

Minulý týden jsem dostal výjimku

ORA-01654: Nelze rozšířit index <name of the index> o 128 v tabulkovém prostoru <name of the Index tablespace>.

Dostal jsem značně větší velikost tabulkového prostoru. Ale stále dostávám tuto chybu.

Smazal jsem spoustu dat, protože jsem si myslel, že by to uvolnilo místo. Ale to je k ničemu.

Vyřeší tento problém zmenšení tabulkového prostoru nebo změna velikosti datových souborů trvalého tabulkového prostoru?

Statistiky také nejsou shromažďovány od března. Pomůže mi shromažďování nejnovějších statistik?

4
Savitha

Smazání dat nebude mít žádný význam, protože společnost Oracle bude mít prostor připraven k opětovnému vyplnění. Využití nejvyššího prostoru v tabulce se nazývá značka vysoké vody . Tom Kyte má skvělý příspěvek o tom .

Redukcí tabulky vysoké vody snížíte sestavení tabulky:

alter table my_table_name move;

Pokud se vám stále zobrazuje chyba i po zvětšení velikosti tabulkového prostoru, existuje několik možných důvodů ...

  1. Index je příliš velký i pro nově zvětšený tabulkový prostor. Jak velká je tabulka a jaká je kombinovaná velikost sloupců, které indexujete?
  2. Při vytváření indexu nespecifikujete tabulkový prostor a nepoužívá ten, který si myslíte, bez ohledu na výchozí výchozí tabulkový prostor pro vaše schéma.

Odpověď na 1 na je přidat více místa.

Zjištění výchozího tabulkového prostoru:

select * from dba_users where username = 'MY_USER'

Pokud to není váš tabulkový prostor indexu, musíte jej při vytváření indexu určit.

create index i_my_table 
    on my_table ( my_column ) 
       tablespace my_index_ts
       < other options >

Ano, pokud jste v 9i, určitě stojí za to sbírat statistiky, protože je nesbírá automaticky, když bylo v tabulce provedeno dostatečné množství změn - v pozdějších verzích. Použijte DBMS_STATS.GATHER_TABLE_STATS() a to proveďte až po znovu sestavení tabulky.

Bohužel v Oracle nelze zmenšit velikost tabulkového prostoru. Chcete-li použít tuto možnost, musíte znovu vytvořit tabulkový prostor, ale menší a vše do něj přesunout.

8
Ben

Na svých největších stolech můžete získat zpět místo:

ALTER TABLE xxx ENABLE ROW MOVEMENT
ALTER TABLE xxx SHRINK SPACE
ALTER TABLE xxx DISABLE ROW MOVEMENT

Všimněte si, že budete pravděpodobně muset znovu postavit některé objekty.

2
Benoit