Préparer la base de données principale de Data Guard

Data Guard nécessite une base de données principale et au moins une base de données de secours pour fonctionner. Avant de configurer Data Guard sur la solution Bare Metal, créez la base de données principale.

Les exemples suivants sont utilisés tout au long de ce guide:

Nom de base de données unique Noms d'hôtes du serveur Noms d'instance RAC Rôle
DBDG_SITE1 site1db1, site1db2 DBDG_SITE11, DBDG_SITE12 Principal
DBDG_SITE2 site2db1, site2db2 DBDG_SITE21, DBDG_SITE22 Instance de secours

Les serveurs de solution Bare Metal exécutant Oracle dans ce guide sont configurés avec les variables d'environnement suivantes:

Nom de la variable d'environnement Value
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

Vous devrez peut-être modifier les chemins d'accès des variables d'environnement en fonction de votre configuration.

Configurer la base de données principale

  1. Connectez-vous au premier serveur de solution Bare Metal qui héberge la base de données principale.

  2. Dans le fichier /etc/oratab, ajoutez une entrée afin que la commande oraenv puisse définir des variables d'environnement pour la base de données principale. Modifiez le nom de l'instance pour qu'il corresponde à l'instance en cours d'exécution sur chaque nœud et spécifiez le chemin d'accès complet à la page d'accueil de la base de données Oracle:

    DBDG_SITE11:ORACLE_HOME:N
    
  3. Définissez la variable d'environnement ORACLE_SID afin de pouvoir vous connecter à la base de données principale:

    source oraenv <<< "DBDG_SITE11"
    

    Vous devriez recevoir la réponse The Oracle base has been set to /apps/oracle/oracle_base.

Configurer la journalisation des bases de données et activer la base de données Flashback

  1. Démarrez SQL*Plus, puis activez force logging afin que les espaces de table nologging ajoutés à la base de données soient enregistrés:

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. Vérifiez que archivelog mode et flashback database sont activés:

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

    Si archivelog mode et flashback database sont désactivés, activez-les à l'aide des commandes SQL suivantes:

    1. Arrêtez la base de données en cluster afin d'effectuer les modifications requises:

       srvctl stop database -d 
      
    2. Exécutez les commandes SQL requises pour activer archivelog mode et 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. Redémarrez la base de données en cluster:

       srvctl start database -d DBDG_SITE1
      

Préparer la base de données pour Data Guard

  1. Connectez-vous au premier serveur de solution Bare Metal qui héberge la base de données principale et définissez la variable d'environnement ORACLE_SID afin de pouvoir vous connecter à la base de données principale:

    source oraenv <<< "DBDG_SITE11"
    

    Vous devriez recevoir la réponse The Oracle base has been set to /apps/oracle/oracle_base.

  2. Démarrez SQL*Plus, puis modifiez les paramètres d'initialisation de base de données requis pour la configuration et les services 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. Vérifiez l'existence de journaux de rétablissement de secours dans la base de données. Chaque thread doit avoir un groupe de journaux de rétablissement de secours supérieur au nombre de groupes de journaux de rétablissement en ligne.

    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'exemple suivant comporte quatre journaux de rétablissement en ligne par thread et ne comporte aucun groupe de journaux de rétablissement de secours. Comme il existe quatre groupes de journaux de rétablissement en ligne, cinq groupes de journaux de rétablissement de secours doivent être créés pour chaque thread:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. Si vous disposez de suffisamment de groupes de journaux de rétablissement de secours, ignorez cette étape. Les groupes de journaux de rétablissement de secours doivent avoir la même taille que chaque groupe de journaux de rétablissement en ligne. Créez le nombre de groupes de journaux de rétablissement de secours nécessaire avec le code PL/SQL suivant:

    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
    

    L'exemple de résultat suivant vous demande de créer cinq groupes de journaux de rétablissement de secours pour chacun des deux threads:

    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. Vérifiez que les journaux de rétablissement de secours sont correctement configurés pour votre configuration:

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

    La sortie suivante comporte quatre groupes de journaux de rétablissement en ligne par thread et cinq groupes de journaux de rétablissement par 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. Quittez SQL*Plus:

    EXIT;
    

Copier les paramètres de base de données et les fichiers de mot de passe sur les serveurs de secours

  1. Créez un fichier de paramètres de base de données et copiez-le sur le serveur de secours:

    1. Créez un dossier pour le fichier de paramètres de la base de données de secours (pfile):

      mkdir /home/oracle/backup
      
    2. Démarrez SQL*Plus, puis créez la base de données de secours pfile:

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. Quittez SQL*Plus, puis copiez le pfile sur le premier serveur de solution Bare Metal dans l'emplacement de secours:

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. Vérifiez que le mot de passe de connexion à distance SYS est enregistré en toute sécurité. Si vous ne connaissez pas le mot de passe, réinitialisez-le.

  3. Copiez le fichier de mot de passe dans le cluster de secours:

    1. Obtenez l'emplacement du fichier de mot de passe à l'aide de la commande srvctl:

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      Le résultat suivant indique l'emplacement d'un magasin de fichiers de mot de passe dans ASM:

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. Créez une copie temporaire du fichier de mot de passe sur le système de fichiers local à l'aide de la commande asmcmd:

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. Copiez le fichier de mot de passe sur le premier serveur de solution Bare Metal dans l'emplacement de secours, puis supprimez la copie temporaire du serveur de solution Bare Metal dans l'emplacement principal:

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

Configurer la connectivité de la base de données

Modifiez le fichier $ORACLE_HOME/network/admin/tsnames.ora sur chaque serveur de solution Bare Metal dans l'emplacement de la base de données principale pour mettre à jour la configuration du service réseau. Le fichier contient trois entrées. une pour chaque base de données, et une entrée temporaire utilisée lors de la duplication de base de données que vous supprimerez ultérieurement:

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

La base de données principale est maintenant prête à être utilisée dans une configuration Data Guard.

Étapes suivantes

Ensuite, créez la base de données de secours de Data Guard.