Operationen wiederaufnehmen - Resumable Space Allocation
von Ulrike Schwinn, Oracle Deutschland B.V. & Co. KG
Operationen, die unvorhergesehen abbrechen, da sie nicht mehr über ausreichenden Speicherplatz im TEMP, UNDO oder DATA
Tablespace verfügen, führen zu erhöhtem Arbeitsaufwand. Sie müssen neu angestartet werden und beanspruchen damit insgesamt mehr Zeit als vielleicht eingeplant war.
Besonders lästig ist dies beispielsweise bei langlaufenden Ladevorgängen oder bei langwierigen INDEX CREATE Operationen.
Das Feature RESUMABLE SPACE ALLOCATION, das seit jeher in der Datenbank ohne zusätzliche Installation zur Verfügung steht, schafft Abhilfe.
So können Operationen als "resumable" angestartet werden. Bei Speicherplatz-Engpässen wird dann die Operation nicht abgebrochen, sondern
es werden Alerts generiert, damit automatisch nach der Fehlerbehebung die Operation fortgeführt werden kann. Die Datenbank selbst verwendet dieses Feature mittlerweile auch intern zum Beispiel beim Data Pump Export und Import.
Das Feature steht in jeder Edition zur Verfügung; einzige Voraussetzung ist das "Resumable" Systemprivileg.
Welche Operationen können nun in diesem speziellen Modus angestartet werden bzw. profitieren von diesem Feature? Es handelt sich dabei um:
- SELECTs, die wegen eines TEMP Tablespace Engpass abbrechen
- DML Operationen
- Export/Import und SQL*Loader Operationen
- DDL Operationen wie CREATE INDEX, CREATE TABLE oder ALTER TABLE
Typische Fehler, die zum Beispiel auftreten können, sind dabei: ORA-01653 unable to extend table ... in tablespace ... oder ORA-01536 space quota exceeded for tablespace string.
Der Ablauf einer Resumable Space Allocation Session sieht normalerweise folgendermassen aus:
- Ein Statement wird im RESUMABLE Mode angestartet. Dies geschieht durch den SYSTEM/SESSION Parameter RESUMABLE_TIMEOUT oder über
die Session-Einstellung ENABLE RESUMABLE
- Ein RESUMABLE Statement wird eine definierte Zeitdauer (TIMEOUT-Wert) angehalten (auch suspended), wenn eine der folgenden Bedingungen eintritt:
- Out of Space Bedingung
- Maximum Extents Bedingung
- Space Quota
- Die eingetretenen Fehler und der Zustand SUSPEND werden in speziellen Views wie DBA_RESUMABLE, V$SESSION_WAIT, DBA_OUTSTANDING_ALERTS und der Alert-Datei
angezeigt. Zusätzlich existiert ein AFTER SUSPEND Trigger Typ, der automatisch auf das Speicherplatz-Problem reagieren kann.
- Nach Lösung des Problems wird die gestoppte Operation weitergeführt, und das Alert "Resumable Session Suspended" wird gelöscht.
Im folgenden Beispiel wird die Session mit ENABLE RESUMABLE und einem Timeout von 3600 Sekunden (der Default ist 7200 Sekunden) angestartet.
Da der User eine begrenzte Quota hat, können wir die Wirkung von RESUMABLE Session leicht demonstrieren.
In der Alert-Datei der Datenbank findet sich nach Erreichen der Tablespace Quota folgender Eintrag:
Auch die Views DBA_RESUMABLE, V$SESSION_WAIT und DBA_OUTSTANDING_ALERTS (und somit auch die Home Page von EM Database Control)
enthalten Einträge, die auf das Alert hinweisen.
Nach der Behebung des QUOTA-Problems wird die Operation fortgesetzt und
kann erfolgreich beendet werden. Auch diese Information wird in der Alert-Datei dokumentiert.
Da gleichzeitig mit dem Eintreten des SUSPEND Mode ein Systemevent generiert wird, kann mit einem AFTER SUSPEND Trigger
auf dieses Event reagiert werden. Das Package DBMS_RESUMABLE unterstützt bei der Programmierung, da damit TIMEOUT Parameter verändert,
Fehlerinformationen abfragt oder Operationen gestoppt werden können. Folgender Trigger ist eine Beispielimplemtierung - die Dokumentation befindet
sich im Triggertext.
Hinweis: Der RESUMABLE Mode lässt sich auch systemweit über den Initialisierungspameter RESUMABLE_TIMEOUT für alle Sessions einschalten.
Dabei gibt der eingestellte Wert die TIMEOUT Zeit an - die Defaulteinstellung ist 0.
Besonders wichtig kann RESUMABLE SPACE ALLOACTION in Verbindung mit Export/Import oder SQL*Loader Operationen werden. SQL*Loader und die "alten"
Export/Import Werkzeuge stellen daher spezielle Parameter wie RESUMABLE, RESUMABLE_TIMEOUT und RESUMABLE_NAME zur Nutzung zur Verfügung.
Bei Data Pump Export und Import wird die Session mittlerweile automatisch in einen RESUMABLE Mode versetzt, wenn ein User wie z.B. SYSTEM mit EXP_FULL_DATABASE bzw.
IMP_FULL_DATABASE Rolle ausgestattet ist. Ein Blick in die View DBA_RESUMABLE oder die Alert-Datei dokumentiert diese Vorgehensweise.
Möchte man dieses Verhalten auch für Sessions nutzen, die von einem User angestartet wird, der mit weniger Privilegien ausgestattet ist, kann man den
Initialisierungsparameter RESUMABLE_TIMEOUT (siehe Hinweis) verwenden.
Weitere Informationen
Folgende Handbucheinträge können nützlich sein:
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|