Oracle 19c Logical Standby Configuration Step by Step (configuration de l'attente logique)

Pour créer un standby logique Oracle, vous devez d'abord disposer d'un data guard physique.

Veillez à lire cet article d'abord, puis de revenir.

Une base de données de secours logique contient les mêmes informations logiques que la base de données de production, bien que l'organisation physique et la structure des données puissent être différentes.

La base de données logique de secours est synchronisée avec la base de données primaire par l'intermédiaire de SQL Apply, qui transforme les données de la base de données primaire en instructions SQL, puis exécute les instructions SQL sur la base de données de secours.

1. Vérifier les deux bases de données

Vérifiez d'abord que toutes les tables sont prêtes à fonctionner.

SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE WHERE (OWNER, TABLE_NAME) 
NOT IN (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED) AND BAD_COLUMN = 'Y';

Assurez-vous qu'il n'y a pas d'écart entre la base de données primaire et la base de données en attente.

SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied"
FROM (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH, 
(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL 
WHERE ARCH.THREAD# = APPL.THREAD# 
ORDER BY 1;

Arrêtez le processus d'application sur la base de données en attente.

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

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

Créez ce dossier.

mkdir -p /u01/app/oracle/arch/standby

Modifier ces paramètres sur la base de données primaire

show parameter LOG_ARCHIVE_DEST_1
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=BCN' scope=both;

show parameter LOG_ARCHIVE_DEST_3
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/u01/app/oracle/arch/standby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=BCN' scope=both;

Exécutez maintenant cette opération sur la base de données primaire pour créer un dictionnaire dans les données de rétablissement.

EXECUTE DBMS_LOGSTDBY.BUILD;

3. Préparer la base de données logique

Convertir la base de données de secours en base de données logique

ALTER DATABASE RECOVER TO LOGICAL STANDBY PARIS;

Créer ce dossier sur le serveur en attente

mkdir -p /u01/app/oracle/arch/standby

Arrêtez maintenant la base de données en attente et démarrez-la en mode montage.

shutdown immediate
startup mount

Modifier ces paramètres sur la base de données en attente

show parameter LOG_ARCHIVE_DEST_1
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PARIS' scope=both;

show parameter LOG_ARCHIVE_DEST_2
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=BCN ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=BCN' SCOPE=BOTH ;

show parameter LOG_ARCHIVE_DEST_3
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/u01/app/oracle/arch/standby VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=PARIS' scope=both;

Ouvrez la base de données en attente avec resetlogs.

ALTER DATABASE OPEN RESETLOGS;

Lancez le processus d'application sur la base de données en attente.

ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

Vous disposez à présent d'une base de données de secours logique opérationnelle.

4. Essais

Si vous souhaitez tester votre nouveau standby logique, vous pouvez créer un nouvel utilisateur et une nouvelle table dans la base de données primaire, puis insérer quelques lignes et la table et les nouvelles lignes devraient être répliquées dans le standby logique.

4.1 Sur le primaire

Je dispose d'un PDB appelé pdb1, je vais donc travailler avec ce PDB.

SQL> alter session set container=pdb1;

Session altered.

SQL> create user fernando identified by fernando123;

User created.

SQL> grant dba to fernando;

Grant succeeded.

SQL> create table fernando.table1 (col1 number);

Table created.

SQL> insert into fernando.table1 values (1);

1 row created.

SQL> insert into fernando.table1 values (2);

1 row created.

SQL> commit;

Commit complete.

4.2 En veille

SQL> alter session set container=pdb1;

Session altered.

SQL> select * from fernando.table1;

      COL1
----------
         2
         1

Laisser un commentaire

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