Automating Archive Log Cleanup in DR – Oracle Standby Sync Script
In a DR (Disaster Recovery) Oracle environment, archive logs continuously flow from the primary to the standby database. Over time, these logs can accumulate and consume large amounts of disk space.
To manage this efficiently, I’ve implemented an automated shell script that monitors synchronization between Primary and Standby and removes archive logs older than 2 days — but only when both databases are fully in sync.
Script:
#!/bin/bash
. /home/oracle/.bash_profile
DIFF=$(sqlplus -s / as sysdba <<EOF
SET HEADING OFF FEEDBACK OFF VERIFY OFF ECHO OFF
SELECT (ARCH.SEQUENCE# - APPL.SEQUENCE#)
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#;
EXIT;
EOF
)
if [ "$DIFF" -eq 0 ]; then
echo "Standby in sync — deleting archive logs older than 2 days..."
rman target / <<EOF
crosscheck archivelog all;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-2';
EXIT;
EOF
else
echo " Archive gap exists — skipping deletion."
fi
Scheduled in Cron in DR server to run every hour
0 * * * * /u01/scripts/delete_arch_if_synced.sh > /u01/scripts/logs/delete_arch.log 2>&1

Post a Comment
Post a Comment