Einrichtung von Oracle Data Guard (Physical Standby)
Symptom
Ziel: Disaster Recovery und Hochverfügbarkeit für Oracle mit einer Physical Standby (Data Guard) einrichten; bei Ausfall der Primary auf die Standby umschalten können.
1. Primary in den Modus FORCE LOGGING und ARCHIVELOG versetzen
Damit die Standby mit der Primary konsistent bleibt, müssen alle Änderungen ins Redo geschrieben werden. FORCE LOGGING protokolliert selbst NOLOGGING-Operationen. Für den ARCHIVELOG-Modus wird die Datenbank im Zustand MOUNT gestartet.
Oracle
ALTER DATABASE FORCE LOGGING;
-- For ARCHIVELOG:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;2. Standby-Redo-Log-Dateien hinzufügen
Standby-Redo-Logs (SRL) sollten eine Gruppe mehr als die Online-Redo-Logs haben und gleich groß sein. Sie werden auf Primary und Standby angelegt; für Real-Time Apply sind sie erforderlich. Ist im Beispiel das Online Redo 200M groß, sind auch die SRLs 200M groß.
Oracle
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl01.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl02.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl03.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl04.log') SIZE 200M;3. log_archive_dest und zugehörige Parameter setzen
Definiere auf der Primary dest_2, um Redo an die Standby zu übertragen. Setze DB_UNIQUE_NAME, LOG_ARCHIVE_CONFIG (die db_unique_name beider Seiten), FAL_SERVER und STANDBY_FILE_MANAGEMENT=AUTO. So werden Dateien auf der Standby automatisch angelegt.
Oracle
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_prim,orcl_stby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';
ALTER SYSTEM SET FAL_SERVER='orcl_stby'; -- for role changes; on the standby FAL_SERVER='orcl_prim'
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;4. Standby mit RMAN DUPLICATE FOR STANDBY erstellen
Nachdem auf dem Standby-Server Passwortdatei und statischer Listener/tnsnames eingerichtet sind, verbindet sich RMAN mit der Primary und mit der Standby (AUXILIARY). FROM ACTIVE DATABASE kopiert ohne Backup über das Netzwerk; DORECOVER wendet Redo an.
Oracle
rman TARGET sys/password@orcl_prim AUXILIARY sys/password@orcl_stby
RUN {
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
}5. Redo Apply (MRP) starten und prüfen
Starte die Managed Recovery, während die Standby im Zustand MOUNT ist; nutze USING CURRENT LOGFILE für Real-Time Apply. Prüfe mit v$managed_standby, dass der Apply-Prozess (MRP0) läuft.
Oracle
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SELECT process, status, sequence# FROM v$managed_standby WHERE process LIKE 'MRP%';6. Data Guard Broker aktivieren
Der Broker zentralisiert die Konfiguration und reduziert Failover/Switchover auf einen einzigen Befehl. Setze DG_BROKER_START=TRUE auf beiden Instanzen und erstelle und aktiviere dann die Konfiguration mit dgmgrl. Ab 12c verwaltet der Broker den Redo-Transport: Wurde LOG_ARCHIVE_DEST_2 manuell gesetzt, schlägt ADD DATABASE mit ORA-16698 fehl; leere den Parameter zuerst mit ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=''.
Oracle
ALTER SYSTEM SET DG_BROKER_START=TRUE;
-- In dgmgrl:
CREATE CONFIGURATION dgconf AS PRIMARY DATABASE IS orcl_prim CONNECT IDENTIFIER IS orcl_prim;
ADD DATABASE orcl_stby AS CONNECT IDENTIFIER IS orcl_stby;
ENABLE CONFIGURATION;7. Synchronisationsrückstand überwachen und Tests abschließen
Die Sequence-Differenz zwischen Primary und Standby muss laufend überwacht werden; ein wachsender Rückstand deutet auf einen Netzwerk-/Apply-Engpass hin. dgmgrl SHOW CONFIGURATION sollte 'SUCCESS' anzeigen. Teste optional einen Rollenwechsel per Switchover.
Oracle
-- dgmgrl (SHOW DATABASE shows the Transport Lag / Apply Lag values):
SHOW CONFIGURATION;
SHOW DATABASE orcl_stby;
-- SQL (standby): SELECT name, value FROM v$dataguard_stats WHERE name LIKE '%lag';