Aaargh, wiede mal ein Fehler.... ORA-1653

ich hab mal wieder ein problem…

die haben irgendeinen script auf der DB laufen lassen und dabei sind dann folgende 2 fehler aufgetreten:

erst dieser hier:
Fehler in tr_ins_zeitpunkte bei Insert tr_tfz_zeitpunkt für ganze zeitpunkte
ORA-01653: unable to extend table

und danach dieser:
Fehler in tr_ins_zeitpunkte bei Insert tr_tfz_zeitpunkt für ganze zeitpunkte
ORA-01562: failed to extend rollback segment number 7

wenn ich das richtig verstanden habe, dann ist der 2te nur ein folgefehler vom ersten, was ich jetzt nur nicht kapiere, in der fehlerbeschreibung vom ersten fehler steht das ich ein datafile hinzufügen muß ? af dem tablespace sind aber noch 2,8GB frei ???

kann mir da einer erklären was ich damit anfangen soll ?

grüße

chris

Hallo Chris!

Es ist bei diesem Fehler nicht nicht ganz unerheblich, welche Oracle-Version du verwendest. Ich gehe jedenfalls mal von 8i (oder älter. solltest du dann übrigens möglichst bald upgraden, da nicht mehr supported) aus.
In der Regel sollte direkt bei der Fehlermeldung (der 1653er) noch dabeistehen welcher Tablespace betroffen ist. In deinem Fall könnte das eigentlich jeder Tablespace der Datenbank sein; aus dem Kopf (also vermutlich unvollständig) würde ich folgende Tablespaces als potentielle Quellen auflisten:

  1. Tabellendaten (also die tatsächlichen Werte des INSERTs)
  2. Tablespace mit Indices für diese Tabelle
  3. Tablespace mit Rollback Segmenten
  4. Temporary Tablespace (z.B. bei INSERT … SELECT DISTINCT…)
  5. System Tablespace (data dictionary!)

Was ich also tun würde:

  1. Tablespace, der den Fehler verursacht, lokalisieren
  2. Dem betroffenen Tablespace mehr Platz verschaffen (Stichworte: ADD DATAFILE, RESIZE, AUTOEXTEND, MAXSIZE)

Stehe natürlich für Rückfragen gerne zur Verfügung.

Gruß,
Martin

Hallo Martin,

schön das du dir immer wieder so viel Mühe mit mir gibst ! :smile:

ja, die DB ist eine 8.1.7, ob die ein upgrade bekommt und wann weiß ich nicht, das ist hier zu politisch um das selbst zu entscheiden

ich habe schon gesehen das ich beim kopieren eine zeile drunter hätte mitnehmen müssen, da stand dann auch der Tablespace dabei.

ich habe auch schon geschaut, bei dem Tablespace sind noch 2,8GB frei, die einzelnen datafiles werden jedoch recht unterschiedlich befüllt. eines davon ist zu 100% voll, die davor oder dahinter haben jedoch noch platz. (?)
hängt das mit der unterschiedlichen größe der extents zusammen ?

dann habe ich noch eine frage…

in der zweiten Fehlermeldung wird das rollbacksegment7 erwähnt.
laut dba_rollback_segs habe ich jedoch nur RBS1 - RBS6 ?

kann es sein das die bei ihrem script speziell das RBS7 angesprochen haben und nur nicht wußten das dieses nicht existiert ?

in der zweiten Fehlermeldung wird das rollbacksegment7
erwähnt.
laut dba_rollback_segs habe ich jedoch nur RBS1 - RBS6 ?

es gibt insgesamt 8 public rbs, also vergiss was ich geschrieben habe…
mit dem rbs7 in der fehlermeldung meint oracle wohl das rbs mit der segment id 7 oder ?

noch eines…

die rbs sind wie folgt angelegt:

CREATE PUBLIC ROLLBACK SEGMENT RBS1 TABLESPACE RBS
STORAGE ( OPTIMAL 4096K );

mit storage kann ich nichts anfangen, das hab ich in meinen büchern nicht gefunden…
optimal wurde nur in verbindung mit minextents angegeben und zwar das der wert mindestens der anfangswert sein muß… da der wert maxextents nicht angegeben ist heißt das das sich die RBS nicht erweitern ?

Hallo Chris!

Mal zu deinen Rollback Segmenten (R.S.):
In der STORAGE Klausel (hier speziell für R.S.) kannst du folgende Parameter angeben:

INITIAL: Grösse des/der ersten Extents (default: 5 * DB_BLOCK_SIZE)

NEXT: Grösse der weiteren Extents (default: siehe INITIAL, DEFAULT des Tablespaces)

MINEXTENTS: Anzahl der ersten Extents (default: bei R.S. 2)

MAXEXTENTS: max. Anz. der Extents (default: Abhängig DB_BLOCK_SIZE)

OPTIMAL: Die Größe des R.S., die du als „optimal“ erachtest. Oracle versucht dann die R.S. bis zu diesem Wert zu verkleinern (aber nicht darunter), indem es leere Extents wieder freigibt (Anm.: Leere Extents bleiben sonst immer stehen). Was man damit erreichen will: Wenn ein R.S. durch eine grosse Transaktion sozusagen aufgeblasen wurde, dann beansprucht das im jeweiligen Tablespace bis in alle Ewigkeit den Platz für die Abwicklung dieser Transaktion. Da das oft nicht gewünscht ist weist man Oracle eben an, den nicht benötigten Platz wieder freizugeben.

Zu MAXEXTENTS: Die R.S. wachsen bis zur Größe, die sich aus dem default für MAXEXTENTS ergibt. Wenn das nicht reicht (oder z.B. der Platz im Tablespace/Datafile ausgeht), dann erhält die betroffene Transaktion die Fehlermeldung, dass da nix mehr geht, die Transktion wird beendet und Oracle gibt die (jetzt ja nicht mehr benötigten) Extents wieder frei.

mit storage kann ich nichts anfangen, das hab ich in meinen
büchern nicht gefunden…

Schau mal in der Beschreibung von CREATE TABLE, CREATE INDEX, CREATE xyz nach, da solltest du zumindest einen Querverweis auf die STORAGE Klausel finden.

Gruß,
Martin

Hi Chris!

schön das du dir immer wieder so viel Mühe mit mir gibst ! :smile:

Macht man doch gerne, dafür ist w-w-w schließlich auch da…

ja, die DB ist eine 8.1.7, ob die ein upgrade bekommt und wann
weiß ich nicht, das ist hier zu politisch um das selbst zu
entscheiden

8.1.7 ist eh o.k., es ging mir nur darum darauf hinzuweisen, dass alles davor nicht mehr supported ist.

ich habe schon gesehen das ich beim kopieren eine zeile
drunter hätte mitnehmen müssen, da stand dann auch der
Tablespace dabei.

Ähm, und das ist jetzt welcher Tablespace (der mit den Tabellendaten, Indexdaten, System, Rollback …)?

ich habe auch schon geschaut, bei dem Tablespace sind noch
2,8GB frei, die einzelnen datafiles werden jedoch recht
unterschiedlich befüllt. eines davon ist zu 100% voll, die
davor oder dahinter haben jedoch noch platz. (?)

Die Gesamtgrösse an freiem Platz sagt im Prinzip erstmal gar nichts aus. Das Problem ist nämlich, dass du unter Umständen zwar 500 GB frei hast, der größte zusammenhängende freie Block aber nur 100 KB ist. Wenn jetzt ein Extent mit 128 KB angelegt werden soll, dann geht das schon mal schief. Das könntest Du mal in DBA_FREE_SPACE prüfen. Weiters ist natürlich interessant, wieviel Platz da beansprucht werden soll. Sieh dir also mal das betroffene Segment an (Wenn da ein PCT_INCREASE>0 drinnen steht, dann müsstest du allerdings zusätzlich noch wissen, die wievielte Allozierung da fehlschlägt…).

Prinzipiell interessant zur Lösung Deines Problems: Wie sieht der betroffene Tablespace aus, dessen Datenfiles und der Platz auf der Platte…

dann habe ich noch eine frage…

in der zweiten Fehlermeldung wird das rollbacksegment7
erwähnt.
laut dba_rollback_segs habe ich jedoch nur RBS1 - RBS6 ?

Der Siebener bezieht sich (wie du in deinem nächsten Posting richtig vermutest) auf die Id des Segments.

kann es sein das die bei ihrem script speziell das RBS7
angesprochen haben und nur nicht wußten das dieses nicht
existiert ?

Das ginge nur mit einem SET TRANSACTION USE ROLLBACK SEGMENT rbs. Der allerdings bringt einen Fehler wenn es das Rollback Segment „rbs“ nicht gibt.

Gruß,
Martin

Hi Martin,

Ähm, und das ist jetzt welcher Tablespace (der mit den
Tabellendaten, Indexdaten, System, Rollback …)?

Es handelt sich um den Datentablespace

Die Gesamtgrösse an freiem Platz sagt im Prinzip erstmal gar
nichts aus. Das Problem ist nämlich, dass du unter Umständen
zwar 500 GB frei hast, der größte zusammenhängende freie Block
aber nur 100 KB ist. Wenn jetzt ein Extent mit 128 KB angelegt
werden soll, dann geht das schon mal schief. Das könntest Du
mal in DBA_FREE_SPACE prüfen.

also die 128k waren ja gut geraten, lt. installationsscripten werden extents von 128k angelegt, pctincrease ist 0
den View BBA_FREE_SPACE habe ich mir angesehen, aber da kann ich leider nichts mit anfangen. aber in den einzelnen DBF des Tablespace sind zwischen 550KB und 220MB Frei. das sollte also eigentlich reichen um noch das ein oder andere extent zu erstellen, oder ?

Weiters ist natürlich
interessant, wieviel Platz da beansprucht werden soll. Sieh
dir also mal das betroffene Segment an (Wenn da ein
PCT_INCREASE>0 drinnen steht, dann müsstest du allerdings
zusätzlich noch wissen, die wievielte Allozierung da
fehlschlägt…).

wieviele daten da neu dazu kommen weiß ich leider nicht, mit „Segment“ oder „die wievielte Allozierung“ kann ich leider nichts anfangen…

Prinzipiell interessant zur Lösung Deines Problems: Wie sieht
der betroffene Tablespace aus, dessen Datenfiles und der Platz
auf der Platte…

also, der Tablespace besteht aus 27 .DBF mit der Größe 2048M (SIZE 2048M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2048M
DEFAULT STORAGE ( INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0):wink:
Auf der Platte sind derzeit noch 30GB frei

Bisher habe ich mal vorsorglich ein DBF dem Datentablespace hinzu gefügt und habe beim Rollbacktablespace ein DBF erweitert das statt 2048 nur 204 MB groß war

du würdest das wahrscheinlich als „fischen im Trüben“ bezeichnen, aber das war so das erste was mir zu dem Problem eingefallen ist.

Grüße

Chris

Hallo Chris!

Erstmal die (grobe) Struktur von Daten in einer Oracle DB (von der kleinsten Einheit zur grössten):

Block
 |
 v
Extent
 |
 v
Segment
 |
 v
Datafile
 |
 v
Tablespace
 |
 v
Instance
 |
 v
Database

Eine Datenbank besteht also aus einer oder mehreren Instances, diese wiederum aus mehreren Tablespaces usw. (von Spezialfällen habe ich jetzt mal abgesehen). Grob gesagt kann man sagen, dass ein Segment (das ist jetzt in dem Fall eine Tabelle) beim Anlegen eine bestimmte Anzahl Extents (MINEXTENTS) alloziert, die jeweils eine bestimmte Größe haben (INITIAL). Wenn der Platz in diesem Extent nicht mehr ausreicht, wird ein weiteres Extent, wiederum mit einer definierten Grösse angelegt (NEXT) und gleichzeitig die Grösse für den darauffolgenden Extent angepasst ( NEXT * ((100 + PCTINCREASE)/100) ). Deshalb ist es auch relevant zu wissen die wievielte Allozierung eines Extents fehlgeschlagen ist, weil der Extent, den Oracle anzulegen versucht bei PCTINCREASE größer 0 eben nicht die Grösse hat, die in DBA_TABLES aktuell zu sehen ist (der nächste schon, aber der übernächste ist dann aben um PCTINCREASE Prozent grösser). Ich hoffe das war jetzt einigermassen verständlich.

DBA_FREE_SPACE gibt nichts anderes an, als die Bereiche in den Datenfiles, die Oracle als leer (also für neue Extents verwendbar) bekannt sind. Da diese Bereiche entweder nicht unbedingt zusammenhängend sind oder auch zwar zusammenhängend aber nicht als solches erkannt sind, kann es passieren, dass Oracle im Extremfall es nicht schafft, in einem absolut leeren 100GB Datenfile einen Extent von 128KB anzulegen. Den gesamten vorigen Absatz darfst du übrigens getrost vergessen, wenn du nicht dictionary managed tablespaces (unter 8i noch der default), sondern locally managed tablespaces verwendest (der neue default unter 9i und zumindest dort sehr zu empfehlen!).

Soweit also der Ausflug in die Theorie. Zurück zu deinem Problem:

also die 128k waren ja gut geraten, lt. installationsscripten
werden extents von 128k angelegt, pctincrease ist 0

Ich hoffe du hast in den Storage-Klauseln der Tabelle nachgesehen (am besten in DBA_TABLES den NEXT_EXTENT ansehen, da weisst du dann, was Oracle wirklich zu tun gedenkt).

den View BBA_FREE_SPACE habe ich mir angesehen, aber da kann
ich leider nichts mit anfangen.

Vielleicht hilft dir ja der kleine Ausflug oben…

aber in den einzelnen DBF des
Tablespace sind zwischen 550KB und 220MB Frei. das sollte also
eigentlich reichen um noch das ein oder andere extent zu
erstellen, oder ?

Das ist richtig.

also, der Tablespace besteht aus 27 .DBF mit der Größe 2048M

Warum eigentlich so viele Datenfiles? Sind die auch alle verfügbar (STATUS = AVAILABLE in DBA_DATA_FILES)?

(SIZE 2048M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2048M

Die Grössenangabe ist etwas eigenwillig: Er soll ein Datenfile von 2GB Grösse anlegen (oder falls File vorhanden dieses verwenden), das sich bei Bedarf in Schritten von 50MB vergrössern soll, allerdings nur bis zu einer maximalen Grösse von 2GB…

DEFAULT STORAGE ( INITIAL 128K NEXT 128K MINEXTENTS 1
MAXEXTENTS UNLIMITED PCTINCREASE 0):wink:

Das sieht per se schon mal ok aus.

Auf der Platte sind derzeit noch 30GB frei

Bisher habe ich mal vorsorglich ein DBF dem Datentablespace
hinzu gefügt und habe beim Rollbacktablespace ein DBF
erweitert das statt 2048 nur 204 MB groß war

Hat’s geholfen?

du würdest das wahrscheinlich als „fischen im Trüben“
bezeichnen, aber das war so das erste was mir zu dem Problem
eingefallen ist.

Nö, Lösungsweg ist schon ok. Als einer, der mal zum Guru werden will solltest du jetzt aber - wenn’s denn funktioniert hat - noch herausfinden WARUM, bzw. warum es vorher nicht ging, obwohl es auf den ersten Blick ja gehen hätte sollen. Nur das hilft dir dann nämlich dieses Problem schon proaktiv zu lösen, bevor es das nächste mal auftritt. Dabei kann ich dir gerne helfen, bzw. natürlich auch, wenn das Problem jetzt immer noch auftritt.

Gruß,
Martin

Hallo Chris!

Erstmal die (grobe) Struktur von Daten in einer Oracle DB (von
der kleinsten Einheit zur grössten):

ok, das hatte ich schon mal durch … segment ist eine oraclegröße un nicht an Datenbankfiles gebunden…?!

DBA_FREE_SPACE gibt nichts anderes an, als die Bereiche in den
Datenfiles, die Oracle als leer (also für neue Extents
verwendbar) bekannt sind.

ok, ich glaube die angaben in dem view habe ich verstanden die file_id gibt die id des DBF an und zusätzlich ist die angabe dann wahrscheinlich noch in segmente unterteilt und man kann sich den restspeicherplatz der einzelnen segmente ansehen ?

Ich hoffe du hast in den Storage-Klauseln der Tabelle
nachgesehen (am besten in DBA_TABLES den NEXT_EXTENT ansehen,
da weisst du dann, was Oracle wirklich zu tun gedenkt).

DBA_Tables: Tabelle tr_tfz_zeitpunkt; next_extent 209715200
also bin ich wohl dem Trugschluß aufgelegen das die Extentangaben beim Create Tablespace sich auf die Tabellen übertragen…

also, der Tablespace besteht aus 27 .DBF mit der Größe 2048M

Warum eigentlich so viele Datenfiles? Sind die auch alle
verfügbar (STATUS = AVAILABLE in DBA_DATA_FILES)?

ja, die sind alle verfügbar

(SIZE 2048M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2048M

Die Grössenangabe ist etwas eigenwillig: Er soll ein Datenfile
von 2GB Grösse anlegen (oder falls File vorhanden dieses
verwenden), das sich bei Bedarf in Schritten von 50MB
vergrössern soll, allerdings nur bis zu einer maximalen Grösse
von 2GB…

ja, das ist etwas kompliziert, die Scripte für die Instanz kommen vom Softwarelieferant, und da stand das wahrscheinlich auf maxsize unlimited. da hat unsere Betriebsführung aber was gegen und dann wird das halt dementsprechend einfach im keim erstickt…

Bisher habe ich mal vorsorglich ein DBF dem Datentablespace
hinzu gefügt und habe beim Rollbacktablespace ein DBF
erweitert das statt 2048 nur 204 MB groß war

Hat’s geholfen?

weiß ich nicht, ich hab noch keinerlei Rückmeldung

du würdest das wahrscheinlich als „fischen im Trüben“
bezeichnen, aber das war so das erste was mir zu dem Problem
eingefallen ist.

Nö, Lösungsweg ist schon ok. Als einer, der mal zum Guru
werden will solltest du jetzt aber - wenn’s denn funktioniert
hat - noch herausfinden WARUM, bzw. warum es vorher nicht
ging, obwohl es auf den ersten Blick ja gehen hätte sollen.
Nur das hilft dir dann nämlich dieses Problem schon proaktiv
zu lösen, bevor es das nächste mal auftritt. Dabei kann ich
dir gerne helfen, bzw. natürlich auch, wenn das Problem jetzt
immer noch auftritt.

also wenn ich das jetzt richtig verstanden habe, dann wollte die tabelle ein extent der größe 209715200 erstellen (das wären dann 209.715.200 = 209MB ?) und es gab für diese größe keinen zusammenhängenden speicher mehr im Tablespace…

so ganz verstehe ich zwar noch nicht warum dann das rollback segment 7 vollgelaufen ist aber ich vermute jetzt mal das die anderen schon gefüllt waren und der rettende Commit; gefehlt hat … oder ?

wie gut sind die schlußfolgerungen ?

grüße

chris

Gruß,
Martin

Hallo Chris!

ok, das hatte ich schon mal durch … segment ist eine
oraclegröße un nicht an Datenbankfiles gebunden…?!

Ein Segment ist eine logische Einheit innerhalb der Datenbank. Unter Oracle 8i gibt es folgende Segmentarten:
INDEX PARTITION, TABLE PARTITION, TABLE, CLUSTER, INDEX, ROLLBACK, DEFERRED ROLLBACK, TEMPORARY, CACHE, LOBSEGMENT und LOBINDEX
Ein Segment liegt immer innerhalb eines bestimmten Tablespaces, aber nicht notwendigerweise innerhalb eines einzelnen Datenfiles. Es ist (mehr oder weniger) einfach nur die Summer aller Extents, die für das gegebene Objekt alloziert sind.

ok, ich glaube die angaben in dem view habe ich verstanden die
file_id gibt die id des DBF an und zusätzlich ist die angabe
dann wahrscheinlich noch in segmente unterteilt und man kann
sich den restspeicherplatz der einzelnen segmente ansehen ?

Also DBA_FREE_SPACE hat folgende Spalten:
TABLESPACE_NAME
Der Name des Tablespaces, zu dem der freie Extent (d.h. die Gruppe von hintereinanderliegenden Blocks, die Oracle als verfügbar markiert hat) gehört. (–>DBA_TABLESPACES)
FILE_ID
Die ID des DB Files (–>DBA_DATA_FILES)
BLOCK_ID
Die ID des Blocks, an dem der freie Extent beginnt (brauchst du eher nicht).
BYTES
Eh klar.
BLOCKS
Anzahl der freien Blocks.
RELATIVE_FNO
Da schweigt sich die Doku aus. Brauchst du jedenfalls nicht…

Mit Segmenten hat der View gar nichts am Hut. Wie sehr die Extents innerhalb eines Segments gefüllt sind findest du am Besten mit dem Package DBMS_SPACE heraus (aber da sind wir dann eigentlich schon ziemlich weit im Bereich von Feintuning).

DBA_Tables: Tabelle tr_tfz_zeitpunkt; next_extent 209715200
also bin ich wohl dem Trugschluß aufgelegen das die
Extentangaben beim Create Tablespace sich auf die Tabellen
übertragen…

Bei Dictionary managed tablespaces wird überhaupt nur der NEXT-Teil des Tablespaces berücksichtigt, und das auch nur, wenn beim Anlegen der Tabelle (oder später mittels ALTER TABLE) nix anderes angegeben wurde. Die Angaben in DBA_TABLESPACES sind also nur als Default-Werte zu lesen.

(SIZE 2048M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2048M

Die Grössenangabe ist etwas eigenwillig: Er soll ein Datenfile
von 2GB Grösse anlegen (oder falls File vorhanden dieses
verwenden), das sich bei Bedarf in Schritten von 50MB
vergrössern soll, allerdings nur bis zu einer maximalen Grösse
von 2GB…

ja, das ist etwas kompliziert, die Scripte für die Instanz
kommen vom Softwarelieferant, und da stand das wahrscheinlich
auf maxsize unlimited. da hat unsere Betriebsführung aber was
gegen und dann wird das halt dementsprechend einfach im keim
erstickt…

Das würde ich eher beim Softwarelieferant urgieren, als es dann selbst zu ändern. Es kommt immer wieder vor, dass sich die SW-Hersteller bei ihren DB-Parametern etwas überlegen (obwohl mir da die Erfahrung entschieden anderes sagt…). Wenn er keine Ahnung hat, warum er das so tut, dann kann man’s immer noch ändern.
Ich persönlich werde immer ausgesprochen böse, wenn mir jemand in meiner DB herumpfuscht :wink:. Im Prinzip geht es da halt auch um Wartbarkeit. Wenn ich meine DB mit einem bestimmten Konzept erstelle, dann verlasse ich mich in der Regel auch bei der Fehlersuche einmal darauf, dass die DB auch wirklich so aussieht. Wenn der Kunde da etwas geändert hat, dann kommst du in die unangenehme Lage, dem Kunden erklären zu müssen, warum er trotz Wartungsvertrag eine Fehlerbehebung zahlen soll (die Zeit nämlich, die du vergammelt hast um draufzukommen, dass du von falschen Voraussetzungen ausgehst).

Hat’s geholfen?

weiß ich nicht, ich hab noch keinerlei Rückmeldung

Im Fall des Falles einfach melden…

also wenn ich das jetzt richtig verstanden habe, dann wollte
die tabelle ein extent der größe 209715200 erstellen (das
wären dann 209.715.200 = 209MB ?) und es gab für diese größe
keinen zusammenhängenden speicher mehr im Tablespace…

Das ist von mir aus gesehen der wahrscheinlichste Grund für den Fehler. Muss aber nicht sein.

so ganz verstehe ich zwar noch nicht warum dann das rollback
segment 7 vollgelaufen ist aber ich vermute jetzt mal das die
anderen schon gefüllt waren und der rettende Commit; gefehlt
hat … oder ?

Eine Transaktion verwendet immer nur EIN Rollback Segment. Aber auch dieses kann natürlich volllaufen. Da ist es dann eigentlich völlig unerheblich, ob die anderen leer sind oder nicht. Wenn die Anzahl der Transaktionen grösser ist, als die Anzahl der RBS, dann verwenden durchaus auch mal mehrere Transaktionen das gleiche Rollback Segment, was den Prozess natürlich nochmal verkürzt.
Der Commit muss nicht notwendigerweise wirklich fehlen (also vergessen worden sein). Mitunter kann ein Commit nicht sinnvoll in einem grösseren INSERT (oder DELETE/UPDATE) abgesetzt werden. Dann muss man halt dafür sorgen, dass die RBS entsprechend gross sind. Im Extremfall kann es auch angebracht sein, eigens für eine bestimmte Transaktion ein (wirklich grosses) RBS anzulegen und dieses der Transaktion dezidiert zuzuweisen.

Gruß,
Martin

Hi Martin

Eine Transaktion verwendet immer nur EIN Rollback Segment.
Aber auch dieses kann natürlich volllaufen. Da ist es dann
eigentlich völlig unerheblich, ob die anderen leer sind oder
nicht. Wenn die Anzahl der Transaktionen grösser ist, als die
Anzahl der RBS, dann verwenden durchaus auch mal mehrere
Transaktionen das gleiche Rollback Segment, was den Prozess
natürlich nochmal verkürzt.
Der Commit muss nicht notwendigerweise wirklich fehlen (also
vergessen worden sein). Mitunter kann ein Commit nicht
sinnvoll in einem grösseren INSERT (oder DELETE/UPDATE)
abgesetzt werden. Dann muss man halt dafür sorgen, dass die
RBS entsprechend gross sind. Im Extremfall kann es auch
angebracht sein, eigens für eine bestimmte Transaktion ein
(wirklich grosses) RBS anzulegen und dieses der Transaktion
dezidiert zuzuweisen.

Naja, bis jetzt hat die größe der RBS immer gereicht…
wahrscheinlich ist das auch nur vollgelaufen wg. dem vorangegangenen fehler, sonst wäre da nix passiert…

Ich danke vielmals für die Unterrichtsstunden und die super Hilfe !!!

Grüße

Christian