Prepara il database principale di Data Guard

Data Guard richiede un database principale e almeno un database di standby per funzionare. Prima di configurare Data Guard su soluzione Bare Metal, crea il database principale.

In questa guida vengono utilizzati i seguenti esempi:

Nome univoco del database Nomi host del server Nomi delle istanze RAC Ruolo
DBDG_SITE1 site1db1, site1db2 DBDG_SITE11, DBDG_SITE12 Principale
DBDG_SITE2 site2db1, site2db2 DBDG_SITE21, DBDG_SITE22 Offline

I server della soluzione Bare Metal che eseguono Oracle in questa guida sono configurati con le seguenti variabili di ambiente:

Nome variabile di ambiente Valore
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

A seconda della configurazione, potrebbe essere necessario modificare i percorsi delle variabili di ambiente.

Configurare il database principale

  1. Accedi al primo server Bare Metal Solution che ospita il database principale.

  2. Nel file /etc/oratab, aggiungi una voce in modo che il comando oraenv possa impostare le variabili di ambiente per il database principale. Modifica il nome dell'istanza in modo che corrisponda all'istanza in esecuzione su ciascun nodo e specifica il percorso completo della home page del database Oracle:

    DBDG_SITE11:ORACLE_HOME:N
    
  3. Imposta la variabile di ambiente ORACLE_SID in modo da poterti connettere al database principale:

    source oraenv <<< "DBDG_SITE11"
    

    Dovresti ricevere la risposta The Oracle base has been set to /apps/oracle/oracle_base.

Configura il logging del database e abilita il database flashback

  1. Avvia SQL*Plus, quindi abilita force logging in modo che vengano inseriti nologging spazi tabella aggiunti al database:

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. Verifica che archivelog mode e flashback database siano attivi:

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

    Se i criteri archivelog mode e flashback database sono disattivati, attivali con i seguenti comandi SQL:

    1. Arresta il database in cluster in modo da poter apportare le modifiche necessarie:

       srvctl stop database -d 
      
    2. Esegui i comandi SQL richiesti per attivare archivelog mode e flashback database:

       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. Avvia di nuovo il database in cluster:

       srvctl start database -d DBDG_SITE1
      

Prepara il database per Data Guard

  1. Accedi al primo server Bare Metal Solution che ospita il database principale e imposta la variabile di ambiente ORACLE_SID in modo da poterti connettere al database principale:

    source oraenv <<< "DBDG_SITE11"
    

    Dovresti ricevere la risposta The Oracle base has been set to /apps/oracle/oracle_base.

  2. Avvia SQL*Plus, quindi modifica i parametri di inizializzazione del database richiesti per la configurazione e i servizi di Data Guard:

    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. Verifica l'esistenza di log di ripristino in standby nel database. Ogni thread deve avere un altro gruppo di log di ripristino in standby rispetto al numero di gruppi di log aggiornati.

    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#;
    

    L'esempio seguente ha quattro log di ripetizione online per thread e non ha creato gruppi di log di ripristino in standby. Poiché esistono quattro gruppi di log di ripristino online, per ogni thread devono essere creati cinque gruppi di log di ripristino in standby:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. Se sono presenti sufficienti gruppi di log di ripetizione in standby, ignora questo passaggio. I gruppi di log di ripetizione in standby devono avere le stesse dimensioni di ogni gruppo di log di ripetizione online. Crea il numero necessario di gruppi di log di ripristino in standby con il seguente codice PL/SQL:

    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
    

    Il seguente output di esempio indica di creare cinque gruppi di log di ripristino in standby per ciascuno dei due thread:

    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. Verifica che i log di ripristino in standby siano configurati correttamente per la tua configurazione:

    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#;
    

    L'output seguente contiene quattro gruppi di log per la ripetizione del log online per thread e cinque gruppi di log per la visualizzazione in standby per 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. Esci da SQL*Plus:

    EXIT;
    

Copia il file del database e il file della password sui server di standby

  1. Crea un file di parametri del database e copialo nel server di standby:

    1. Crea una cartella per il file dei parametri del database standby (pfile):

      mkdir /home/oracle/backup
      
    2. Avvia SQL*Plus, quindi crea il database di standby pfile:

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. Esci da SQL*Plus, quindi copia il file pfile nel primo server Bare Metal Solution nella posizione di standby:

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. Assicurati che la password di accesso remoto di SYS sia salvata in modo sicuro. Se non conosci la password, reimpostala.

  3. Copia il file della password nel cluster di standby:

    1. Individua il percorso del file della password utilizzando il comando srvctl:

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      L'output seguente mostra la posizione di un archivio di file delle password in ASM:

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. Crea una copia temporanea del file delle password sul file system locale usando il comando asmcmd:

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. Copia il file della password nel primo server Bare Metal Solution nella posizione di standby, quindi elimina la copia temporanea dal server Bare Metal Solution nella posizione principale:

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

Configura la connettività del database

Modifica il file $ORACLE_HOME/network/admin/tsnames.ora su ciascun server Bare Metal Solution nella posizione del database principale per aggiornare la configurazione del servizio net. Il file contiene tre voci, una per ciascun database e una voce temporanea utilizzata durante la duplicazione del database, che verrà eliminata in seguito:

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)
      )
  )

Il database principale è pronto per essere utilizzato nella configurazione di Data Guard.

Passaggi successivi

Ora puoi creare il database standby di Data Guard.