Die Standby-Datenbank

Werbung
579869046
Die Standby-Datenbank: Data Guard aus Kundensicht (Teil IV)
Autor: Andreas Kother, ORDIX AG
In der letzten Ausgabe der DOAG News haben wir mit SQL*Plus eine logische Standby
Datenbank aufgebaut. In diesem Artikel schauen wir uns an, wie der Switchover funktioniert
und was sich mit dem Data Guard Broker vereinfachen lässt. Darüber hinaus setzen wir das
Package dbms_logstdby ein, um den Betrieb der logischen Standby Datenbank zu optimieren.
Switchover mit SQL*Plus
Der Switchover einer physikalischen Datenbank bedingt das Herunterfahren und Neustarten der
beteiligten Datenbanken. Der Switchover bei einer logischen Standby Datenbank erfolgt zur Laufzeit
der beteiligten Systeme. Um den Switchover jedoch durchführen zu können, sind zusätzlich zu den in
Teil III vollzogenen Schritten noch ein paar Kleinigkeiten zu erledigen.
Datenbank-Links anlegen
Zunächst müssen wir sowohl auf der Produktions- als auch auf der logischen Standby Datenbank
jeweils einen Datenbank-Link auf das andere System anlegen.
Auf dem Standby System:
CREATE DATABASE LINK prod CONNECT TO ak IDENTIFIED BY otto
USING 'ora1';
Auf dem Produktionssystem:
CREATE DATABASE LINK stdby CONNECT TO ak IDENTIFIED BY otto
USING 'log1';
Diese Links werden beim Switchover benötigt, um Informationen zwischen den Datenbanken
auszutauschen.
Der eigentliche Switchover lässt sich in drei Phasen unterteilen: Vorbereitung, Durchführung und
Kontrolle.
Vorbereitung
Während der Vorbereitung überprüfen wir mit Hilfe der Views V$ARCHIVED_LOG und
V$ARCHIVE_DEST_STATUS, ob es beim Transport der Log Dateien zu Problemen gekommen ist.
Sollte es beim Switchover zu Problemen kommen, so ist es hilfreich, auf der Produktionsdatenbank
die Sequenz Nummer der aktuellen RedoLog Datei zu kennen (V$LOG) und auf dem Standby System
die Sequenz Nummer derjenigen Log Datei, aus der gerade Transaktionen nachgefahren werden
(DBA_LOGSTDBY_LOG, DBA_LOGSTDBY_PROGRESS). Weiterhin sind alle aktiven Sessions an
der Produktionsdatenbank zu beenden.
Durchführung
Der eigentliche Switchover besteht aus drei Schritten:
Schritt 1:
Auf dem Produktionssystem wird der Switchover mit folgendem Kommando eingeleitet:
ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
Schritt 2:
Anschließend sorgen wir mit ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=DEFER; dafür,
dass das Archivieren auf die bisherige Standby Datenbank beendet wird.
Auf dem Standby System sollte die Abfrage
SELECT ‘FOUND’ FROM DBA_LOGSTDBY_EVENTS
WHERE EVENT_TIME = ( SELECT MAX(EVENT_TIME) FROM DBA_LOGSTDBY_EVENTS )
Seite 1 von 5
579869046
AND STATUS_CODE = 16128;
das Ergebnis FOUND zurückgeben. Alternativ können wir ORA-16128 auch in der letzten Zeile der
alert Datei der Standby Datenbank finden.
Schritt 3:
Vor dem Switchover schalten wir mit einem ALTER SYSTEM Kommando die Archivierung auf die
neue Standby Datenbank ein.
Mit dem Kommando
ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL PRIMARY;
wird die bisherige Standby Datenbank zur Produktionsdatenbank.
Abgeschlossen wird der Vorgang durch das Kommando
ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY stdby;
Kontrolle
Mittels der View V$ARCHIVE_DEST und V$ARCHIVE_DEST_STATUS kontrollieren wir, ob die
Archivierung der neuen Produktionsdatenbank wie vorgesehen läuft. Weiterhin benutzen wir wieder
die Views DBA_LOGSTDBY_LOG und DBA_LOGSTDBY_PROGRESS, um uns vom Fortschritt des
Log Apply auf dem neuen Standby System zu überzeugen.
Interessante Prozeduren im Package dbms_logstdby
Das Package dbms_logstdby bietet eine Anzahl interessanter Prozeduren für verschiedene Zwecke
an. So lassen sich beispielsweise mit der Prozedur dbms_logstdby.skip Filter definieren, so dass DDLund/oder DML Kommandos für bestimmte Tabellen in der logischen Standby Datenbank nicht
ausgeführt werden. Darüber hinaus lassen sich auch Kommandos wie create oder alter tablespace
herausfiltern.
Ist auf dem Produktionssystem das Attribut DELAY bei dem Parameter LOG_ARCHIVE_DEST_n
gesetzt, so können wir das mit der Prozedur dbms_logstdby.apply_unset übersteuern.
Eine weitere interessante Prozedur ist dbms_logstdby.apply_set mit dem Parameter
transaction_consistency. Hierbei gilt es, drei Fälle zu unterscheiden, die sich einerseits auf die
Verarbeitungsgeschwindigkeit und andererseits auf die Konsistenz auswirken.
Full Consistency:
Hierbei werden die Transaktionen in der Reihenfolge der sogenannten commit SCN ausgeführt.
Read Only:
Die Transaktionen werden im Normalfall unsortiert ausgeführt. In regelmäßigen Abständen wird die
richtige Reihenfolge jedoch wiederhergestellt. Dies bringt gegenüber dem ersten Fall einen
Geschwindigkeitsvorteil.
None:
Hierbei werden alle Transaktionen unsortiert ausgeführt. Daraus resultiert die beste
Verarbeitungsgeschwindigkeit. Dies kann jedoch schon mal zu inkonsistenten Ergebnissen bei
Leseoperationen führen.
Der Standardwert ist Full Consistency. Zwar arbeitet die Standby Datenbank die Transaktionen dabei
am langsamsten ab, jedoch erhalten wir bei lesenden Zugriffen auf die Datenbank immer konsistente
Ergebnisse. Beim Parameter Read Only erhalten wir immer Lesekonsistenz bezüglich der letzten
bekannten, konsistenten SCN.
Der Data Guard Broker
Abschließend wollen wir uns nun mit dem Data Guard Broker beschäftigen. Da wir bereits einen
erfolgreichen Switchover vollzogen haben, sind fast alle Voraussetzungen zum Einsatz des Brokers
erfüllt. Was noch zu tun bleibt, ist Folgendes:
1. Der Initialisierungsparameter DG_BROKER_START muss auf TRUE gesetzt werden. Dies führt
zum Start des DMON Prozesses beim startup der Datenbanken.
Seite 2 von 5
579869046
2. Die Datenbanken müssen zwingend mit spfile betrieben werden, damit der Broker eventuell
erforderliche Änderungen an den Initialisierungsparametern vornehmen kann.
3. Der Data Guard Broker meldet sich als sysdba an. Damit das auch remote funktioniert, sind die
beteiligten Datenbanken mit einer Passwortdatei zu versehen.
Anlegen einer Konfiguration
Ziel ist es nun, mit dem dgmgrl eine Konfiguration, bestehend aus unserer Produktionsdatenbank und
der logischen Standby Datenbank, anzulegen und anschließend einen Switchover durchzuführen.
Zunächst verbinden wir uns nach dem Start des dgmgrl mit der aktuellen Produktionsdatenbank:
DGMGRL> connect sys/change_on_install
Connected.
Anschließend legen wir eine Konfiguration an:
DGMGRL> create configuration 'ak' as
> primary site is 'log'
> resource is 'log_db'
> hostname is 'fiesta'
> instance name is 'log1'
> service name is 'log1'
> site is maintained as logical;
Configuration "ak" added with primary site "log"
Database resource "log_db" added.
Dieser Konfiguration fügen wir die aktuelle Standby Datenbank hinzu:
DGMGRL> create site 'prod'
> resource is 'prod_db'
> hostname is 'fiesta'
> instance name is 'ora1'
> service name is 'ora1'
> site is maintained as logical;
Site "prod" added to configuration.
Database resource "prod_db" added.
Danach geben wir mit enable configuration; die Konfiguration frei.
Mit show configuration verbose können wir uns den aktuellen Zustand unserer Konfiguration
anzeigen lassen:
DGMGRL> show configuration verbose;
Configuration
Name:
'ak'
Enabled:
'yes'
Default state:
'ONLINE'
Intended state:
'ONLINE'
Protection Mode: 'MaxPerformance'
Number of sites: 2
Sites:
Primary Site: log
Standby Site: prod
Current status for "ak":
Enabled.
Durchführen des Switchovers
Bevor wir nun den Switchover mit dem dgmgrl durchführen, sollten wir uns mit show resource
verbose 'log_db'; und show resource verbose 'prod_db'; den jeweiligen Status der
beteiligten Datenbanken anzeigen lassen. Die Ausgabe der beiden Kommados sollte in den letzten
Zeilen etwa wie folgt aussehen:
.
.
Seite 3 von 5
579869046
.
Properties for 'STANDBY' state:
DEFAULT_STATE
= 'LOGICAL-APPLY-ON'
EXPLICIT_DISABLE = 'no'
REQUIRED
= 'yes'
Current status for "log_db":
SUCCESS
Der abschließende Switchover sieht folgendermaßen aus:
DGMGRL> switchover to 'prod';
Performing switchover NOW. Please wait...
Switchover succeeded. New primary is "prod"
Die Vorteile des Data Guard Managers
Doch nicht nur der Switchover geht einfacher vonstatten, auch beim Startup der logischen Standby
Datenbank brauchen wir uns nicht mehr manuell um das Neustarten des Log Apply zu kümmern. Dies
geschieht ebenfalls automatisch. Mit dem Data Guard Manager, welcher in den Enterprise Manager
integriert ist, läuft es letztendlich ähnlich ab, wobei der Switchover mit dem Switchover Wizard
durchgeführt wird. Das funktioniert natürlich auch für physikalische Standby Datenbanken.
Fazit
Zu Begin unserer Artikelreihe haben wir eine Liste mit Forderungen formuliert, die hier noch einmal
kurz wiederholt werden sollen:
1. Backup Konzept
2. Hochverfügbarkeitslösung
3. Möglichkeit eines externen Reportings
4. Delay
5. Switchover
zu 1. Das Offline Backup über eine physikalische Standby-Datenbank ist seit Oracle 7.3 möglich. Eine
logische Standby Datenbank ist für ein solches Konzept ungeeignet.
zu 2. Für den K-Fall ist eine physikalische Standby Datenbank auf jeden Fall eine gute Lösung, zumal
sich seit Oracle 9i die Gefahr des Datenverlusts verringert hat. Enthält die Produktionsdatenbank nur
unterstützte Datentypen, kann hierfür auch eine logische Standby Datenbank genutzt werden.
zu 3. Mit einer physikalischen Standby Datenbank sind Reporting und gleichzeitiges Nachfahren von
Transaktionen nicht möglich. Hier gibt es nur die Möglichkeit, entweder zu recovern oder die
Datenbank im Read-Only Modus zu öffnen. Eine logische Standby Datenbank bietet aufgrund der
anderen „Recovery“ Methode jedoch die Möglichkeit, beides gleichzeitig zu tun.
zu 4. Mit Oracle 8.1.7 gab es dafür eine skriptbasierte Lösung. Mit Oracle 9i ist ein zeitverzögertes
Nachfahren der RedoLog Dateien ohne zusätzliche Skripte möglich.
zu 5. Der Switchover ist mit Oracle 9i möglich. Bei einer physikalischen Standby Datenbank ist ein
Switchover ohne Einschränkungen bezüglich der unterstützten Datentypen möglich. Bei der logischen
Standby Datenbank werden noch nicht alle Datentypen unterstützt, was aber eher eine Schwäche des
LogMiners aufzeigt. Mit dem Data Guard Broker besteht der Switchover letztlich nur noch aus einem
Kommando.
Darüber hinaus gibt es mit Oracle 9i auch Lösungen für andere Fallstricke beim Betrieb einer Standby
Datenbank. Mit dem Standby File Management werden auf dem Produktionssystem erzeugte Dateien
automatisch der Standby Datenbank hinzugefügt. Darüber hinaus setzt das Recovery nach
Netzausfällen automatisch wieder auf.
Welcher Standby Datenbank Typ soll jetzt eingesetzt werden?
Die Frage ist nicht ganz leicht zu beantworten, da sowohl einiges für die physikalische Standby
Datenbank als auch einiges für die logische Standby Datenbank spricht. Aber es gibt
Ausschlusskriterien, an denen wir uns orientieren können.
Seite 4 von 5
579869046
Soll die Datenbank auch für Backup Zwecke genutzt werden, kommt nur die physikalische Standby
Datenbank in Frage. Wird die Standby Datenbank als Reporting System genutzt, spricht das für die
logische Standby Datenbank, da dort die Daten immer aktuell sind. Sollen die Datenbanken nicht die
Rollen tauschen, lassen sich auch zusätzliche Tabellen und Indizes anlegen, oder auch Daten
ausblenden.
Beim Thema Hochverfügbarkeit muss die Zielsetzung beachtet werden. Für Hochverfügbarkeit im
Sinne eines Katastrophenfalls gibt es vermutlich derzeit nichts besseres als eine Standby Datenbank.
Betrachtet man Hochverfügbarkeit aber als Thema, bei dem es gilt, die Ausfallzeiten von
Applikationen möglichst gering zu halten, spricht vieles für eine Oracle-RAC-Lösung mit zusätzlicher
Plattenspiegelung.
Vielleicht sind ja mit Oracle 10g die Einschränkungen des LogMiners beseitigt, denn dann würde bis
auf den Punkt „Backup“ alles für die logische Standby Datenbank sprechen.
Für Fragen, Anregungen und weitere Informationen steht Ihnen der Autor jederzeit gerne unter der u.
g. Kontaktadresse zur Verfügung.
Kontakt:
Andreas Kother
([email protected])
ORDIX AG
Westernmauer 12-16
D-33098 Paderborn
Seite 5 von 5
Herunterladen