Geschichte der 
  Familie Durben
History of 
  Family Durben
Tipps und Tricks für Oracle Datenbanken

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:

OE =
  (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SERVICE_NAME = OE)
   )
  )
 

Im obigen Beispiel hat die Instanz der Primärdatenbank den Namen "OE"  und ist unter diesem Namen als Service erreichbar.

2. Schritt: Datenbank-Link erstellen

Erstellen Sie einen Datenbank-Link zur Primärdatenbank. Dieses Kommando  muss in der Primärdatenbank ausgeführt werden!

CREATE PUBLIC DATABASE LINK oe.de.oracle.com CONNECT TO scott IDENTIFIED BY tiger USING 'OE'; 
 

In diesem Beispiel wurde als Zielschema das Beispielschema SCOTT gewählt.

3. Schritt: Synonym erstellen

Jetzt muss noch das Synonym erstellt werden. Auch dieses Kommando muss in der Primärdatenbank laufen.

CREATE SYNONYM emp_dml for emp@oe.de.oracle.com;
 

Dieses Synonym soll eine Datenänderung für die Tabelle EMP auf der Active Standby Datenbank ermöglichen.

Test

Jetzt zeigt der folgende Test das Ergebnis:
Ein direktes Update auf die Tabelle EMP ergibt den Fehler

SQL> update emp set sal=sal+1;
update emp set sal=sal+1;
       *
ERROR at line 1:
ORA-16000: database open for read-only access
 

Ein Update auf das Synonym EMP_DML ergibt folgendes Ergebnis:

SQL> update emp_dml set sal=sal+1;

14 rows updated.
 

Mit dem oben beschriebenen kleinen Kunstgriff lassen sich also durchaus  Datenänderungen in der READ ONLY Datenbank durchführen.

Zurück zur Tippübersicht

Zurück zur Tippübersicht

[Home] [Impressum] [Oracle Tipps und Tricks]