Oracle Data Guard mit der Datenbank-CLI verwenden

Oracle empfiehlt, die Konsole anstelle der Datenbank-CLI zu verwenden, um Data Guard in Oracle Cloud Infrastructure einzurichten und damit zu arbeiten. Weitere Informationen und Anweisungen finden Sie unter Oracle Data Guard verwenden.

Hinweis

Dieses Thema ist für Exadata-DB-Systeme nicht relevant. Sie können Data Guard auf Exadata-DB-Systemen mit nativen Oracle Database-Utilitys und -Befehlen manuell konfigurieren. In diesem Thema wird jedoch erläutert, wie Sie Primär- und Standbydatenbanken mit der dbcli einrichten, die in Exadata-DB-Systemen nicht verfügbar ist. Weitere Informationen finden Sie unter Data Guard: Konzepte und Verwaltung für Version 18.1, 12.2, 12.1 oder 11.2.

In diesem Thema wird erläutert, wie Sie Data Guard mit der Datenbank-CLI in Oracle Cloud Infrastructure mit Fast-Start Failover (FSFO) einrichten. In den folgenden Abschnitten wird zunächst beschrieben, wie die Primär- und Standbydatenbanken vorbereitet werden. Danach wird erläutert, wie Sie Data Guard so konfigurieren, dass Redo-Daten aus der Primärdatenbank übertragen und auf die Standbydatenbank angewendet werden.

Hinweis

In diesem Thema wird davon ausgegangen, dass Sie mit Data Guard und FSFO vertraut sind. Weitere Informationen hierzu finden Sie in der Dokumentation im Oracle-Dokumentationsportal.

Voraussetzungen

Um die in diesem Thema erläuterten Verfahren auszuführen, benötigen Sie die folgenden Informationen zur Primär- und Standbydatenbank.

  • db_name (oder oracle_sid)
  • db_unique_name
  • Oracle Home-Verzeichnis (oder Datenbank-Home)
So suchen Sie die Datenbankinformationen

Nachdem Sie das Primär- und das Standby-DB-System gestartet und Datenbanken erstellt haben (siehe weiter unten in diesem Thema), können Sie die CLI auf diesen Systemen verwenden, um die benötigten Datenbankinformationen zu suchen.

  1. Greifen Sie mit SSH auf das DB-System zu.

    ssh -i <private_key_path> opc@<db_system_ip_address> 
  2. Melden Sie sich als "opc" an, und wechseln Sie mit "sudo" zum Root-Benutzer. Verwenden Sie sudo su - mit einem Bindestrich, um das Profil des Root-Benutzers aufzurufen. Dadurch wird der PATH auf das dbcli-Verzeichnis gesetzt (/opt/oracle/dcs/bin).

    
    login as: opc
    			
    [opc@dbsys ~]$ sudo su - 
  3. Um db_name (oder oracle_sid) und db_uniqueName zu suchen, führen Sie den Befehl dbcli list-databases -j aus.

    [root@dbsys ~]# dbcli list-databases -j
    [ {
      "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff",
      "name" : "dbtst",
      "dbName" : "dbtst",
      "databaseUniqueName" : "dbtst_phx1cs",
      "dbVersion" : "12.1.0.2",
      "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287",
      "instanceOnly" : false,
       .
       .
       .  
    
  4. Um das Oracle Home-Verzeichnis (oder das Datenbank-Home) zu suchen, führen Sie den Befehl dbcli list-dbhomes aus. Wenn mehrere Datenbank-Homes auf dem DB-System vorhanden sind, verwenden Sie dasjenige, das der "dbHomeId" in der oben dargestellten Ausgabe des Befehls dbcli list-databases -j entspricht.

    [root@dbtst ~]# dbcli list-dbhomes
    
    ID                                       Name                 DB Version                               Home Location                                 Status
    ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ----------
    2efe7af7-0b70-4e9b-ba8b-71f11c6fe287     OraDB12102_home1     12.1.0.2.160719 (23739960, 23144544)     /u01/app/oracle/product/12.1.0.2/dbhome_1     Configured
    33ae99fe-5413-4392-88da-997f3cd24c0f     OraDB11204_home1     11.2.0.4.160719 (23054319, 23054359)     /u01/app/oracle/product/11.2.0.4/dbhome_1     Configured
    

Standby-DB-System erstellen

Hinweis

Die Standbydatenbank muss denselben db_name wie die Primärdatenbank, jedoch einen anderen db_unique_name haben. Wenn Sie denselben Datenbanknamen für die Standbydatenbank und Primärdatenbank verwenden, müssen Sie die Datenbank mit dem Befehl dbcli delete-database aus dem Standby-DB-System löschen, bevor Sie den unten beschriebenen Befehl dbcli create-database ausführen können. Das Löschen und Erstellen der Datenbank dauert einige Minuten. Die dbcli-Befehle müssen vom Root-Benutzer ausgeführt werden.

  1. Erstellen Sie ein Standby DB-System, wie unter Bare-Metal- und Virtual-Machine-DB-Systeme erstellen beschrieben. Warten Sie, bis das DB-System das Provisioning beendet hat und verfügbar ist.

    Sie können das Standby-DB-System im Hinblick auf Verfügbarkeit und Disaster Recovery in einer anderen Availability-Domain als der des primären DB-Systems erstellen. (Das wird dringend empfohlen.) Sie können das Standby-DB-System im Cloud-Netzwerk des primären DB-Systems erstellen, sodass sich beide Systeme in einem einzigen, routingfähigen Netzwerk befinden.

  2. Greifen Sie mit SSH auf das DB-System zu.

    ssh -i <private_key_path> opc@<db_system_ip_address> 
  3. Melden Sie sich als "opc" an, und wechseln Sie mit "sudo" zum Root-Benutzer. Verwenden Sie sudo su - mit einem Bindestrich, um das Profil des Root-Benutzers aufzurufen. Dadurch wird der PATH auf das dbcli-Verzeichnis gesetzt (/opt/oracle/dcs/bin).

    
    login as: opc
    			
    [opc@dbsys ~]$ sudo su - 
  4. Auf dem DB-System ist anfangs eine Datenbank vorhanden. Sie müssen jedoch mit dem Befehl dbcli create-database und dem Parameter --instanceonly eine Standbydatenbank erstellen. Dieser Parameter erstellt nur die Datenbankspeicherstruktur und startet die Datenbank im Nomount-Modus (es werden keine anderen Datenbankdateien erstellt).

    Wenn Sie --instanceonly verwenden, sind sowohl der Parameter --dbname als auch der Parameter --adminpassword erforderlich. Sie müssen dem DB-Namen bzw. dem Admin-Kennwort der Primärdatenbank entsprechen, um Verwechslungen zu vermeiden.

    Der folgende Beispielbefehl fordert zur Eingabe des Admin-Kennworts auf und erstellt dann eine Speicherstruktur für eine Datenbank mit dem Namen "dbname".

    [root@dbsys ~]# dbcli create-database --dbname <same as primary dbname> --databaseUniqueName <different from primary uniquename> --instanceonly --adminpassword
    

    Wenn Sie integrierbare Datenbanken verwenden, geben Sie auch den Parameter --cdb an.

    Die vollständige Befehlssyntax finden Sie unter Datenbankbefehle.

  5. Warten Sie einige Minuten, bis der Befehl dbcli create-database die Standbydatenbank erstellt hat.

    Mit dem Befehl dbcli list-jobs können Sie prüfen, ob die Datenbank erfolgreich erstellt wurde. Danach prüfen Sie mit dem Befehl dbcli list-databases, ob die Datenbank konfiguriert ist.

Primäres DB-System vorbereiten

Um das primäre DB-System vorzubereiten, müssen Sie statische Listener konfigurieren, tnsnames.ora aktualisieren und einige Datenbankeinstellungen und Parameter konfigurieren.

Statische Listener konfigurieren

Erstellen Sie statische Listener zur Verwendung durch RMAN und Data Guard Broker.

  1. Greifen Sie mit SSH auf das primäre DB-System zu, melden Sie sich als Benutzer "opc" oder "root" an, und wechseln Sie mit "sudo" zum Benutzer "grid".

    sudo su - grid
  2. Bearbeiten Sie die Datei /u01/app/<version>/grid/network/admin/listener.ora, und fügen Sie ihr den folgenden Inhalt hinzu. Der hier angezeigte erste statische Listener ist optional. Der statische Listener des zweiten DGMGRL ist bei Datenbanken der Version 12.1 oder höher optional, jedoch für Datenbanken der Version 11.2 erforderlich.

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>)
        (SID_NAME = <primary_oracle_sid>)
        (ORACLE_HOME=<oracle_home_directory>)
        (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin")
        )
        (SID_DESC=
        (SDU=65535)
    	(GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>)
        (SID_NAME = <primary_oracle_sid>)
        (ORACLE_HOME=<oracle_home_directory>)
        (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin")
        )
      )
  3. Speichern Sie die Änderungen, und starten Sie den Listener dann neu.

    $ srvctl stop listener
    $ srvctl start listener

Net Service-Namen zu tnsnames.ora hinzufügen

Bearbeiten Sie als Benutzer "oracle" die Datei $ORACLE_HOME/network/admin/tnsnames.ora, und fügen Sie ihr den Net Service-Namen der Standbydatenbank hinzu.

<standby db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)		
    (ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
    )
  )

Im obigen Beispiel wird davon ausgegangen, dass die Namensauflösung funktioniert und <standby_server>.<domain> auf der Primärdatenbank auflösbar ist. Sie können auch die private IP-Adresse des Standbyservers verwenden, wenn die IP-Adressen innerhalb eines Cloud-Netzwerks (VCN) routingfähig sind.

Parameter für Primärdatenbank konfigurieren

Tipp

Wenn der Primär- und der Standbyhost unterschiedliche Verzeichnisstrukturen aufweisen, müssen Sie möglicherweise zusätzliche Parameter festlegen, die hier nicht beschrieben werden. Ein Beispiel ist der Parameter log_file_name_convert. In der RMAN-Dokumentation wird beschrieben, wie Sie Standbys für Hosts mit unterschiedlichen Verzeichnisstrukturen erstellen.

  1. Aktivieren Sie als Benutzer "oracle" die automatische Verwaltung von Standbydateien.

    SQL> alter system set standby_file_management=AUTO;
  2. Identifizieren Sie die Namen und Speicherorte der Broker-Konfigurationsdateien. Welche Befehle dazu zur Verfügung stehen, hängt vom Typ des Datenbankspeichers ab. Wenn Sie den Datenbankspeichertyp nicht kennen, verwenden Sie den Befehl unter Datenbankbefehle im DB-System.

    Verwenden Sie für den ACFS-Datenbankspeicher die folgenden Befehle, um die Broker-Konfigurationsdateien festzulegen.

    SQL> alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat';
    SQL> alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat'; 

    Verwenden Sie für den ASM-Datenbankspeicher die folgenden Befehle, um die Broker-Konfigurationsdateien festzulegen.

    SQL> alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat';
    SQL> alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
  3. Aktivieren Sie den Broker-DMON-Prozess für die Datenbank.

    SQL> alter system set dg_broker_start=true;
  4. Erzwingen Sie das Datenbank-Logging für alle Datenbanktransaktionen.

    SQL> alter database force logging ;
  5. Fügen Sie Standby-Redo-Logs (SRLs) basierend auf den Online-Redo-Logs (ORLs) hinzu. Bei einem neu gestarteten DB-System gibt es drei ORLs mit der Größe 1073741824. Erstellen Sie also vier SRLs gleicher Größe.

    Mit der folgenden Abfrage können Sie die Anzahl und Größe (in Byte) der ORLs bestimmen.

    SQL> select group#, bytes from v$log;
    
        GROUP# BYTES
    ---------- ----------
             1 1073741824
             2 1073741824
             3 1073741824

    Alle ORLs müssen dieselbe Größe haben.

    Die SRLs müssen dieselbe Größe wie die ORLs haben. Es muss jedoch mindestens eine SRL mehr als ORLs vorhanden sein. Im obigen Beispiel gibt es drei ORLs, sodass vier SRLs erforderlich sind. Geben Sie also die Zahl der aktuellen Redo-Logs plus eins an, und verwenden Sie dieselbe Größe wie die der Redo-Logs.

    SQL> alter database add standby logfile thread 1 size <size>;

    Es darf nur ein Element in der SRL-Gruppe vorhanden sein (standardmäßig wird ein DB-System mit nur einem Mitglied pro SRL-Gruppe erstellt). Um das zu gewährleisten, können Sie die Datei nach der folgenden Syntax benennen.

    alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...

    Bei ASM/OMF-Konfigurationen verwendet der obige Befehl die Datenträgergruppe anstelle von <logfile name with full path>.

    alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
    Tipp

    Die Größe der ORLs und SRLs muss so bemessen sein, dass Logwechsel nicht häufiger als alle 10 Minuten vorkommen. Das erfordert eine Kenntnis der Anwendung und muss möglicherweise nach dem Deployment angepasst werden. Weitere Informationen finden Sie unter Standby-Redo-Logs verwenden und Größe richtig konfigurieren.

  6. Prüfen Sie, ob Sie die richtige Anzahl von SRLs erstellt haben.

    SQL> select group#, bytes from v$standby_log;
  7. Stellen Sie sicher, dass sich die Datenbank im ARCHIVELOG-Modus befindet.

    SQL> archive log list
  8. Datenbank-FLASHBACK aktivieren. Der empfohlene Mindestwert für db_flashback_retention_target beträgt 120 Minuten.

    SQL> alter database flashback on ;
    SQL> alter system set db_flashback_retention_target=120;  
  9. Führen Sie einen Redo-Log-Wechsel aus, um die Archivierung zu aktivieren, wenn die Datenbank neu erstellt wird. (Mindestens ein Log muss archiviert werden, bevor die RMAN-Duplizierung ausgeführt wird.)

    SQL> alter system switch logfile;

Standbydatenbank vorbereiten

Bevor Sie die Standbydatenbank vorbereiten, stellen Sie sicher, dass das Datenbank-Home auf dem Standbysystem dieselbe Version hat wie auf dem Primärsystem. (Wenn die Primär- und die Standbydatenbank beide mit derselben Datenbankversion neu erstellt werden, sind die Datenbank-Homes gleich.) Erstellen Sie andernfalls ein Datenbank-Home mit derselben Version. Mit dem Befehl unter Dbhome-Befehle können Sie die Versionen prüfen, und mit dem Befehl unter Dbhome-Befehle können Sie gegebenenfalls ein neues Datenbank-Home erstellen.

Um das Standby-DB-System vorzubereiten, müssen Sie statische Listener konfigurieren, tnsnames.ora aktualisieren, ein TDE-Wallet konfigurieren, eine temporäre Kennwortdatei erstellen, die Konnektivität prüfen, RMAN DUPLICATE ausführen, FLASHBACK aktivieren und dann den Datenbankservice erstellen.

Statische Listener konfigurieren

Erstellen Sie statische Listener zur Verwendung durch RMAN und Data Guard Broker.

  1. Greifen Sie mit SSH auf das Standby-DB-System zu, melden Sie sich als Benutzer "opc" oder "root" an, und wechseln Sie mit "sudo" zum Benutzer "grid".

    sudo su - grid
  2. Fügen Sie /u01/app/<db_version>/grid/network/admin/listener.ora. die folgenden Inhalte hinzu.

    Der erste unten angezeigte statische Listener ist für RMAN DUPLICATE erforderlich. Der zweite statische DGMGRL-Listener ist bei den Datenbankversionen 12.2.0.1 und 12.1.0.2 optional, jedoch für die Datenbankversion 11.2.0.4. erforderlich

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>)
        (SID_NAME = <standby oracle_sid>)
        (ORACLE_HOME=<oracle home directory>)
        (ENVS="TNS_ADMIN=<oracle home directory>/network/admin")
        )
        (SID_DESC=
        (SDU=65535)
        (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>)
        (SID_NAME = <standby oracle_sid>)
        (ORACLE_HOME=<oracle home directory>) 
        (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") 
        )
      )
  3. Starten Sie den Listener neu.

    $ srvctl stop listener
    $ srvctl start listener
  4. Prüfen Sie, ob die statischen Listener verfügbar sind. Die folgende Beispielausgabe gilt für die Datenbankversion 12.1.0.2. Beachten Sie, dass die ...status UNKNOWN-Meldungen zu diesem Zeitpunkt zu erwarten sind.

    $ lsnrctl status
    
    LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25
    
    Copyright (c) 1991, 2014, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
    Start Date                29-SEP-2016 21:09:19
    Uptime                    0 days 0 hr. 0 min. 5 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/12.1.0.2/grid/network/admin/listener.ora
    Listener Log File         /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521)))
    Services Summary...
    Service "dg2_phx2hx.oratst.org" has 1 instance(s).
      Instance "dg2", status UNKNOWN, has 1 handler(s) for this service...
    Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s).
      Instance "dg2", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully
    

Net Service-Namen zu tnsnames.ora hinzufügen

Fügen Sie als Benutzer "oracle" den Net Service-Namen der Standbydatenbank der Datei $ORACLE_HOME/network/admin/tnsnames.ora hinzu. $ ORACLE_HOME ist das Datenbank-Home, in dem die Standbydatenbank ausgeführt wird.

<Primary db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)
    (ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
    )
  )
 
<Standby db_unique_name> =
  (DESCRIPTION =
    (SDU=65535)
    (ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <standby db_unique_name>.<db_domain>)
    )
  )

TDE-Wallets in das Standbysystem kopieren

Kopieren Sie die TDE-Wallet-Dateien mit SCP aus dem primären DB-System in das Standby-DB-System. Der folgende Beispielbefehl geht davon aus, dass der SCP-Befehl vom BS-Benutzer "oracle" ausgeführt wird und dass der Private Key für "oracle" erstellt wurde und auf dem Host vorhanden ist, auf dem SCP ausgeführt wird.
$ scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>

Standbysystemkonfiguration einrichten

Erstellen Sie als Benutzer "oracle" das folgende Verzeichnis für die Datenbankversion 11.2.0.4. Dieser Schritt ist bei Version 12.2.0.1 und Version 12.1.0.2. optional.

[oracle@dbsys ~]$ mkdir  -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile

Auditdateiziel erstellen

Erstellen Sie als Benutzer "oracle" das folgende Verzeichnis als Auditdateiziel.

[oracle@dbsys ~]$ mkdir -p /u01/app/oracle/admin/<db_name>/adump

Andernfalls wird der später verwendete RMAN-Duplizierungsbefehl nicht erfolgreich ausgeführt.

Temporäre Kennwortdatei erstellen

Erstellen Sie als Benutzer "oracle" eine temporäre Kennwortdatei.

[oracle@dbsys ~]$ orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid>    password=<admin password for primary> entries=5

Das Kennwort muss mit dem Admin-Kennwort der Primärdatenbank identisch sein. Andernfalls wird beim unten beschriebenen RMAN-Duplizierungsschritt folgender Fehler ausgegeben: RMAN-05614: Kennwörter für Ziel- und Auxiliary-Verbindungen müssen identisch sein, wenn aktives Duplikat verwendet wird.

Prüfen, ob die Standbydatenbank verfügbar ist

  1. Legen Sie als Benutzer "oracle" die Umgebungsvariablen fest.

    [oracle@dbsys ~]$ . oraenv
    <enter the db_name>
  2. Ersetzen Sie $ORACLE_HOME/dbs/init<standby sid_name>.ora durch den folgenden Inhalt:

    db_name=<Primary db_name>
    db_unique_name=<standby db_unique_name>
    db_domain=<standby db_domain>
  3. Entfernen Sie die Spfile aus der Standbydatenbank.

    
    /u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora 

    Die Datenbank muss im Nomount-Modus gestartet werden, ohne dass eine Spfile angegeben ist. Die ursprüngliche Init-Datei enthält jedoch einen Parameter "spfile", der verhindert, dass der RMAN-Duplizierungsschritt funktioniert.

  4. Legen Sie die Umgebungsvariable ORACLE_UNQNAME so fest, dass sie auf DB_UNIQUE_NAME verweist.

    $ export ORACLE_UNQNAME =db_unique_name
    Wichtig

    Wenn Sie diesen Schritt nicht ausführen, wird das Wallet nicht geöffnet, und der Befehl RMAN DUPLICATE im darauf folgenden Schritt wird nicht erfolgreich ausgeführt.
  5. Der zuvor ausgeführte Befehl dbcli create-database --instanceonly öffnet die Standbydatenbank als Primärdatenbank im Schreibzugriffsmodus. Daher muss die Datenbank heruntergefahren werden, bevor der unten beschriebene Nomount-Schritt ausgeführt wird.

    $ sqlplus / as sysdba
    SQL> shutdown immediate
  6. Starten Sie die Datenbank im Nomount-Modus.

    SQL> startup nomount

Datenbankverbindungen prüfen

Prüfen Sie die Verbindung zwischen der Primär- und der Standbydatenbank.

  1. Stellen Sie sicher, dass der Listener-Port 1521 in den Sicherheitslisten geöffnet ist, die für das Primär- und das Standby-DB-System verwendet werden. Weitere Informationen finden Sie unter Sicherheitsliste für das DB-System aktualisieren.

  2. Stellen Sie von der Primärdatenbank aus eine Verbindung zur Standbydatenbank her.

    $ sqlplus sys/<password>@<standby net service name> as sysdba
  3. Stellen Sie von der Standbydatenbank aus eine Verbindung zur Primärdatenbank her.

    $ sqlplus sys/<password>@<primary net service name> as sysdba

RMAN-DUPLICATE-Befehl ausführen

Führen Sie als Benutzer "oracle" auf dem Standby-DB-System den RMAN-DUPLICATE-Befehl aus.

Wenn die Primärdatenbank groß ist, können Sie zusätzliche Kanäle zuweisen, um die Performance zu verbessern. Bei einer neu installierten Datenbank dauert die Datenbankduplizierung mit einem Kanal in der Regel ein paar Minuten.

Stellen Sie sicher, dass vom RMAN-DUPLICATE-Befehl keine Fehlergeneriert wurden. Wenn Fehler auftreten, starten Sie die Datenbank mit der Datei init.ora (nicht "spfile") neu, falls diese im Rahmen von RMAN DUPLICATE unter $ORACLE_HOME/dbs generiert wird.

Verwenden Sie in den folgenden Beispielen Kleinbuchstaben für <Standby db_unique_name>, sofern nichts anderes angegeben ist.

Führen Sie für das ACFS-Speicherlayout die folgenden Befehle aus.

$ rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
                  
RMAN> run { allocate channel prim1 type disk;
            allocate auxiliary channel sby type disk;
            duplicate target database for standby from active database
            dorecover
            spfile
            parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
            set db_unique_name='<Standby db_unique_name>'
            set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
            set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
            set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
            set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
            set instance_name='<Standby db_unique_name>'
            ;
           }

Führen Sie für das ASM-Speicherlayout die folgenden Befehle aus.

$ rman target sys/<password>@<primary alias>  auxiliary sys/<password>@<standby alias> log=rman.out
  
RMAN> run { allocate channel prim1 type disk;
            allocate auxiliary channel sby type disk;
            duplicate target database for standby from active database
            dorecover
            spfile
            parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
            set db_unique_name='<Standby db_unique_name>'           
            set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
            set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
            set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
            set instance_name='<Standby db_unique_name>'  
            ;
          }

Datenbank-FLASHBACK aktivieren

  1. Als Best Practice für Data Guard aktivieren Sie Flashback und setzen db_flashback_retention_target in der Primär- und der Standbydatenbank auf mindestens 120 Minuten.

    SQL> alter database flashback on;
    SQL> alter system set db_flashback_retention_target=120;
  2. Prüfen Sie, ob die Standbydatenbank richtig erstellt wurde.

    SQL> select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;

Datenbankservice erstellen

Oracle empfiehlt, mit "srvctl" einen Datenbankservice für die Standbydatenbank zu erstellen.

Für ACFS-Speicherlayout.

  1. Erstellen Sie ein gemeinsames Verzeichnis, und kopieren Sie die Datei "spfile" in dieses Verzeichnis.

    $ mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
    $ cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
  2. Stoppen und entfernen Sie den vorhandenen Datenbankservice.

    
    $ srvctl stop database -d <standby db_unique_name>
    
    $ srvctl remove database -d <standby db_unique_name>
  3. Erstellen Sie den Datenbankservice.

    $ srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
    -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name>
    $ srvctl setenv database -d <standby db_unique_name> -t "ORACLE_
    UNQNAME=<standby db_unique_name>"
    $ srvctl config database -d <standby db_unique_name>
  4. Starten Sie den Datenbankservice.

    
    $ srvctl start database -d <standby db_unique_name>
    
  5. Bereinigen Sie die Dateien aus $ORACLE_HOME/dbs.

    $ rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
    $ rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
  6. Erstellen Sie die Datei $ORACLE_HOME/dbs/init<standby oracle_sid>.ora, und referenzieren Sie den neuen Speicherort der Datei "spfile".

    SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
  7. Stoppen Sie die Standbydatenbank, und starten Sie sie dann mit "srvctl".

    
    srvctl stop database -d <standby db_unique_name>
    srvctl start database -d <standby db_unique_name>

Für ASM-Speicherlayout.

  1. Erwägen Sie, die Datei "spfile" unter +DATA zu generieren.
    SQL> create pfile='init<standby oracle_sid>.ora' from spfile ;
    SQL> create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
  2. Stoppen und entfernen Sie den vorhandenen Datenbankservice.

    
    $ srvctl stop database -d <standby db_unique_name>
    
    $ srvctl remove database -d <standby db_unique_name>
  3. Erstellen Sie den Datenbankservice.

    $ srvctl add database -d <standby db_unique_name> -n <standby db_name>   -o $ORACLE_HOME -c SINGLE  -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
    -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name>
    $ srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>"
    $ srvctl config database -d <standby db_unique_name>
  4. Starten Sie den Datenbankservice.

    
    $ srvctl start database -d <standby db_unique_name>
    
  5. Bereinigen Sie die Dateien aus $ORACLE_HOME/dbs.

    $ rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
    $ rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
  6. Erstellen Sie die Datei $ORACLE_HOME/dbs/init<standby oracle_sid>.ora, und referenzieren Sie den neuen Speicherort der Datei "spfile".

    SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
  7. Stoppen Sie die Datenbank, und starten Sie die Standbydatenbank mit "srvctl".

    $ srvctl start database -d <standby db_unique_name>

Data Guard konfigurieren

Führen Sie die folgenden Schritte aus, um die Konfiguration von Data Guard abzuschließen und Redo-Transport aus der Primärdatenbank sowie Redo Apply in der Standbydatenbank zu aktivieren.

  1. Führen Sie das Befehlszeilenutility "dgmgrl "aus dem Primär- oder Standby-DB-System aus, und stellen Sie mit Sys-Anmeldedaten eine Verbindung zur Primärdatenbank her.

    DGMGRL> connect sys/<sys password>@<primary tns alias>
  2. Erstellen Sie die Data Guard-Konfiguration, und identifizieren Sie die Primär- und die Standbydatenbank.

    DGMGRL> create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>;
    add database  <standby db_unique_name> as connect identifier is <standby tns alias>  maintained as physical;
  3. Aktivieren Sie die Data Guard-Konfiguration

    DGMGRL> enable configuration;
  4. Prüfen Sie, ob das Data Guard-Setup ordnungsgemäß vorgenommen wurde. Führen Sie die folgenden SQL-Anweisungen in der Primär- und der Standbydatenbank aus.

    SQL> select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
  5. Prüfen Sie, ob die Data Guard-Prozesse in der Standbydatenbank initiiert wurden.

    SQL> select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
  6. Prüfen Sie die Parameterkonfiguration in der Primär- und der Standbydatenbank.

    SQL> show parameter log_archive_dest_
    SQL> show parameter log_archive_config
    SQL> show parameter fal_server
    SQL> show parameter log_archive_format
  7. Prüfen Sie, ob die Data Guard-Konfiguration funktioniert. Stellen Sie sicher, dass Redo Shipping und Redo Apply aktiv sind und dass die Standbydatenbank gegenüber der Primärdatenbank nicht zu stark verzögert ist.

    DGMGRL> show configuration verbose
    DGMGRL> show database verbose <standby db_unique_name>
    DGMGRL> show database verbose <primary db_unique_name>

    Alle Abweichungen, Fehler oder Warnungen müssen behoben werden. Sie können auch eine Transaktion in der Primärdatenbank ausführen und prüfen, ob sie in der Standbydatenbank sichtbar ist.

  8. Prüfen Sie, ob die Data Guard-Konfiguration wie erwartet funktioniert, indem Sie Switchover und Failover in beide Richtungen durchführen. Führen Sie nach jedem Vorgang show configuration aus, und stellen Sie sicher, dass keine Fehler oder Warnungen ausgegeben werden.

    Achtung

    Dieser Schritt ist optional und kann nach eigenem Ermessen ausgeführt werden. Wenn die Konfiguration aus irgendeinem Grund nicht gültig ist, sind Switchover und/oder Failover nicht erfolgreich, und es kann schwierig oder unmöglich sein, die Primärdatenbank zu starten. Möglicherweise ist ein Recovery der Primärdatenbank erforderlich, was sich auf die Verfügbarkeit auswirkt.

    
    DGMGRL> switchover to <standby db_unique_name>
    DGMGRL> switchover to <primary db_unique_name>
    #connect to standby before failover:
    
    DGMGRL> connect sys/<sys password>@<standby db_unique_name>
    DGMGRL> failover to <standby db_unique_name>
    DGMGRL> reinstate database <primary db_unique_name>
    #connect to primary before failover:
    
    DGMGRL> connect sys/<sys password>@<primary db_unique_name>
    DGMGRL> failover to <primary db_unique_name>
    DGMGRL> reinstate database <standby db_unique_name>

Observer konfigurieren (optional)

Die Best Practice für High Availability und Dauerhaftigkeit besteht in der Ausführung von Primär- und Standbydatenbank sowie Observer in separaten Availability-Domains. Der Observer bestimmt, ob ein Failover auf eine bestimmte Standbyzieldatenbank vorgenommen werden soll. Der für den Observer verwendete Server erfordert die Oracle Client Administrator-Software, die Oracle SQL NET und Broker einschließt.

  1. Konfigurieren Sie TNS-Aliasnamen für die Primär- und die Standbydatenbank wie oben beschrieben, und prüfen Sie die Verbindung zu beiden Datenbanken.

  2. Ändern Sie den Schutzmodus in "maxavailability" oder "maxperformance" ("maxprotection" wird für FSFO nicht unterstützt).

    So aktivieren Sie "maxavailability":

    DGMGRL> edit database <standby db_unique_name> set property 'logXptMode'='SYNC';
    DGMGRL> edit database <primary db_unique_name> set property 'logXptMode'='SYNC';
    DGMGRL> edit configuration set protection mode as maxavailability;

    So aktivieren Sie "maxperformance":

    DGMGRL> edit configuration set protection mode as maxperformance;
    DGMGRL> edit database <standby db_unique_name> set property 'logXptMode'='ASYNC';
    DGMGRL> edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';

    Bei "maxperformance" begrenzt die FastStartFailoverLaglimit-Eigenschaft den maximal zulässigen Datenverlust standardmäßig auf 30 Sekunden.

  3. Die folgenden Eigenschaften müssen ebenfalls berücksichtigt werden. Führen Sie show configuration verbose aus, um die aktuellen Werte anzuzeigen.

    • FastStartFailoverPmyShutdown
    • FastStartFailoverThreshold
    • FastStartFailoverTarget
    • FastStartFailoverAutoReinstate

    (Die Ausführung von show configuration führt zu folgendem Fehler, bis der Observer gestartet wird: Warnung: ORA-16819: Observer für Fast-Start Failover nicht gestartet.)

  4. Fast-Start Failover von Broker aus aktivieren:

    DGMGRL> Enable fast_start failover
  5. Prüfen Sie den Fast-Start Failover und die zugehörigen Einstellungen.

    DGMGRL> show fast_start failover
  6. Starten Sie den Observer aus dem Broker (er wird im Vordergrund ausgeführt, kann jedoch auch im Hintergrund ausgeführt werden).

    DGMGRL> start observer
  7. Stellen Sie sicher, dass der Fast-Start Failover aktiviert ist und keine Fehler oder Warnungen vorliegen.

    DGMGRL> show configuration verbose
  8. Testen Sie Failover immer in beiden Richtungen, um sicherzustellen, dass alles wie erwartet funktioniert. Prüfen Sie, ob FSFO richtig ausgeführt wird, indem Sie die Primärdatenbank herunterfahren.

    Der Observer sollte den Failover auf die Standbydatenbank starten. Wenn der Schutzmodus auf "maxprotection" gesetzt ist, kann es zu Datenverlust kommen, basierend auf dem FastStartFailoverLaglimit-Wert.