En algun momento me afronte a esta alerta, la cual fue bastante compleja, debido a que estaba sucediendo muy frecuentemente, sin embargo, esto me ayudo a identificar diferentes puntos de solucion para la misma.
Problema RFS[X]: Possible network disconnect with primary database
La alerta «RFS[X]: Possible network disconnect with primary database» aparecía desde el alert log de la base de datos standby.
Los detalles de la alerta, salían de la siguiente manera:
RFS[75]: Assigned to RFS process (PID:27001196)
RFS[75]: Selected log 20 for T-2.S-1149339 dbid 161980802 branch 1011916927
CORRUPTION DETECTED: In redo blocks starting at block 31961count 2048 for T-2.S-1149339
Fri Aug 05 22:20:46 2022
RFS[75]: Possible network disconnect with primary database
Estos errores indican que la red/firewall se cuelga o agota el tiempo de espera, lo que hace que el proceso ARCx se bloquee en la red sobre la primaria. Tenga en cuenta que estos errores/advertencias no indican ningún problema permanente en la red/firewall (bajo mi experiencia con la alerta). Esto indica problemas como lentitud o bloqueos sobre estos.
Solucion RFS[X]: Possible network disconnect with primary database
Como comentaba con anterioridad, encontré varias formas de solucion, en las cuales identifique que se debían ir ejecutando una tras otra, si la anterior no resolvía el problema.
Primer intento
Les dejo aquí los diferentes comandos para bajar y subir el MRP
-- Bajar
alter database recover managed standby database cancel;
-- Subir por archive
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
--Subir por redos
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Segundo intento
Este segundo intento, es un poco mas agresivo que el anterior y por lo general fue el que mas me funcionaba para no tener que pasar hasta los siguientes pasos
Lo que debemos realizar es bajar el MRP
alter database recover managed standby database cancel;
Posterior, vamos a realizar una limpieza de los redos standby
begin
for log_cur in ( select group# group_no from v$standby_log )
loop
execute immediate 'alter database clear logfile group '||log_cur.group_no;
end loop;
end;
/
Tras realizar la limpieza de redos, subimos nuevamente el MRP
-- Subir por archive
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
--Subir por redos
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Tercer intento
Aquí ya se complica un poco la cosa, pues para lograr continuar debemos solicitar un reinicio de la base de datos standby, veremos los pasos a continuación.
Como apoyo de lo que continua, se encuentra la siguiente nota de Oracle, la cual contiene algunos pasos adicionales, que bajo mi experiencia no me fueron necesarios, sin embargo te la dejo para que la puedas detallar con mayor facilidad (Doc ID 1130523.1)
Vamos a detener el envío de los datos a la base de datos standby, esto se ejecuta desde la primaria, teniendo en cuenta que depende de donde este configurado tu log_archive_dest_state, en este caso sera 2
alter system set log_archive_dest_state_2=DEFER scope=both sid='*';
Detenemos el MRP
alter database recover managed standby database cancel;
Aquí es donde viene el problema si no es fácil solicitar un reinicio, puesto que para continuar debemos solicitar un reinicio de la base de datos
Posterior, subiremos el MRP
-- Subir por archive
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
--Subir por redos
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Finalmente, volvemos a habilitar el parametro log_archive_dest_state
alter system set log_archive_dest_state_2=ENABLE scope=both sid='*';
Ultimo intento
Ya como ultimo intento, lo que debemos realizar es un backup incrementar de la base de datos productiva y restaurarlo sobre la standby.
Para esto, les dejare unas notas de Oracle, con las cuales se pueden realizar la restauracion de manera exitosa.
Para bases de datos 11g
Para bases de datos 12c
How to Roll Forward a Standby Database Using Recover Database From Service (Doc ID 2850185.1)
Para bases de datos 18c o superior
Roll Forward Physical Standby Using RMAN Incremental Backup in Single Command (Doc ID 2431311.1)
Básicamente se adjunta para diferentes versiones, pues por cada versión se realizaba mejoras para facilitar un restore incremental, con lo que es muy útil tenerlos a la mano.