Shell Script to Delete Archive Log Older than one hour

#!/bin/bash

# ==========================================================
# RMAN Archive Log Cleaner Script
# Deletes archive logs older than 1 hour and crosschecks
# Usage: ./clean_archivelogs.sh <catalog_tns> <target_tns>
# ==========================================================

# ----------- Configuration (set your credentials here) -----------
CATALOG_USER="rman_user"
CATALOG_PASS="CatalogPassword"

TARGET_USER="sys"
TARGET_PASS="SysDBPassword"

# ----------------------------------------------------------------
if [ $# -ne 2 ]; then
  echo "Usage: $0 <catalog_tns_alias> <target_tns_alias_or_SID>" >&2
  exit 1
fi

CATALOG_TNS=$1
TARGET_TNS=$2

LOGFILE="/tmp/clean_archivelogs_${TARGET_TNS}_$(date +%Y%m%d_%H%M%S).log"
echo "Starting RMAN cleanup for target DB: $TARGET_TNS using catalog: $CATALOG_TNS"
echo "Logging to: $LOGFILE"

# ----------- Execute RMAN Commands -----------
rman <<EOF >> "$LOGFILE" 2>&1
CONNECT TARGET ${TARGET_USER}/${TARGET_PASS}@${TARGET_TNS} AS SYSDBA
CONNECT CATALOG ${CATALOG_USER}/${CATALOG_PASS}@${CATALOG_TNS}

# Crosscheck existing archive logs
CROSSCHECK ARCHIVELOG ALL;

# Delete archive logs older than 1 hour
DELETE NOPROMPT ARCHIVELOG UNTIL TIME "SYSDATE - (1/24)";

# Refresh status after deletion
CROSSCHECK ARCHIVELOG ALL;

# Optionally delete expired records
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

EXIT;
EOF

echo "RMAN cleanup complete for $TARGET_TNS. See log: $LOGFILE"


Execution Example


./clean_archivelogs.sh rcat_db orcl

This will connect:

  • Catalog as: rman_user/CatalogPassword@rcat_db

  • Target as: sys/SysDBPassword@orcl AS SYSDBA







Please do like and subscribe to my youtube channel: https://www.youtube.com/@foalabs If you like this post please follow,share and comment