Erstellung Oracle Data Guard in 11g R2 mit Data Guard Broker und DGMGRL


In diesem Beispiel erstellen wir eine Physical Standby, welche mittels dgmrl verwaltet wird. Das Setup einer Active Dataguard ist ein simpler Vorgang, welcher sich nicht sehr von einem 10G Dataguard Setup unterscheidet.

Die Hauptvorteile des 11G Dataguard sind:

  • Die Möglichkeit die Standby Datenbank im read-only Modus zu öffnen, während sie selbst weiter im Managed Recovery Modus läuft. Das bedeutet, das sie zu einem für Hochverfügbarkeitszwecke genutzt werden kann, und zum anderem für normale Reportingzwecke.
  • Die Möglichkeit die Datenbank im read-write Modus zu öffnen und z.B. Applikationstests durchzuführen. Durch die Snapshot Standbyfunktionalität kann sie jedoch wieder in den normalen Standby Modus zurückgestuft werden.

In diesem Beispiel gehe ich von folgenden Dingen aus:
server1.exampe.com (Primärer Server)
server2.example.com (Oracle Binaries installiert keine Datenbank)
server1.example.com ist im Archivelog Modus

Konfiguration der  Datenbank damit sie die Rolle einer primären Datenbank unterstützen kann.

SQL> alter database add standby logfile;
SQL> alter database force logging;
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbm,dbm_stby)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=dbmstby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBMSTBY';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE

Erstellen von Net Service Names in der tnsnames.ora

DBM =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server1.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbm)
    )
  )

DBM_DGMGRL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server1.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbm_DGMGRL)
    )
  )
DBMSTBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server2.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbmstby)
    )
  )

DBMSTBY_DGMGRL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = server2.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbmstby_DGMGRL)
    )
  )

Auf der neuen Standby Seite bzw. auf der primären Seite  fügen wir eine statische Listener Registrierung hinzu.

    (SID_DESC =
      (GLOBAL_DBNAME = dbm)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = dbm)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = dbmstby)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = dbmstby)
    )

Die nächsten Schritte sind, das wir das Passwordfile von der Primären Seite auf die Standby Seite kopieren. Weiters erstellen wir eine Datei initdbmstby.ora, welche nur den Parameter db_name=dbmstby enthält. Weiters ist sicherzustellen, das die Verzeichnisse für die Audit Dump Destination bzw. die Fast Recovery Area vorhanden sind. Sind alle Schritte abgeschlossen, starten wir die Datenbank in den „nomount“ Status. Auf der primären Seite starten wir das rman Utility

RMAN> connect target sys
RMAN>  connect auxiliary sys@dbm_stby

Nach der Anmeldung an „rman“ führen wir folgenden Befehl aus:

run {
        allocate channel prim1 type disk;
        allocate channel prim2 type disk;
        allocate channel prim3 type disk;
        allocate channel prim4 type disk;
        allocate auxiliary channel stby type disk;
        duplicate target database for standby from active database
        spfile
         parameter_value_convert 'dbm','dbmstby'
         set db_unique_name='dbmstby'
         set db_file_name_convert='/u01/app/oracle/oradata/dbm','/u01/app/oracle/oradata/dbmstby'
         set log_file_name_convert='/u01/app/oracle/oradata/dbm','/u01/app/oracle/oradata/dbmstby'
         set log_archive_max_processes='5'
         set fal_client='dbmstby'
         set fal_server='dbm'
         set standby_file_management='AUTO'
         set log_archive_config='dg_config=(dbm,dbmstby)'
         set log_archive_dest_1='service=dbm_ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=dbm';
        }

Nachdem rman mit der Erstellung der Datenbank fertig, ist prüfen wir ob der redo Transport funktioniert.

Auf der Standby Datenbank selektieren wir die aktuelle "sequence#"
select sequence#,first_time,next_time
from v$archived_log
order by sequence#;
Erzeugen einer neuen Archivelog Datei und damit dem erhöhen der sequence#
alter system switch logfile;
Erneutes prüfen der sequence# die sich jetzt erhöht haben muß.
select sequence#,first_time,next_time
from v$archived_log
order by sequence#;

Als nächstes setzten wir den Dataguard Broker auf. Als erstes setzten wir den Datenbankparameter dg_broker_start auf true.

alter system set dg_broker_start=true;

Dadurch werden folgende Prozesse auf der Datenbank gestartet:

  • Data Guard Monitor (DMON)
  • Broker Resource Manager (RSM)
  • Data Guard Net Server (NVSn)
  • DRCn

Der nächste Schritt ist es unsere Listener Konfiguration zu erweitern.

    (SID_DESC =
      (GLOBAL_DBNAME = dbm_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = dbm)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = dbmstby_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = dbmstby)
    )

Der nächste Schritt ist die Datenbank in die Broker Konfiguration aufzunehmen. Hierfür starten wir das CLI (dgmgrl) auf der primären Seite.

Verbinden wir uns zur Datenbank
DGMGRL> connect sys
Erstellen der Broker Konfiguration inklusive eines Profils für die Primäre Datenbank
DGMGRL> create configuration 'DGConfig1' as primary database is 'dbm' connect identifier is dbm_DGMGRL;
Hinzufügen der Standby Datenbank
DGMGRL> add database 'dbmstby' as connect identifier is dbmstby_DGMGRL;
Aktivieren der Konfiguration
DGMGRL> enable configuration
Überprüfen der Konfiguration
DGMGRL> show configuration

Schauen wir uns jetzt an wie wir mit einer Active Dataguard Datenbank arbeiten können. Das Setup ist relativ simple. Nachdem wir die Standby Datenbank „read only“ öffnen werden wir den Apply wieder starten, und wir werden sehen das Transaktionen der primären Seite trotzdem weiter auf die Standby Datenbank „applied“ werden.

Stoppen des Apply 
DGMGRL> edit database 'dbmstby' set state ='apply-off';
Die Standby Datenbank in den Read Only Modus setzen
SQL> alter database open read only;
Apply wieder starten
DGMGRL> edit database 'dbmstby' set state ='apply-on'

Testen der Konfiguration

Auf der Primären Seite erstellen wir eine Tabelle
SQL> conn scott/tiger
Connected.
SQL> create table emptest as select * from emp;

Table created.
Auf der Standby Seite prüfen wir ob die Daten angekommen sind
SQL> conn scott/tiger
Connected.
SQL> select count(*) from emptest;

  COUNT(*)
----------
    14

Für das Aktivieren von Fast Start Failover (FSFO) ist Flashback auf der Datenbank eine Vorraussetzung.

SQL> alter database flashback on;
DGMGRL> edit database 'dbmstby' set state ='apply-off';
SQL> alter database flashback on;
DGMGRL> edit database 'dbmstby' set state ='apply-on';
DGMGRL> ENABLE FAST_START FAILOVER

Beim FSFO kann ebenfalls eine Condition übergeben werden, diese kann ein Ereigniss oder z.B. ein ORA Code sein.

ENABLE FAST_START FAILOVER CONDITION 27102;
DGMGRL> SHOW FAST_START FAILOVER;

Fast-Start Failover: ENABLED

  Threshold:        30 seconds
  Target:           dbmstby
  Observer:         (none)
  Lag Limit:        30 seconds
  Shutdown Primary: TRUE
  Auto-reinstate:   TRUE

Configurable Failover Conditions
  Health Conditions:
    Corrupted Controlfile          YES
    Corrupted Dictionary           YES
    Inaccessible Logfile            NO
    Stuck Archiver                  NO
    Datafile Offline               YES

  Oracle Error Conditions:
    (none)

Nun nachdem wir jetzt eine Standby Datenbank haben wollen wir auch den Switchover testen. Unter der Vorraussetzung das wir beim „show database“ keinen LAG angezeigt bekommen, können wir folgende Befehle durchführen.

Switchover zur Standby Datenbank
DGMGRL> switchover to dbmstby;
Prüfen der Datenbanken
DGMGRL> show configuration
SQL> select database_role from v$database;
Zurück Schwenken der Datenbanken
DGMGRL> switchover to dbm;
DGMGRL> show configuration
SQL> select database_role from v$database;

Ab diesen Punkt kann man auch einen Observer (auf einem dritten Host) starten, welcher die Konfiguration überwacht und eventuell eingreift.

dgmgrl -logfile $HOME/observer.log sys/<Passwort>@dbm_DGMGRL "start observer" &

Eine Alternative zum Dataguard im Enterprise Edition Umfeld für Standard Edition Datenbanken sucht, sollte sich mal den DBSentinel ansehen.

Referenz

Blog von Guenadi Jilevski

Advertisements

Ein Gedanke zu “Erstellung Oracle Data Guard in 11g R2 mit Data Guard Broker und DGMGRL

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s