Datenänderungen in einer Oracle Active Standby Datenbank Ralf Durben, 18.08.2010
Eine Oracle Active Standby Datenbank ist eine spezielle Variante von Standby-Lösungen mit Oracle Data Guard. Dabei ist die Standby-Datenbank einerseits READ ONLY geöffnet, wird aber gleichzeitig über Log-Dateien, die von der Primärdatenbank kommen, aktualisiert.
Mit dieser Technik kann man unter anderem die Leselast von einem operationalen System herunternehmen, indem die lesenden Anwendungen auf eine Active Standby Datenbank umgeleitet werden. Da in Oracle Data Guard bis zu 20 Standby Datenbanken (Stand Oracle 11g Release 2) erstellt werden können und diese auch noch im Cluster (z.B. RAC), kann die Leselast quasi beliebig skaliert werden.
Gute Anwendungsmöglichkeiten ergeben sich zum Beispiel für Auftragsverfolgungs- oder Buchungssysteme.
Im Detail gibt es dabei aber ein kleines Problem: Die meisten Anwendung greifen nicht nur lesend auf die Datenbank zu. Teilweise werden temporäre Daten geschrieben oder eben Buchungen getätigt. Und das ist in einer READ ONLY Datenbank nun einmal nicht möglich - zumindest nicht direkt. Es gibt nämlich einen Weg durch Verwendung von Datenbank-Links
Die Idee ist recht simpel: Die Anwendung schickt das Kommando zur Datenänderung an die Active Standby Datenbank. Die Datenänderung wird jedoch umgeleitet und findet in der Primärdatenbank statt. über den Log-Tranfer vom Standby-Mechanismus gelangt die Datenänderung mit einer kurzen Verzögerung zur Standby Datenbank:
Wichtig ist, dass die Datenbank-Links in der Primärdatenbank erstellt werden müssen, denn in der Active Standby Datenbank, die ja READ ONLY geöffnet ist, funktioniert das nicht. Zusätzlich zum Datenbank-Link wird ein Synonym erstellt, dass für die Anwendung ein Platzhalter ist, um die Datenänderung umzuleiten.
Das folgende Beispiel macht es deutlich:
1. Schritt: Erstellen eines TNS-Alias in der tnsnames.ora
Der Datenbank-Link, der auf die Primärdatenbank verweisen soll, verwendet einen TNS-Alias. Dazu erstellen Sie (falls noch keine existiert) im Verzeichnis "$ORACLE_HOME/network/admin" eine Datei namens "tnsnames.ora". Die Datei muss sowohl auf Primär- als auch auf Standbyseite existieren. Der Inhalt sollte ungefähr so aussehen:
|