Skip to main content
NetApp database solutions
La versione in lingua italiana fornita proviene da una traduzione automatica. Per eventuali incoerenze, fare riferimento alla versione in lingua inglese.

Configura Data Guard Broker e Fast-Start Failover per Oracle Database 26ai su Google Cloud NetApp Volumes

Collaboratori netapp-jsnyder

Configura Oracle Data Guard Broker e Fast-Start Failover con un Observer dedicato per abilitare le transizioni di ruolo automatiche per Oracle Database 26ai su Google Cloud NetApp Volumes.

Specifico per livello: Questa procedura si applica solo al livello Prod HA (Data Guard + FSFO).

Questa procedura comprende l'abilitazione del broker su entrambi i database, la creazione della configurazione di Data Guard, l'abilitazione di FSFO con la modalità di protezione MaxAvailability, l'installazione di Oracle Instant Client sull'host Observer, l'avvio di Observer come servizio systemd con credenziali basate su wallet e il test di switchover e failover. Dopo ENABLE CONFIGURATION, gestisci il trasporto e i ruoli tramite DGMGRL (non LOG_ARCHIVE_DEST_* SQL ad hoc).

Passaggio 1: Abilita Data Guard Broker

Abilita il Data Guard Broker su entrambi gli host del database e crea la configurazione del broker che collega i database primario e di standby sotto gestione unificata.

  1. Imposta dg_broker_start=TRUE sui database host del database primario e di standby:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH;
    EXIT
    SQL'
  2. Sul server primario, connettiti a DGMGRL con autenticazione del sistema operativo e crea la configurazione del broker:

    Nota

    Solo sull'host Observer, utilizzare dgmgrl /@orcl dopo che il portafoglio di accesso automatico esiste. Non inserire le password sulla dgmgrl riga di comando.

    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. Convalida la configurazione: correggi eventuali WARNING o valori non NULL ERROR prima di Passaggio 3: Configura le proprietà FSFO e abilita:

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

Passaggio 2: Conferma il flashback per FSFO

Conferma che flashback database sia abilitato su entrambi gli host. Flashback è necessario per FSFO auto-reinstate, che permette all'ex primario di rientrare automaticamente nella configurazione come standby dopo un failover.

  1. Conferma flashback_on che YES è presente su entrambi gli host del database:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus -s / as sysdba <<<"SELECT flashback_on FROM v\$database;"
    '
    # Expected on both hosts: YES
  2. Solo sul primario, se la conservazione dei flashback non è già impostata:

    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'

Passaggio 3: Configura e abilita FSFO

Imposta il trasporto dei redo SYNC, configura la modalità di protezione MaxAvailability, definisci le destinazioni FSFO su ciascun database e abilita il Fast-Start Failover.

  1. Imposta la modalità di trasporto dei redo SYNC su entrambi i database e aumenta la modalità di protezione a MaxAvailability:

    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. Imposta le destinazioni FSFO in modo che ogni database indichi l'altro come destinazione di failover, quindi configura la soglia e il comportamento di ripristino automatico:

    -- 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. Abilita la funzione Fast-Start Failover e conferma la configurazione:

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

Passaggio 4: Installa Instant Client su Observer

Installa Oracle Instant Client sulla VM Observer dedicata (oradg-obs, crea un utente OS dedicato oracle e configura l'ambiente Oracle Net così che l'Observer possa connettersi a entrambi i membri del database su TCP/1521.

  1. Installa i pacchetti Oracle Instant Client sull'host Observer (oradg-obs):

    # 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. Crea un oracle utente del sistema operativo dedicato che sarà il proprietario del wallet e dell'unità systemd:

    sudo useradd -u 54321 -m oracle
    sudo passwd -l oracle
  3. Configura l'ambiente Oracle Net e crea tnsnames.ora con le voci per entrambi gli host del database:

    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

Passaggio 5: Esegui Observer come servizio systemd

Crea un portafoglio di accesso automatico con le credenziali per entrambi i membri del database, poi configura e avvia l'Observer come servizio systemd così da sopravvivere ai riavvii e riconnettersi automaticamente alla configurazione.

Archivia le credenziali per un account amministrativo Data Guard dedicato (ad esempio, SYSDG) nel wallet anziché SYS. Le credenziali non devono mai apparire su una dgmgrl riga di comando, dove sono visibili a ps e journalctl; connettiti sempre usando /@<tns_alias> sull'Observer.

  1. Crea il portafoglio crittografato e inserisci le credenziali per entrambi i membri del database:

    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. Genera il portafoglio di accesso automatico cwallet.sso così il servizio systemd Observer può avviarsi senza richiesta della password. Se cwallet.sso manca dopo aver eseguito mkstore, usa orapki dal pacchetto di strumenti Instant Client o da una home del database per crearlo, poi aggiungi di nuovo le credenziali memorizzate:

    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. Crea l'unità systemd, abilita il servizio e verifica che l'Observer sia connesso:

    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

    L'Observer deve leggere CONNECTED dal primario (un DISCONNECTED Observer sospende silenziosamente FSFO):

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

Passaggio 6: Testa FSFO

Convalida la configurazione di Data Guard con VALIDATE DATABASE, poi esegui uno switchover pianificato e, in una finestra di test, un failover non pianificato con reset della VM per confermare che FSFO funzioni end-to-end.

  1. Esegui un test di commutazione pianificata e ripristina la topologia originale:

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SWITCHOVER TO 'orcls';
    DGMGRL> SHOW CONFIGURATION;
    DGMGRL> SWITCHOVER TO 'orcl';        -- restore topology
  2. Esegui un failover non pianificato tramite il reset di una VM in una finestra di test controllata:

    Usa un Reset della VM (test in stile crash); un normale Stop potrebbe non attivare FSFO. Tail /var/log/dgmgrl-observer.log su oradg-obs per monitorare l'avanzamento del failover; ripristina la topologia al termine.

E ora?

La configurazione di Oracle Data Guard Broker, Fast-Start Failover e Observer è ora attiva per questa implementazione.