Neue Anwendungsmöglichkeiten für Standby Datenbanken: Active Data Guard für mehr Performance
von Ralf Durben, ORACLE Deutschland B.V. & Co. KG
Standby Datenbanken werden normalerweise im Zusammenhang mit Hochverfügbarkeit und Disaster Recovery gesehen: Im Falle eines gravierenden Fehlers auf der Seite der Produktionsdatenbank soll die Standby-Datenbank die Arbeit möglichst schnell übernehmen. Das Konzept von Standby-Datenbanken kann aber viel mehr und Oracle hat sich mit diesem Thema in zwei ausgesprochen interessanten Funktionsbereichen beschäftigt. In diesem Tipp wird einer dieser Funktionsbereiche beleuchtet, der vor allem auch bei Performance Problemen eine interessante Lösung darstellen kann: Die Active Standby-Datenbank, auch Active Data Guard genannt.
Was ist eine Active Standby Datenbank?Eine Active Standby Datenbank ist eine nur-lesend geöffnete Standby Datenbank, die gleichzeitig per Redo Log Apply (also Recovery) aktualisiert wird. Diese Standby Datenbank wird also ständig mit den neuesten Datenänderungen, die in der Primärdatenbank stattgefunden haben, versorgt, während lesend auf diesen Datenbestand zugegriffen werden kann. Damit kann also die Last durch Lese-Transaktionen von der Primär-Datenbank zur Standby-Datenbank verlagert werden. Da für eine Primär-Datenbank bis zu 20 Standby-Datenbanken erstellt und jeweils auch als RAC betrieben werden können, kann durch die Active Standby Datenbank also praktisch unendlich große Lese-Performance erreicht werden.Durch kleine Tricks ist es aber auch möglich eine Active Standby Datenbank für Schreibtransaktionen zu nutzen. Dieses wird weiter unten genau anhand eines Beispiels beschrieben. An dieser Stelle ein wichtiger Lizenzhinweis: Die Active Standby Datenbank ist eine Option der Oracle Datenbank Enterprise Edition, muss also separat lizenziert werden und zwar sowohl für die Primär- als auch für die Active Standby Datenbank. Wozu können Active Datenbank eingesetzt werden?Die Active Standby Datenbank ist ja eine Kopie der Primär-Datenbank, die ständig aktualisiert wird. Auch wenn der Datenbestand nicht sekundenaktuell ist, gibt es folgende Anwendungsmöglichkeiten
Welche Voraussetzungen sind für eine Active Standby Datenbank erforderlich?Sie benötigen
Wie wird eine Standby Datenbank zur Active Standby Datenbank?In dem folgenden Beispiel wurde die physikalische Standby Datenbank schon angelegt. Sie befindet sich im normalen Standby-Betriebszustand, also im MOUNT-Stadium mit Redo Log Apply. Im Beispiel soll das Umschalten in SQL*Plus gezeigt werden. Gleichzeitig wird der Zustand der Data Guard Konfiguration in DGMGRL gezeigt.$ dgmgrl DGMGRL for Linux: Version 11.2.0.1.0 - Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. DGMGRL> connect sys/password@OE Connected. DGMGRL> show configuration Configuration - OE Protection Mode: MaxAvailability Databases: OE - Primary database OE1 - Physical standby database OE2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS DGMGRL> show database "OE2" Database - OE2 Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds Apply Lag: (unknown) Real Time Query: OFF Instance(s): OE2 Database Status: SUCCESSJetzt wird die Standby Datenbank konvertiert mit SQL> ALTER DATABASE OPEN; Database altered. SQL> SELECT STATUS FROM v$instance; STATUS ------------ OPENDie Datenbank ist jetzt geöffnet. Diese einfache Syntax gilt für Oracle Database 11g Release 2 und höher und auch nur, wenn die Data Guard Umgebung mit dem Data Guard Broker betrieben wird. In Oracle Database 11g Release 1, oder wenn kein Data Guard Broker zum Einsatz kommt, sieht es etwas anders aus: SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE OPEN; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; SQL> SELECT STATUS FROM v$instance; STATUS ------------ OPENDie Aktivierung mit Grid Control wird weiter unten beschrieben. Der Zustand der Datenbank "OE2" sich jetzt geändert: DGMGRL> show database "OE2" Database - OE2 Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds Apply Lag: (unknown) Real Time Query: ON Instance(s): OE2 Database Status: SUCCESSDatenbankintern wird das Feature der Active Standby Datenbank auch "Real Time Query" bezeichnet. Wie Sie also oben sehen ist dieser Modus jetzt eingeschaltet (im Vergleich zu oben, wo Real Time Query OFF war). Dieses können Sie in der Datenbank auch direkt abfragen mit SQL> SELECT open_mode FROM V$DATABASE; -------------------- OPEN_MODE READ ONLY WITH APPLYEs sind jetzt normale Leseoperationen möglich: SQL> select * from scott.dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON Was muss jetzt getan werden, um das automatische Blockrepair einzuschalten?Die Antwort ist ganz einfach: Nichts!Das automatische Blockrepair ist durch die Existenz einer Active Standby Datenbank automatisch eingeschaltet. Voraussetzung ist nur, dass die Data Guard Umgebung mit dem Data Guard Broker betrieben wird. Dieses wird aber auch grundsätzlich empfohlen! Wie können Schreib-Transaktionen auf eine Active Standby Datenbank angewendet werden?Hinweis an die Reviewer: Dieses ist eine modifizierte Einbettung eines Tipps, den ich schon seit letztem Jahr auf meiner privaten Webseite habe. Wenn dieser Tipp hier zu lang erscheint, koennte hier auch einfach nur eine Verlinkung erfolgen. Ich waere fuer Eure Meinung dankbar.Anwendungen, wie zum Beispiel Online Shops, greifen nicht nur lesend auf die Datenbank zu, sollen aber auch eine Active Standby Datenbank nutzen können. 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 accessEin 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. Weitere Details dazu gibt es auch in dem Whitepaper "Oracle Active Data Guard Oracle Data Guard 11g Release 1". Wie wird Active Standby Datenbank deaktiviert, also wieder zur normalen Standby Datenbank?Sie können die Active Standby Datenbank auch wieder in eine normale Standby Datenbank zurückverwandeln, indem Sie die Datenbank herunterfahren und dann in das Stadium MOUNT hochfahren:SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 313860096 bytes Fixed Size 1336232 bytes Variable Size 247467096 bytes Database Buffers 58720256 bytes Redo Buffers 6336512 bytes Database mounted.In DGMRGL wird dann der Status der Datenbank so angezeigt: DGMGRL> show database "OE2" Database - OE2 Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds Apply Lag: (unknown) Real Time Query: OFF Instance(s): OE2 Database Status: SUCCESSDie Datenbank ist jetzt wieder eine normale physikalische Standby Datenbank. Die Deaktivierung mit Grid Control wird weiter unten beschrieben. Wie wird eine Standby Datenbank zur Active Standby Datenbank mit Grid Control?Navigieren Sie zum Data Guard überblick einer Primärdatenbank. Wählen Sie eine der Standby Datenbanken aus. Die Spalte "Real Time Query" zeigt an, ob diese Datenbank schon eine Active Standby Datenbank ist (ENABLED), oder nicht (DISABLED). Klicken Sie für die ausgewählte Datenbank auf den Link "Disabled".Im folgenden Screen aktivieren Sie die Checkbox "Enable Real-time Query" ,klicken auf "Apply" und Grid Control aktiviert die Active Standby Datenbank Wie wird eine Active Standby Datenbank zur Standby Datenbank mit Grid Control?Navigieren Sie zum Data Guard überblick einer Primärdatenbank. Wählen Sie eine der Standby Datenbanken aus. Die Spalte "Real Time Query" zeigt an, ob diese Datenbank schon eine Active Standby Datenbank ist (ENABLED), oder nicht (DISABLED). Klicken Sie für die ausgewählte Datenbank auf den Link "Enabled".Im folgenden Screen deaktivieren Sie die Checkbox "Enable Real-time Query" ,klicken auf "Apply" und Grid Control deaktiviert die Active Standby Datenbank. FazitMit der Active Standby Datenbank eröffnen sich viele neue und interessante Einsatzmöglichkeiten von Standby Datenbanken. Sie können damit die Lese-Last durch Reporting, ETL-Prozesse, Erstellen von Backups, Online Kataloge und Online Shops oder Autragsverfolgungssysteme aus der Produktivdatenbank herausnehmen und dadurch die Performance der Produktivdatenbank steigern bzw. stabilisieren. Das automatische Blockrepair reduziert die Anzahl von Fehlern aufgrund von korrupten Oracle Blöcken drastisch und damit auch den Aufwand für die Datenbankadministratoren. Der Einsatz von Data Guard ist also nicht mehr nur für Hochverfügbarkeitsanforderungen interessant.Lizenzhinweis: Die Active Standby Datenbank ist eine Option der Oracle Datenbank Enterprise Edition, muss also separat lizenziert werden und zwar sowohl für die Primär- als auch für die Active Standby Datenbank. |