Configuración Paso a Paso de Oracle 19c Logical Standby

Para crear un standby lógico de Oracle, es necesario disponer primero de un data guard físico.

Asegúrese de leer este post primero y luego volver.

Un standby lógico contiene la misma información lógica que la base de datos de producción, aunque la organización física y la estructura de los datos pueden ser diferentes.

La base de datos lógica en espera se mantiene sincronizada con la base de datos primaria a través de SQL Apply, que transforma los datos del redo recibidos de la base de datos primaria en sentencias SQL y, a continuación, ejecuta las sentencias SQL en la base de datos en espera.

1. Compruebe ambas bases de datos

Primero comprueba que todas las mesas están en orden.

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

Asegúrese de que no hay ningún hueco entre la base de datos primaria y la base de datos en espera.

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;

Detenga el proceso de aplicación en la base de datos en espera.

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

2. Preparar la base de datos primaria

Crea esta carpeta.

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

Modifique estos parámetros en la base de datos primaria

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;

Ahora ejecute esto en la base de datos primaria para construir un diccionario en los datos rehechos

EXECUTE DBMS_LOGSTDBY.BUILD;

3. Preparar la base de datos lógica

Convertir la base de datos en espera en una base de datos lógica

ALTER DATABASE RECOVER TO LOGICAL STANDBY PARIS;

Cree esta carpeta en el servidor en espera

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

Ahora detenga la base de datos en espera e iníciela en modo de montaje

shutdown immediate
startup mount

Modifique estos parámetros en la base de datos en espera

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;

Abra la base de datos en espera con resetlogs.

ALTER DATABASE OPEN RESETLOGS;

Inicie el proceso de aplicación en la base de datos en espera.

ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

Ahora tiene una base de datos lógica en espera que funciona.

4. Pruebas

Si desea probar su nueva base de datos en espera lógica, puede crear un nuevo usuario y una nueva tabla en la base de datos primaria y, a continuación, insertar algunas filas y la tabla y las nuevas filas deberían replicarse en la base de datos en espera lógica.

4.1 En el primario

Tengo un PDB llamado pdb1, así que trabajaré con ese 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 espera

SQL> alter session set container=pdb1;

Session altered.

SQL> select * from fernando.table1;

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *