Primäre Datenbank von Data Guard vorbereiten

Data Guard erfordert eine primäre Datenbank und mindestens eine Standby-Datenbank, um zu funktionieren. Bevor Sie Data Guard für die Bare-Metal-Lösung einrichten, erstellen Sie die primäre Datenbank.

Die folgenden Beispiele werden in diesem Leitfaden verwendet:

Eindeutiger Name der Datenbank Server-Hostnamen RAC-Instanznamen Rolle
DBDG_SITE1 site1db1, site1db2 DBDG_SITE11, DBDG_SITE12 Primär
DBDG_SITE2 site2db1, site2db2 DBDG_SITE21, DBDG_SITE22 Standby

Die Bare-Metal-Lösungsserver, auf denen Oracle in diesem Leitfaden ausgeführt wird, werden mit den folgenden Umgebungsvariablen konfiguriert:

Name der Umgebungsvariablen Wert
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

Je nach Einrichtung müssen Sie möglicherweise die Pfade der Umgebungsvariablen ändern.

Primäre Datenbank einrichten

  1. Melden Sie sich beim ersten Bare-Metal-Lösungsserver an, der die primäre Datenbank hostet.

  2. Fügen Sie in der Datei /etc/oratab einen Eintrag hinzu, damit der Befehl oraenv Umgebungsvariablen für die primäre Datenbank festlegen kann. Ändern Sie den Instanznamen so, dass er der ausgeführten Instanz auf jedem Knoten entspricht, und geben Sie den vollständigen Pfad zur Startseite der Oracle-Datenbank an:

    DBDG_SITE11:ORACLE_HOME:N
    
  3. Legen Sie die Umgebungsvariable ORACLE_SID fest, damit Sie eine Verbindung zur primären Datenbank herstellen können:

    source oraenv <<< "DBDG_SITE11"
    

    Sie sollten die Antwort The Oracle base has been set to /apps/oracle/oracle_base erhalten.

Datenbank-Logging konfigurieren und Flashback-Datenbank aktivieren

  1. Starten Sie SQL*Plus und aktivieren Sie force logging, damit nologging-Tablespaces, die der Datenbank hinzugefügt werden, protokolliert werden:

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. Prüfen Sie, ob archivelog mode und flashback database aktiviert sind:

    ARCHIVE LOG LIST;
    SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
    

    Wenn archivelog mode und flashback database nicht aktiviert sind, aktivieren Sie sie mit den folgenden SQL-Befehlen:

    1. Beenden Sie die geclusterte Datenbank, damit Sie die erforderlichen Änderungen vornehmen können:

       srvctl stop database -d 
      
    2. Führen Sie die erforderlichen SQL-Befehle aus, um archivelog mode und flashback database zu aktivieren:

       STARTUP MOUNT;
       ALTER DATABASE ARCHIVELOG;
       ALTER DATABASE FLASHBACK ON;
       ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH;
       ALTER DATABASE OPEN;
       SHUTDOWN IMMEDIATE;
       EXIT;
      
    3. Starten Sie die geclusterte Datenbank noch einmal:

       srvctl start database -d DBDG_SITE1
      

Datenbank für Data Guard vorbereiten

  1. Melden Sie sich beim ersten Bare-Metal-Lösungsserver an, der die primäre Datenbank hostet, und legen Sie die Umgebungsvariable ORACLE_SID fest, damit Sie eine Verbindung zur primären Datenbank herstellen können:

    source oraenv <<< "DBDG_SITE11"
    

    Sie sollten die Antwort The Oracle base has been set to /apps/oracle/oracle_base erhalten.

  2. Starten Sie SQL*Plus und ändern Sie dann die Initialisierungsparameter für die Datenbank, die für die Data Guard-Konfiguration und -Dienste erforderlich sind:

    sqlplus / as sysdba
    
    ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH;
    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
    
  3. Prüfen Sie, ob in der Datenbank Standby-Wiederherstellungs-Logs vorhanden sind. Jeder Thread muss eine zusätzliche Standby-Loggruppe für den Standby-Modus haben, also eine mehr als die Anzahl der Online-Wiederherstellungs-Loggruppen beträgt.

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    Im folgenden Beispiel hat vier Online-Wiederherstellungs-Logs pro Thread, aber keine Standby-Wiederherstellungs-Loggruppen. Da es vier Online-Wiederherstellungs-Loggruppen gibt, müssen für jeden Thread fünf Standby-Loggruppen erstellt werden:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. Wenn genügend Standby-Loggruppen vorhanden sind, überspringen Sie diesen Schritt. Standby-Wiederherstellungs-Loggruppen müssen dieselbe Größe haben wie jede Online-Wiederherstellungs-Loggruppe. Erstellen Sie die erforderliche Anzahl von Standby-Loggruppen mit dem folgenden PL/SQL-Code:

    SET FEEDBACK OFF
    SET SERVEROUTPUT ON
    DECLARE
      CURSOR cur_thread IS
        SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#;
      standbylog_count NUMBER := 0;
      standbylog_group NUMBER := 0;
      standbylog_size NUMBER := 0;
      last_group_number NUMBER;
      sqlstmt VARCHAR2(200);
    BEGIN
      SELECT MAX(GROUP#), MAX(BYTES)
    INTO last_group_number, standbylog_size
    FROM V$LOG;
      standbylog_group := last_group_number + 1;
      FOR rec_thread IN cur_thread LOOP
    standbylog_count := rec_thread.count + 1;
    FOR i IN 1..standbylog_count LOOP
      sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';';
      DBMS_OUTPUT.PUT_LINE( sqlstmt);
      standbylog_group := standbylog_group + 1;
    END LOOP;
      END LOOP;
    END;
    /
    SET FEEDBACK ON
    

    Die folgende Beispielausgabe weist Sie an, fünf Standby-Loggruppen für jeden der beiden Threads zu erstellen:

    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP  9 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
    
  5. Prüfen Sie, ob die Standby-Wiederherstellungs-Logs für Ihre Konfiguration korrekt eingerichtet sind:

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    Die folgende Ausgabe hat vier Online-Wiederherstellungs-Loggruppen pro Thread und fünf Standby-Wiederherstellungs-Loggruppen pro Thread:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    Standby logfile groups in thread 1: 5
    Standby logfile groups in thread 2: 5
    
  6. Beenden Sie SQL*Plus:

    EXIT;
    

Datenbankparameter und Passwortdateien auf die Standby-Server kopieren

  1. Erstellen Sie eine Datenbankparameterdatei und kopieren Sie sie auf den Standby-Server:

    1. Erstellen Sie einen Ordner für die Standby-Datenbankparameterdatei (pfile):

      mkdir /home/oracle/backup
      
    2. Starten Sie SQL*Plus und erstellen Sie dann die Standby-Datenbank pfile:

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. Beenden Sie SQL*Plus und kopieren Sie dann pfile auf den ersten Bare-Metal-Lösungsserver am Standby-Speicherort:

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. Achten Sie darauf, dass das SYS-Remote-Anmeldepasswort sicher gespeichert wird. Wenn Sie das Passwort nicht kennen, setzen Sie es zurück.

  3. Kopieren Sie die Passwortdatei in den Standby-Cluster:

    1. Rufen Sie den Speicherort der Passwortdatei mit dem Befehl srvctl ab:

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      Die folgende Ausgabe zeigt den Speicherort eines Passwortdateispeichers in ASM:

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. Erstellen Sie mit dem Befehl asmcmd eine temporäre Kopie der Passwortdatei im lokalen Dateisystem:

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. Kopieren Sie die Passwortdatei auf den ersten Bare-Metal-Lösungsserver am Standby-Speicherort und löschen Sie dann die temporäre Kopie vom Bare-Metal-Lösungsserver am primären Speicherort:

      scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21
      rm /tmp/orapwDBDG_SITE21
      

Datenbankverbindung konfigurieren

Bearbeiten Sie die Datei $ORACLE_HOME/network/admin/tsnames.ora auf jedem Bare-Metal-Lösungsserver am primären Datenbankspeicherort, um die Nettodienstkonfiguration zu aktualisieren. Die Datei enthält drei Einträge. Eine für jede Datenbank und einen temporären Eintrag während der Datenbankduplizierung, den Sie später löschen:

DBDG_SITE1 =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE1) (UR=A)
      )
  )

DBDG_SITE2 =
 (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE2) (UR=A)
      )
  )

DBDG_SITE2_FOR_DUPLICATION =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (INSTANCE_NAME = DBDG_SITE21) (UR=A)
      )
  )

Die primäre Datenbank kann jetzt in einer Data Guard-Konfiguration verwendet werden.

Weitere Informationen

Erstellen Sie als Nächstes die Standby-Datenbank von Data Guard.