Configuration d'Oracle 19c Data Guard étape par étape

Si vous souhaitez mettre en place un Data Guard Oracle 19c, vous devez disposer de deux serveurs.

Un Data Guard physique est la configuration par défaut d'Oracle Data Guard.

Fournit une copie physiquement identique de la base de données principale, avec des structures de base de données sur disque identiques à la base de données principale, bloc par bloc. Le schéma de la base de données, y compris les index, est identique.

Une base de données physique de réserve est synchronisée avec la base de données principale par l'intermédiaire de Redo Apply, qui récupère les données de réserve reçues de la base de données principale et les applique à la base de données physique de réserve.

Sur le serveur 1, vous devriez avoir une base de données déjà créée et sur le serveur 2, vous n'avez besoin que des binaires sans base de données créée.

J'utilise le fichier /etc/hosts pour configurer la résolution de noms.

Voici mon /etc/hosts sur les deux serveurs

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.130 srv1.localdomain srv1
192.168.1.131 srv2.localdomain srv2

Dans ce guide, je vais vous montrer comment créer une base de données de secours entre Barcelone et Paris.

C'est très simple si vous suivez cette procédure de mise en place d'un gardien de données étape par étape.

BCN est la base de données primaire sur le serveur srv1.

PARIS est la base de données en attente sur le serveur srv2.

1. Préparer la base de données primaire

Vous devez d'abord activer l'archivage dans votre base de données.

Activer l'archivage

sqlplus / as sysdba
select log_mode from v$database ;
alter system set log_archive_dest_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=both;
shutdown immediate
startup mount
alter database archivelog;
alter database open;
alter system switch logfile;
select name from v$archived_log;

Activer la journalisation forcée

select force_logging from v$database;
alter database force logging;
select force_logging from v$database;

Vérifier la taille du redo log

select group#, thread#, bytes/1024/1024 mb from v$log;
select thread#, instance from v$thread ;

Créer des journaux de réapprovisionnement de secours (standby redo logs)

Vous devez créer des fichiers journaux de secours de la même taille que le résultat obtenu lors de la requête précédente, et du même nombre.

Puisque j'ai 3 redo logs et que leur taille est de 200m, je crée 3 fichiers log en attente de 200m chacun.

alter database add standby logfile thread 1 size 200m;
alter database add standby logfile thread 1 size 200m;
alter database add standby logfile thread 1 size 200m;

Vérifier les journaux redo en attente

select group#, thread#, sequence#, bytes/1024/1024 mb, archived, status 
from v$standby_log;

select member from v$logfile where type = 'STANDBY';

Vérifier le nom unique de la base de données

show parameter db_unique_name

Configurer log_archive_config

alter system set log_archive_config='DG_CONFIG=(BCN,PARIS)' scope=both;

Set log_archive_dest_2

alter system set log_archive_dest_2='SERVICE=PARIS ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PARIS' scope=both;

Définir fal_server

show parameter fal_server ;
alter system set fal_server ='PARIS' scope=both;

fal_client n'est plus nécessaire dans Oracle 19c.

Définir la gestion des fichiers en attente

show parameter standby_file_management
alter system set standby_file_management='AUTO' scope=both;

Obtenir une liste de paramètres dépendant des répertoires et créer les répertoires nécessaires dans le serveur en attente :

select name, value from v$parameter 
where upper(value) like upper('%/bcn/%');

Vous créerez le répertoire adump plus tard.

Activer le flashback

alter database flashback on;

Vérifier le fichier des mots de passe.

ls /u01/app/oracle/product/19.0.0/db_1/dbs/orapw*

Ajouter à tnsnames.ora

vi $TNS_ADMIN/tnsnames.ora

BCN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = srv1.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = BCN.localdomain)
    )
  )

LISTENER_BCN =
  (ADDRESS = (PROTOCOL = TCP)(HOST = srv1.localdomain)(PORT = 1521))

PARIS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = srv2.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PARIS.localdomain)
    )
  )

Sur le serveur primaire, ajoutez un enregistrement d'auditeur statique

vi $TNS_ADMIN/listener.ora
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srv1.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
SID_LIST_LISTENER=
   (SID_LIST=
        (SID_DESC=
          (GLOBAL_DBNAME=BCN.localdomain)
          (SID_NAME=BCN)
          (ORACLE_HOME=/u01/app/oracle/product/19.0.0/db_1)
        )
      )

Recharger l'auditeur

lsnrctl reload

2. Préparer la base de données en attente

Créer un fichier d'initialisation avec seulement le nom de la base de données.

N'oubliez pas que le nom de la base de données sera le même dans la base de données primaire et dans la base de données de secours.

Seul le nom unique de la base de données sera différent.

echo 'DB_NAME=BCN' > $ORACLE_HOME/dbs/initPARIS.ora

Copiez le fichier de mots de passe du serveur primaire vers le serveur en attente.

scp oracle@srv1:/u01/app/oracle/product/19.0.0/db_1/dbs/orapwBCN /u01/app/oracle/product/19.0.0/db_1/dbs/orapwPARIS

ls -al /u01/app/oracle/product/19.0.0/db_1/dbs/orapwPARIS

Copier le fichier tnsnames.ora

scp oracle@srv1:/u01/app/oracle/product/19.0.0/db_1/network/admin/tnsnames.ora /u01/app/oracle/product/19.0.0/db_1/network/admin/tnsnames.ora

Sur le serveur en attente, ajoutez un enregistrement d'auditeur statique qui sera nécessaire pour dupliquer une base de données.

vi $TNS_ADMIN/listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = srv2.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
   (SID_LIST=
        (SID_DESC=
          (GLOBAL_DBNAME=PARIS.localdomain)
          (SID_NAME=PARIS)
          (ORACLE_HOME=/u01/app/oracle/product/19.0.0/db_1)
        )
      )

Recharger l'auditeur

lsnrctl reload

Créer le dossier adump

mkdir -p /u01/app/oracle/admin/PARIS/adump

Démarrer le BD en veille en mode nomade

sqlplus / as sysdba
startup nomount
exit

3. Dupliquer la base de données

Se connecter à RMAN

Vous devez vous connecter à la base de données principale et à la base de données secondaire en même temps.

rman TARGET sys/oracle@BCN AUXILIARY sys/oracle@PARIS

Dupliquer la base de données

DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER
SPFILE
SET DB_UNIQUE_NAME 'PARIS' COMMENT 'Is standby'
SET LOG_ARCHIVE_DEST_2 'SERVICE=BCN ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=BCN'
SET AUDIT_FILE_DEST '/u01/app/oracle/admin/PARIS/adump'
SET CONTROL_FILES '/u01/app/oracle/oradata/PARIS/controlfile/control01.ctl'
SET FAL_SERVER 'BCN'
NOFILENAMECHECK;

Une fois la commande de duplication effectuée, vous avez déjà créé votre base de données de secours.

Connectez-vous maintenant à la base de données en attente et vérifiez son rôle.

sqlplus / as sysdba
select database_role from v$database;
show parameter db_name
show parameter db_unique_name

Le nom db_name doit être le même que celui de la base de données primaire et le nom db_unique_name doit être PARIS.

Lancez maintenant le processus d'application des données de référence sur la base de données en attente.

alter database recover managed standby database 
disconnect from session;

Vérifier sur la base de données en attente qu'elle applique les archiveurs avec ceci.

select role, thread#, sequence#, action 
from v$dataguard_process;

Maintenant, allez sur le primaire et vérifiez les archiveurs aussi et faites un switch logfile pour générer un nouvel archiveur.

select sequence#, first_time, next_time 
from v$archived_log
order by sequence#;

alter system switch logfile;

Allez maintenant dans la base de données en attente et vérifiez que le nouvel archiveur a été appliqué.

select sequence#, first_time, next_time, applied 
from v$archived_log
order by sequence#;

Arrêter le processus de récupération sur l'ordinateur en attente

alter database recover managed standby database cancel;

Activer le flashback en mode veille

alter database flashback on;

Recommencez le processus de récupération sur l'ordinateur en veille

alter database recover managed standby database 
disconnect from session;

4. Effectuer un basculement avec sqlplus

La première confirme que la synchronisation est prête à effectuer un basculement.

sqlplus / as sysdba
alter database switchover to PARIS verify;

Si vous n'obtenez aucune erreur dans la commande précédente, tout va bien.

Si vous obtenez des erreurs, consultez le fichier d'alerte pour plus de détails.

Sur la base de données primaire, vérifiez qu'il n'y a pas de lacunes.

select status, gap_status 
from v$archive_dest_status 
where dest_id = 2;

Basculement vers la base de données de secours

Exécuter à partir de la base de données primaire :

alter database switchover to PARIS;

Allez maintenant à srv2 (qui est maintenant la base de données primaire) et ouvrez la base de données

sqlplus / as sysdba
alter database open;

Allez maintenant sur srv1 (la nouvelle base de données en attente) et montez la base de données

startup mount
alter database recover managed standby database disconnect;

Sur srv1, vérifiez que tout va bien

select database_role from v$database;

select role, thread#, sequence#, action from v$dataguard_process;

Maintenant, ramenons tout au point de départ.

Vous effectuerez un virage en épingle à cheveux.

Vérifiez d'abord que les deux bases de données sont prêtes.

alter database switchover to BCN verify;

Allez maintenant dans srv2 et exécutez à nouveau le basculement.

alter database switchover to BCN;

Et ouvrir la base de données sur srv1

alter database open;

Sur srv2, montez la base de données et relancez le processus de récupération.

startup mount
alter database recover managed standby database disconnect;

Sur srv2, vérifier que le switchback s'est déroulé correctement

select database_role from v$database;

5. Dépannage

Si vous rencontrez des problèmes, vérifiez les paramètres de la base de données primaire et de la base de données de secours à l'aide de cette requête.

set linesize 200 pages 50
col value for a85
col name for a50

select name, value 
from gv$parameter
where name in ('db_name','db_unique_name','log_archive_config',    
'log_archive_dest_1','log_archive_dest_2','log_archive_dest_3',
'log_archive_dest_state_1','log_archive_dest_state_2','log_archive_dest_state_3', 
'remote_login_passwordfile','log_archive_format','log_archive_max_processes',
'fal_server','fal_client','db_file_name_convert',
'log_file_name_convert', 'standby_file_management') 
order by 1;

Une réponse sur “Oracle 19c Data Guard Configuration Step by Step”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *