Hallo Chris!
Ich schon wieder *g*
Der Tipp von Erwin stimmt für Dictionary Managed Tablespaces vollinhaltlich, bei Locally Managed Tablespaces (die du mW aber nicht verwendest) kommt das nicht zum Tragen.
Zum Coalesce:
Ich male hier mal ein File (20 Blocks, jedes x ist ein Block, ich weiss, is’n kleines File )
xxxxxxxxxxxxxxxxxxxx
Jetzt legen wir ein paar Tabellen (X,Y,Z) mit je drei Blocks an (nur ein Extent):
XXXYYYZZZxxxxxxxxxxx
Wir haben also noch 11 Blöcke frei. DBA_FREE_SPACE würde uns diesen einen Extent mit den 11 Blöcken anzeigen. Habe den freien Extent jetzt mal mit ‚a‘ bezeichnet:
XXXYYYZZZaaaaaaaaaaa
Jetzt löschen wir die Tabelle Z wieder, es wird der Platz wieder freigegeben, und ich habe den jetzt mal mit ‚b‘ bezeichnet:
XXXYYYbbbaaaaaaaaaaa
DBA_FREE_SPACE zeigt uns jetzt zwei freie Extents an, den a und den b. Wenn wir jetzt versuchen Z neu anzulegen, aber diesmal mit 12 Blöcken, dann schlägt das fehl: Oracle ist der Meinung, dass in dem File max. 11 Blöcke zusammenhängend frei sind. Wir wissen das zwar besser (a und b liegen ja direkt nebeneinander und könnten die 12 Blöcke ja aufnehmen), helfen tut uns das aber erstmal nichts.
Daher machen wir jetzt einfach den COALESCE und Oracle denkt etwas über Anfangsblock und Blockanzahl der freien Extents in DBA_FREE_SPACE nach, kommt dann zu folgendem Schluss:
XXXYYY **aaaaaaaaaaaaaa**
. Wir haben also auf wundersame Weise einen freien Extent mit 14 Blöcken generiert, und siehe da, auch unsere Tabelle Z hat wieder Platz:
XXXYYYZZZZZZZZZZZZaa
Um noch kurz auf den Resize einzugehen: Wir geben dem File jetzt noch mal (knausrig wie wir sind) zwei Blöcke dazu. Sieht dann so aus:
XXXYYYZZZZZZZZZZZZaacc
Wenn wir jetzt noch einen COALESCE machen bringen wir auch wieder eine Tabelle mit 4 Blöcken unter. Hätten wir ein zweites File angelegt sähe das jetzt so aus:
File 1: XXXYYYZZZZZZZZZZZZaa
File 2: cc
Weil ein Extent aber immer in einem File liegen muss könnten wir jetzt kopfstehen und sonstige lustige Dinge tun, die Tabelle mit 4 Blöcken bringen wir aber nicht mehr unter.
Ich hoffe das hat ein wenig Klarheit gebracht.
Weiters zum Thema RESIZE vs. ADD DATAFILE:
Vorteile von RESIZE:
- Siehe oben
- Keine Erhöhung der Files in der DB (wird durch einen DB-Parameter eingeschränkt)
- einfachere Administration (zumindest mA nach)
Vorteile von ADD DATAFILE:
- Eventuelle Filegrössen-Beschränkungen brauchen nicht berücksichtigt zu werden
- Load Balancing (Tuning) durch Verteilen der Datenfiles auf mehrere Datenträger möglich
Wofür du dich entscheidest hängt also eigentlich nur von deinen Prioritäten ab…
Gruß,
Martin