Configuración de Oracle 19c Data Guard Paso a Paso

Si quieres configurar un Oracle 19c Data Guard entonces necesitas tener 2 servidores.

Un Data Guard físico es la configuración por defecto de Oracle Data Guard.

Proporciona una copia físicamente idéntica de la base de datos primaria, con estructuras de base de datos en disco que son idénticas a la base de datos primaria bloque por bloque. El esquema de la base de datos, incluidos los índices, es el mismo.

Una base de datos standby física se mantiene sincronizada con la base de datos primaria, a través de Redo Apply, que recupera los datos de archivelog recibidos de la base de datos primaria y aplica el archivelog a la base de datos física en espera.

En el servidor 1, deberías tener una base de datos ya creada y en el servidor 2, sólo necesitas los binarios sin base de datos creada.

Uso /etc/hosts para configurar la resolución de nombres.

Aquí está mi /etc/hosts en ambos servidores

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

En esta guía te mostraré cómo crear una base de datos standby entre Barcelona y París.

Es bastante fácil si sigues este paso a paso de configuración de data guard.

BCN es la base de datos primaria en el servidor srv1.

PARIS es la base de datos standby en el servidor srv2.

1. Preparar la base de datos primaria

Primero debes activar el archivelog en tu base de datos.

Activar archivelog

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;

Activar el force logging

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

Comprobar el tamaño de los redo logs

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

Crear los standby redo logs

Debes crear los standby logfiles del mismo tamaño que el resultado que tuviste en la consulta anterior, y también del mismo número.

Como tengo 3 redo logs y su tamaño es de 200m, entonces creo 3 standby logfiles de 200m cada uno.

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;

Comprobar los standby redo logs

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

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

Comprobar db_unique_name

show parameter db_unique_name

Configurar log_archive_config

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

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

Establecer fal_server

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

fal_client ya no es necesario en Oracle 19c.

Configurar el standby_file_management

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

Obten una lista de parámetros dependientes del directorio y crea los directorios necesarios en el servidor standby:

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

Crearás el directorio adump más adelante.

Activa el flashback

alter database flashback on;

Comprueba el password file.

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

Añade a 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)
    )
  )

En el servidor primario, añade una entrada estática para el listener

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

Recarga el listener

lsnrctl reload

2. Prepara la base de datos standby

Crea un archivo init con sólo el db_name.

Recuerda que db_name será el mismo tanto en la base de datos primaria como en la base standby.

Sólo el db_unique_name será diferente.

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

Copia el archivo de passwords del servidor primario al servidor standby.

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

Copia el archivo 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

En el servidor standby, añade una entrada estática en el listener que será necesaria para duplicar una base de datos

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

Recarga el listener

lsnrctl reload

Crea la carpeta adump

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

Inicia la BD standby en nomount

sqlplus / as sysdba
startup nomount
exit

3. Duplica la base de datos

Conéctate a RMAN

Debe conectarse a la base de datos primaria y a la base de datos en espera al mismo tiempo.

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

Duplica la base de datos

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;

Una vez realizado el comando de duplicar, ya habrás creado tu base de datos standby.

Ahora conéctate a la base de datos standby y verifica su rol.

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

El db_name debe ser el mismo que el de la base de datos primaria y el db_unique_name debe ser PARIS.

Ahora inicia el proceso de aplicación de redo en la base de datos standby.

alter database recover managed standby database 
disconnect from session;

Comprueba en la base de datos standby que esté aplicando los arhivelogs con esto.

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

Ahora ve al servidor primario y comprueba también los archivelogs y haz un switch logfile para generar un nuevo archivelog

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

alter system switch logfile;

Ahora ve a la base de datos standby y comprueba que se ha aplicado el nuevo archivelog.

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

Deten el proceso de recuperación en la standby

alter database recover managed standby database cancel;

Activa el flashback en la standby

alter database flashback on;

Vuelva a iniciar el proceso de recuperación en la standby

alter database recover managed standby database 
disconnect from session;

4. Realiza un switchover con sqlplus

Primero confirma que la sincronización está lista para realizar un switchover

sqlplus / as sysdba
alter database switchover to PARIS verify;

Si no aparece ningún error en el comando anterior, entonces todo está bien.

Si tienes errores, consulta el alert log para tener más detalles.

En la base de datos primaria, comprueba que no hay ningún gap

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

Switchover a la base de datos standby

Ejecutar desde la base de datos primaria:

alter database switchover to PARIS;

Ahora ve a srv2 (que es ahora la base de datos primaria) y abre la base de datos

sqlplus / as sysdba
alter database open;

Ahora ve a srv1 (la nueva base de datos standby) y monta la base de datos

startup mount
alter database recover managed standby database disconnect;

En srv1 verifica que todo está bien

select database_role from v$database;

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

Ahora volvamos todo al punto de partida.

Realizarás un switchback.

Comprueba primero que ambas bases de datos están listas.

alter database switchover to BCN verify;

Ahora ve a srv2 y ejecuta el switchover de nuevo.

alter database switchover to BCN;

Y abre la base de datos en srv1

alter database open;

En srv2 monta la base de datos e inicia de nuevo el proceso de recuperación

startup mount
alter database recover managed standby database disconnect;

En srv2 verifica que el switchback ha sido correcto

select database_role from v$database;

5. Solución de problemas

Si tienes problemas, comprueba los parámetros en la base de datos primaria y en la base de datos standby con esta consulta.

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;

Una respuesta a «Oracle 19c Data Guard Configuration Step by Step»

Deja una respuesta

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