Im Rahmen deiner täglichen DBA-Arbeiten ist es zuweilen nötig, bestimmte Änderungen an wichtigen Daten oder auch an Tabellenstrukturen vorzunehmen. Je nach Art, Umfang oder vorliegender Datenmenge bringen diese Änderungen möglicherweise eine längere Downtime mit sich. Zumindest ist eine deutlich spürbare Beeinträchtigung des laufenden Betriebes zu erwarten. Um genau das zu vermeiden, steht dir für die Erledigung solcher typischen Aufgaben in der Enterprise Edition das hilfreiche Feature „Online Redefinition“ zur Verfügung. In diesem DBA Tipp erläutern wir dir konkrete, praxisnahe Anwendungsfälle und sagen dir, wie du Schritt für Schritt mit dem Tool umgehst.
Die Erfordernisse für ein Reorganisieren oder Restrukturieren einer Tabelle sind vielfältig. Einige davon können vollkommen transparent erfolgen, andere beeinträchtigen zumindest den Betrieb vorübergehend, dritte bedingen eine echte Downtime. Hier einige Beispiele:
Die einzelnen Schritte für die Durchführung des Online Redefinition sind folgende:
Mittels DBMS_REDEFINITION.CAN_REDEF_TABLE
prüfst du optional, ob die entsprechende Tabelle die Voraussetzungen für ein Redefinition erfüllt. Auch für Online Redefinition gibt es einige verhindernde Einschränkungen. In der Praxis trifft man aber tendenziell eher selten darauf.
Diese Tabelle entspricht in ihrer Struktur (Spaltenzahl, ‑folge, ‑namen, ‑typen, Partitionierung, Tablespace etc.) dem gewünschten Zielzustand. Der Name der Tabelle ist irrelevant. Er wird am Ende des Redefinition durch den Namen der Ausgangstabelle ersetzt.
Mit der Procedure DBMS_REDEFINITION.START_REDEF_TABLE
initiierst du die Redefinition. Das bedeutet im Detail, dass die Ausgangstabelle in den Redefinitionstatus versetzt wird und alle Daten der Ausgangstabelle in die Interimstabelle kopiert werden. Dieser Status sorgt dafür, dass die Ausgangstabelle jetzt in keiner weiteren Redefinition verwendet werden kann. Einkommende Datenänderungen werden gepuffert und später noch auf die Interimstabelle synchronisiert. In diesem Schritt erfolgt damit die eigentliche Redefinition, also zum Beispiel Defragmentierung, Sortierung, Spaltenmapping oder Partitionierung/De-Partitionierung. Auch wenn sich die betreffende Tabelle im Redefinitionstatus befindet (und im Hintergrund ihre Daten in die Interimstabelle kopiert werden), sind SELECT
und DML
weiterhin uneingeschränkt möglich.
START_REDEF_TABLE
ist nun die Beziehung zwischen Ausgangs- und Interimstabelle hergestellt und der Datenstand zwischen den beiden Tabellen initial abgeglichen. In einem weiteren Schritt kannst du nun noch alle abhängigen Objekte der Ausgangstabelle, also Privilegien, Constraints, Trigger, Statistiken und Indizes, an die Interimstabelle kopieren. Hierzu verwendest du DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS
. Die abhängigen Objekte werden vorerst unter systemgenerierten Namen erstellt, die aber am Ende des Redefinition automatisch durch die Namen der korrespondierenden Objekte der Ausgangstabelle ersetzt werden. Es ist also nach Abschluss des Redefinition sichergestellt, dass beispielsweise benannte Indexhints oder SQL-Profile, aber auch referentielle Integritäten, weiterhin greifen und „sprechende“ Namen erhalten bleiben. Hinweis:
Sowohl in Schritt 3 als auch 4 solltest du verstärkt auf das Archivelogaufkommen achten. Beide Schritte erzeugen im Hintergrund klassisches DML/DDL und damit möglicherweise entsprechend viel Redoinformationen.
Sind die abhängigen Objekte fertig synchronisiert, schließt du das Redefinition ab. Alle Änderungen, die seit dem Start des Redefinition (mit START_REDEF_TABLE
) aufgelaufen sind, wurden zwischenzeitlich gepuffert. Dieser Puffer kann (und sollte – insbesondere, falls Kopieren der Daten oder abhängigen Objekte lange gedauert haben) mittels DBMS_REDEFINITION.SYNC_INTERIM_TABLE
abgeglichen werden.
Mit einem abschließenden DBMS_REDEFINITION.FINISH_REDEF_TABLE
beendest du das Redefinition schließlich. Lediglich an diesem Punkt werden Ausgangs- und Interimstabelle für einen kurzen Augenblick gesperrt. In diesem Schritt überträgt das Redefinition noch die letzten Daten. Abschließend werden die Namen zwischen Ausgangs- und Interimstabelle sowie allen abhängigen Objekten automatisch ausgetauscht. Unmittelbar danach steht die in Schritt 2 erzeugte Interimstabelle nun mit reorganisierten Daten oder veränderter Struktur unter dem Namen der ursprünglichen Ausgangstabelle zur Verfügung. Alle Anwendungen, die bisher Zugriff auf die Ausgangstabelle hatten, greifen nun ohne den geringsten Anpassungsaufwand auf die redefinierte Tabelle zu. Die in Schritt 2 angelegte Interimstabelle kannst du nun droppen.
Das Oracle Enterprise Edition Feature „Online Redefinition“ erlaubt eine (praktisch) unterbrechungs- und störungsfreie Reorganisation oder Redefinition von Tabellen. Unter andern Umständen (beispielsweise in einer Oracle Standard Edition) wäre das mit erheblichen Beeinträchtigungen bis hin zur kompletten Downtime der Anwendung verbunden. Dabei ist nicht nur eine reine Redefinition der Tabellenstruktur möglich. Auch performance- oder platzrelevante Wartungsarbeiten wie Defragmentierung und Verschieben von Daten kannst du über den beschriebenen Weg durchführen. Die Redefinition bleibt über ihre gesamte Laufzeit von START_REDEF_TABLE
bis FINISH_REDEF_TABLE
nach außen vollkommen transparent.
Hier findest du weitere Infos rund um Oracle oder die Oracle Enterprise Edition aus unserem News & Insights Bereich.
Share this article
Sie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen