Rebuild der Inidices

Hallo,

Datenbank: Oracle 8.1.7

Ich komme hin und wieder an die Frage wie man innerhalb alle Indices rebuilded, habe auch schon mal gegooglet, aber diesbezüglich nicht das gefunden was ich erwartet hätte… (is immer schwer zu suchen wenn man nicht weiß was… )

gibt es einen Befehl, oder sowas womit man alle Indices auf einmal erneuern kann, was muß man dabei überhaupt beachten, darf man wärendessen auf der DB arbeiten oder lieber nicht…

bei einem einzelnen Index kann man ja sagen rebuild online, kann mir einer den Unterschied erklären zu rebuild und rebuild online ? was ist besser ?

Grüße

Chris

Hallo,

Datenbank: Oracle 8.1.7

Ich komme hin und wieder an die Frage wie man innerhalb alle
Indices rebuilded, habe auch schon mal gegooglet, aber
diesbezüglich nicht das gefunden was ich erwartet hätte… (is
immer schwer zu suchen wenn man nicht weiß was… )

gibt es einen Befehl, oder sowas womit man alle Indices auf
einmal erneuern kann, was muß man dabei überhaupt beachten,
darf man wärendessen auf der DB arbeiten oder lieber nicht…

Hallo Chris,
ich bin nicht sicher, ob ich dich komplett verstehe. Meinst du, du willst *alle* Indexe einer Tabelle oder eines Schemas anfassen? Wenn ja, dann gilt folgendes: Da das Statement ALTER INDEX lautet, kannst du nur jeweils *einen* Index angeben. Die Lösung würde dann lauten: benutze dynamisches SQL in einer Prozedur / einem Package um alle relevanten Indexe in einer Schleife zu behandeln.

bei einem einzelnen Index kann man ja sagen rebuild online,
kann mir einer den Unterschied erklären zu rebuild und rebuild
online ? was ist besser ?

Wenn ONLINE angegeben wird, schaltet (ob immer, weiß ich nicht) Oracle den Execution Plan so um, dass kein Index-FFS sondern ein FTS durchgeführt wird. Die ‚Kosten‘ dafür sind dann ggfs. höher. Ein Beispiel und weiterführende Links findest du bei Jonathan Lewis:
http://www.jlcomp.demon.co.uk/faq/ind_rebuild.html

hth,
Guido

Hallo Guido,

danke für die Antwort und den Link, jetzt weiß ich schon mehr !

nur noch eine Frage, bei den beispielen die ich so im Internet gefunden habe wird teilweise der Index-Tablespace extra angegeben. ist das notwendig ? oder geht es eher darum das der Index dabei noch in einen anderen Tablespace verschoben wird - so als Nebeneffekt ?

Grüße

Chris

Hallo Chris,

angegeben. ist das notwendig ? oder geht es eher darum das der
Index dabei noch in einen anderen Tablespace verschoben wird -
so als Nebeneffekt ?

Ja, sonst wird der Standard-Tablespace genommen.
Eine Variante ist, wie schon erwähnt, dynamisches SQL, so kann man alle Parameter aller bestehenden Indizes abfragen und wiederverwenden. Genausogut kann man mit einem Script per Spooling ein Script erzeugen und laufen lassen. Das hat den Vorteil, daß man es noch einmal kontrollieren und anpassen kann.
Das „rebuild online“ hat nicht in allen 8.1.7 er Versionen richtig funktioniert (welche Version hast Du genau?) - wenn möglich auf die letzte Version (8.1.7.4, glaube ich) updaten.
Wenn man alle Indizes (und vielleicht auch Tabellen) reorganisieren will, dann evtl. doch besser „offline“, ohne angemeldete Nutzer.
Uwe

Hallo Chris,

das sind wahrscheinlich alte Beispiele. Früher (kurz vor Erfindung des Tonfilms :wink:) hielt man Daten und Indexe getrennt. Bei herkömmlichen Plattensystemen, zumal wenn nichts anderes auf den Maschinen lief, konnte man so oft verhindern, dass die Schreib-Lese-Köpfe zu sehr bewegt wurden, wenn erst auf einen Index und anschließend auf die entsprechenden Daten zugegriffen wurde. Da heutzutage wohl niemand mehr ernsthaft ein derart antiquiertes System produktiv hat, macht die Trennung keinen Sinn mehr. Gerade vor dem Hintergrund der LMT-Option ist so etwas obsolet.

Schlauer? :sunglasses:

Liebe Grüße,
Guido

Früher (kurz vor Erfindung des Tonfilms :wink:) hielt man Daten und Indexe getrennt.

aha, also ist der Indextablespace nur noch sozusagen der Ordnung halber ?
Auch Interessant…

Ich danke dir für deine ausführlichen Antworten !!

Grüße

Chris

Hallo Uwe,

Danke auch dir für die Infos !

Grüße

Chris

Aufteilung der Segmente (bitte um Erleuchtung)
Hallo Guido!

Ich bin bezüglich deiner Antwort _etwas_ skeptisch.

das sind wahrscheinlich alte Beispiele. Früher (kurz vor
Erfindung des Tonfilms :wink:) hielt man Daten und Indexe
getrennt. Bei herkömmlichen Plattensystemen, zumal wenn nichts
anderes auf den Maschinen lief, konnte man so oft verhindern,
dass die Schreib-Lese-Köpfe zu sehr bewegt wurden, wenn erst
auf einen Index und anschließend auf die entsprechenden Daten
zugegriffen wurde.

Auch das, richtig, aber es geht (mir) um etwas mehr, wenn ich die Segmente trenne (ich verwende auch einige Tablespaces mehr als einen für Tabellen und einen für Indices). Da wären zum Beispiel: Segmentfragmentierung, Datenfilefragmentierung und Administrierbarkeit.

Da heutzutage wohl niemand mehr ernsthaft
ein derart antiquiertes System produktiv hat, macht die
Trennung keinen Sinn mehr.

Vor dem Hintergrund der Gründe für die Trennung, die ich oben angeführt habe: Warum nicht?

Gerade vor dem Hintergrund der
LMT-Option ist so etwas obsolet.

Was locally managed Tablespaces mit der Aufteilung der Segmente auf Tablespaces zu tun haben erschliesst sich mir im Moment mal gar nicht. Bitte auch diesbezüglich um Aufklärung.

Schlauer? :sunglasses:

Eher verwundert…

Liebe Grüße,
Guido

Auch liebe Grüße
Martin