Skip to main content
NetApp database solutions
Die deutsche Sprachversion wurde als Serviceleistung für Sie durch maschinelle Übersetzung erstellt. Bei eventuellen Unstimmigkeiten hat die englische Sprachversion Vorrang.

Konfiguration von Data Guard Broker und Fast-Start-Failover für Oracle Database 26ai auf Google Cloud NetApp Volumes

Beitragende netapp-jsnyder
Änderungen vorschlagen

Oracle Data Guard Broker und Fast-Start Failover mit einem dedizierten Observer konfigurieren, damit automatische Rollenübergänge für Oracle Database 26ai auf Google Cloud NetApp Volumes möglich sind.

Tierspezifisch: Dieses Verfahren gilt nur für die Prod HA (Data Guard + FSFO) Tier.

Dieses Verfahren umfasst die Aktivierung des Brokers auf beiden Datenbanken, die Erstellung der Data Guard Konfiguration, die Aktivierung von FSFO mit MaxAvailability Schutzmodus, die Installation des Oracle Instant Client auf dem Observer-Host, den Start des Observers als systemd-Dienst mit walletbasierten Anmeldeinformationen sowie das Testen von Switchover und Failover. Nach ENABLE CONFIGURATION der Einrichtung erfolgt die Verwaltung von Transport und Rollen über DGMGRL (nicht per Ad-hoc LOG_ARCHIVE_DEST_* SQL).

Schritt 1: Data Guard Broker aktivieren

Der Data Guard Broker wird auf beiden Datenbankhosts aktiviert und die Brokerkonfiguration erstellt, die die primäre und die Standby-Datenbank unter einheitlicher Verwaltung verbindet.

  1. Auf den primären und Standby Datenbankhosts dg_broker_start=TRUE festlegen:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH;
    EXIT
    SQL'
  2. Auf dem primären Server erfolgt die Verbindung zu DGMGRL mit Betriebssystem-Authentifizierung, und die Broker-Konfiguration wird erstellt:

    Hinweis

    Nur auf dem Observer-Host verwenden Sie dgmgrl /@orcl nachdem die Auto-Login-Wallet existiert. Geben Sie keine Passwörter in die dgmgrl Befehlszeile ein.

    sudo -u oracle bash -c '
    export ORACLE_HOME=/u01/app/oracle/product/26ai/db_1
    export ORACLE_SID=orcl
    export PATH=$ORACLE_HOME/bin:$PATH
    dgmgrl /
    '
    DGMGRL> CREATE CONFIGURATION 'orcl_dg' AS
            PRIMARY DATABASE IS 'orcl' CONNECT IDENTIFIER IS orcl;
    DGMGRL> ADD DATABASE 'orcls' AS CONNECT IDENTIFIER IS orcls;
    DGMGRL> ENABLE CONFIGURATION;
    DGMGRL> SHOW CONFIGURATION;
    -- Expect: Configuration Status: SUCCESS, both members SUCCESS.
  3. Die Konfiguration validieren, alle WARNING oder nicht-NULL ERROR vor Schritt 3: FSFO-Eigenschaften konfigurieren und aktivieren beheben:

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SHOW CONFIGURATION VERBOSE;

Schritt 2: Flashback für FSFO bestätigen

Bestätigt werden muss, dass die Flashback-Datenbank auf beiden Hosts aktiviert ist. Flashback ist für die FSFO Auto-Reinstate-Funktion erforderlich, die es dem ehemaligen primären Host ermöglicht, nach einem Failover automatisch wieder als Standby der Konfiguration beizutreten.

  1. Bestätigen flashback_on ist `YES`auf beiden Datenbank-Hosts:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus -s / as sysdba <<<"SELECT flashback_on FROM v\$database;"
    '
    # Expected on both hosts: YES
  2. Nur auf dem primären System, falls die Flashback-Aufbewahrung noch nicht festgelegt ist:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    export ORACLE_SID=orcl
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET db_flashback_retention_target=1440 SCOPE=BOTH;
    EXIT
    SQL'

Schritt 3: FSFO konfigurieren und aktivieren

SYNC-Redo-Transport einrichten, MaxAvailability Schutzmodus konfigurieren, FSFO-Ziele auf jeder Datenbank definieren und Fast-Start Failover aktivieren.

  1. Den Redo-Transportmodus auf SYNC für beide Datenbanken festlegen und den Schutzmodus auf MaxAvailability erhöhen:

    DGMGRL> EDIT DATABASE 'orcl'  SET PROPERTY LogXptMode='SYNC';
    DGMGRL> EDIT DATABASE 'orcls' SET PROPERTY LogXptMode='SYNC';
    DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MaxAvailability;
  2. Die FSFO-Ziele werden so festgelegt, dass jede Datenbank die andere als Failover-Ziel angibt, anschließend werden der Schwellenwert und das automatische Wiederherstellungsverhalten konfiguriert:

    -- Each side names the other
    DGMGRL> EDIT DATABASE 'orcl'  SET PROPERTY FastStartFailoverTarget = 'orcls';
    DGMGRL> EDIT DATABASE 'orcls' SET PROPERTY FastStartFailoverTarget = 'orcl';
    
    -- 30 s is the default; lower for faster RTO but more sensitive to network blips
    DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;
    DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverAutoReinstate = TRUE;
  3. Fast-Start-Failover aktivieren und die Konfiguration bestätigen:

    DGMGRL> ENABLE FAST_START FAILOVER;
    DGMGRL> SHOW FAST_START FAILOVER;
    -- Expected: Threshold 30 seconds, Target orcls, Observer not yet registered.

Schritt 4: Instant Client auf Observer installieren

Oracle Instant Client auf der dedizierten Observer-VM (oradg-obs installieren, einen dedizierten oracle OS-Benutzer erstellen und die Oracle Net-Umgebung so konfigurieren, dass der Observer eine Verbindung zu beiden Datenbankmitgliedern über TCP/1521 herstellen kann.

  1. Oracle Instant Client Pakete auf dem Observer-Host (oradg-obs installieren:

    # Use -el8 / -el9 if the Observer is on an older OL/RHEL release
    sudo dnf install -y oracle-instantclient-release-el10
    sudo dnf install -y oracle-instantclient-basic \
                        oracle-instantclient-sqlplus \
                        oracle-instantclient-tools
  2. Einen dedizierten `oracle`Betriebssystembenutzer erstellen, dem die Wallet und die systemd-Unit gehören:

    sudo useradd -u 54321 -m oracle
    sudo passwd -l oracle
  3. Die Oracle Net-Umgebung wird konfiguriert und tnsnames.ora mit Einträgen für beide Datenbank-Hosts erstellt:

    sudo mkdir -p /etc/oracle/network/admin
    sudo chown -R oracle:oracle /etc/oracle
    
    sudo -u oracle tee /home/oracle/.bash_profile >/dev/null <<'EOF'
    export ORACLE_HOME=/usr/lib/oracle/26/client64
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export PATH=$ORACLE_HOME/bin:$PATH
    export TNS_ADMIN=/etc/oracle/network/admin
    EOF
    
    # tnsnames.ora — must reach both DB hosts on TCP/1521
    sudo tee /etc/oracle/network/admin/tnsnames.ora >/dev/null <<'EOF'
    orcl =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracdb1)(PORT = 1521))
                    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))
    orcls =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracdb2)(PORT = 1521))
                    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcls)))
    EOF
    sudo chown oracle:oracle /etc/oracle/network/admin/tnsnames.ora

Schritt 5: Observer als systemd Service ausführen

Eine Auto-Login-Wallet mit Anmeldeinformationen für beide Datenbankmitglieder erstellen, anschließend den Observer als systemd-Dienst konfigurieren und starten, sodass er Neustarts übersteht und sich automatisch wieder mit der Konfiguration verbindet.

Anmeldeinformationen für ein dediziertes Data Guard-Administratorkonto (zum Beispiel SYSDG) sollten in der Wallet statt in SYS gespeichert werden. Anmeldeinformationen dürfen niemals auf einer dgmgrl Befehlszeile erscheinen, wo sie für ps und journalctl sichtbar sind; die Verbindung sollte immer mit /@<tns_alias> auf dem Observer hergestellt werden.

  1. Die verschlüsselte Wallet wird erstellt und die Anmeldeinformationen für beide Datenbankmitglieder werden hinterlegt:

    sudo -iu oracle bash <<'BASH'
    mkdir -p $TNS_ADMIN/wallet
    mkstore -wrl $TNS_ADMIN/wallet -create     # prompts for a wallet password — store in your secrets manager
    mkstore -wrl $TNS_ADMIN/wallet -createCredential orcl  sys ChangeMe!1
    mkstore -wrl $TNS_ADMIN/wallet -createCredential orcls sys ChangeMe!1
    BASH
    
    sudo tee /etc/oracle/network/admin/sqlnet.ora >/dev/null <<'EOF'
    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /etc/oracle/network/admin/wallet)))
    SQLNET.WALLET_OVERRIDE = TRUE
    EOF
    sudo chown oracle:oracle /etc/oracle/network/admin/sqlnet.ora
    sudo chmod -R 0700 /etc/oracle/network/admin/wallet
    
    sudo -iu oracle ls -l /etc/oracle/network/admin/wallet
    # Expected: cwallet.sso and ewallet.p12
    
    sudo -iu oracle bash <<'BASH'
    sqlplus -L "/@orcl as sysdba" <<'SQL'
    SELECT database_role FROM v$database;
    EXIT
    SQL
    BASH
    
    sudo -iu oracle bash <<'BASH'
    sqlplus -L "/@orcls as sysdba" <<'SQL'
    SELECT database_role FROM v$database;
    EXIT
    SQL
    BASH
    
    sudo -iu oracle dgmgrl /@orcl  'SHOW CONFIGURATION;'
    sudo -iu oracle dgmgrl /@orcls 'SHOW CONFIGURATION;'
  2. Die Auto-Login-Wallet cwallet.sso wird generiert, damit der Observer systemd-Dienst ohne Passwortabfrage starten kann. Wenn cwallet.sso nach der Ausführung von mkstore fehlt, kann orapki aus dem Instant Client Tools-Paket oder einem Datenbank-Home verwendet werden, um sie zu erstellen; anschließend werden die gespeicherten Anmeldeinformationen erneut hinzugefügt.

    sudo -iu oracle orapki wallet create \
      -wallet /etc/oracle/network/admin/wallet \
      -auto_login
    sudo -iu oracle ls -l /etc/oracle/network/admin/wallet
    # Expected: cwallet.sso and ewallet.p12
  3. Die systemd-Unit wird erstellt, der Dienst aktiviert und die Verbindung des Observers überprüft:

    sudo tee /etc/systemd/system/dgmgrl-observer.service >/dev/null <<'EOF'
    [Unit]
    Description=Oracle Data Guard Fast-Start Failover Observer
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=oracle
    Group=oracle
    Environment=ORACLE_HOME=/usr/lib/oracle/26/client64
    Environment=LD_LIBRARY_PATH=/usr/lib/oracle/26/client64/lib
    Environment=TNS_ADMIN=/etc/oracle/network/admin
    Environment=PATH=/usr/lib/oracle/26/client64/bin:/usr/bin:/bin
    ExecStart=/usr/lib/oracle/26/client64/bin/dgmgrl -silent /@orcl "START OBSERVER FILE IS '/var/lib/oracle/dgmgrl-observer.dat'"
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo install -d -o oracle -g oracle -m 0755 /var/lib/oracle
    sudo install -o oracle -g oracle -m 0640 /dev/null /var/log/dgmgrl-observer.log
    
    sudo tee /etc/logrotate.d/dgmgrl-observer >/dev/null <<'EOF'
    /var/log/dgmgrl-observer.log {
        weekly
        rotate 8
        compress delaycompress missingok notifempty
        create 0640 oracle oracle
        copytruncate
    }
    EOF
    
    sudo systemctl daemon-reload && sudo systemctl enable --now dgmgrl-observer.service
    sudo systemctl status dgmgrl-observer.service

    Der Observer muss `CONNECTED`vom Primärsystem ablesen (ein `DISCONNECTED`Observer setzt FSFO stillschweigend aus):

    DGMGRL> SHOW FAST_START FAILOVER;
    DGMGRL> SHOW CONFIGURATION;       -- Configuration Status: SUCCESS, FSFO: ENABLED

Schritt 6: FSFO testen

Die Data Guard Konfiguration wird mit VALIDATE DATABASE validiert, anschließend erfolgt ein geplanter Switchover und in einem Testfenster ein ungeplanter VM-Reset-Failover, um zu bestätigen, dass FSFO durchgängig funktioniert.

  1. Ein geplanter Switchover kann getestet und die ursprüngliche Topologie wiederhergestellt werden:

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SWITCHOVER TO 'orcls';
    DGMGRL> SHOW CONFIGURATION;
    DGMGRL> SWITCHOVER TO 'orcl';        -- restore topology
  2. Ein ungeplantes Failover mithilfe eines VM-Resets in einem kontrollierten Testfenster testen:

    Ein VM-Reset (Absturztest) kann verwendet werden; ein normaler Stopp löst möglicherweise keinen FSFO aus. Mit Tail /var/log/dgmgrl-observer.log auf oradg-obs lässt sich der Failover-Fortschritt überwachen; nach Abschluss kann die Topologie wiederhergestellt werden.

Was kommt als Nächstes?

Die Konfiguration für Oracle Data Guard Broker, Fast-Start Failover und Observer ist nun für diese Bereitstellung eingerichtet.