RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process

David SanzDavid Sanz
2 min read

A la hora de revisar porque RMAN no era capaz de eliminar los archive logs dándonos el siguiente error:

RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process
archived log file name=+RECO/XXXXXX/ARCHIVELOG/2024_07_26/thread_2_seq_31382.5872.1175352221 thread=2 sequence=31382
RMAN-08137: warning: archived log not deleted, needed for standby or upstream capture process
archived log file name=+RECO/XXXXXX/ARCHIVELOG/2024_07_26/thread_2_seq_31383.3853.1175352377 thread=2 sequence=31383

Este error es causado porque en una migración no eliminaron de manera correcta los procesados integrados del extract de un ogg.

SQL> r
  1  Select Capture_Name,
  2         Capture_Type,
  3         Status,
  4         To_Char(Required_Checkpoint_Scn, '999999999999999') As Req_Scn,
  5         To_Char(Oldest_Scn, '999999999999999') As Oldest_Scn
  6*   From Dba_Capture

CAPTURE_NAME       CAPTURE_TY STATUS   REQ_SCN          OLDEST_SCN
------------------ ---------- -------- ---------------- ----------------
OGG$CAP_KA2          LOCAL      DISABLED                0                0
OGG$CAP_KA2          LOCAL      DISABLED              0                0

Para eliminarlo, deberíamos entrar en el ogg y ejecutar la siguiente sentencia para cada proceso que se ha quedado obsoleto UNREGISTER EXTRACT #CAPTURE_NAME# DATABASE.

Una vez lanzada la sentencia anterior, si consultamos de nuevo la consulta debería devolvernos cero filas en caso que lo hayamos realizado bien

SQL> r
  1  Select Capture_Name,
  2         Capture_Type,
  3         Status,
  4         To_Char(Required_Checkpoint_Scn, '999999999999999') As Req_Scn,
  5         To_Char(Oldest_Scn, '999999999999999') As Oldest_Scn
  6*   From Dba_Capture

no rows selected

Ejecutamos nuestro pequeño scripts para comprobar que podemos ya eliminar esos archive logs obsoletos

[oracle@_scripts]$ cat rman.sh
#!/bin/bash
. /home/oracle/.bashrc
LOG=$(hostname -s)_`date +%Y%m%d%H%M%S`
touch  ${P_RAIZ}/log/${LOG}.log

rman target / log=${P_RAIZ}/log/${LOG}.log << EOF
run
{
 DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';
}
EOF
[oracle@_scripts]$ . rman.sh
[oracle@_scripts]$

Listo. ¡Espero que os sirva!

0
Subscribe to my newsletter

Read articles from David Sanz directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

David Sanz
David Sanz

Soy desarrollador, Analista, DBA Oracle y Arquitecto OCI, certificado en OCI Migration and Integration Certified Professional y Certified Architect Associate con más de 15 años de experiencia en plataformas Oracle además de especialista en temas de rendimiento.