\!DOCTYPE html>
Two errors typically surface when the archive log destination is full:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 52428800 bytes disk space from 107374182400 limitORA-00257: archiver error. Connect internal only, until freed.Other signs:
ARC0: Archival stopped, error occurred. Will continue retryingARCH: Archival stopped, error occurreddf -h shows archive destination filesystem at 100%-- FRA space usage breakdown
SELECT
space_limit/1073741824 AS fra_size_gb,
space_used/1073741824 AS used_gb,
space_reclaimable/1073741824 AS reclaimable_gb,
ROUND((space_used - space_reclaimable) / space_limit * 100, 1) AS pct_truly_used
FROM v$recovery_file_dest;
-- Breakdown by file type in FRA
SELECT
file_type,
number_of_files,
ROUND(space_used/1073741824, 2) AS used_gb,
ROUND(space_reclaimable/1073741824, 2) AS reclaimable_gb
FROM v$recovery_area_usage
ORDER BY space_used DESC;
-- Archive logs in FRA and their status
SELECT
name,
ROUND(blocks * block_size / 1048576, 1) AS size_mb,
archived,
status,
next_time
FROM v$archived_log
WHERE standby_dest = 'NO'
AND name IS NOT NULL
ORDER BY next_time DESC
FETCH FIRST 20 ROWS ONLY;
-- How many archive logs exist and their total size
SELECT
COUNT(*) AS num_arclogs,
ROUND(SUM(blocks * block_size)/1073741824, 2) AS total_gb,
MIN(next_time) AS oldest,
MAX(next_time) AS newest
FROM v$archived_log
WHERE standby_dest = 'NO'
AND name IS NOT NULL
AND status \!= 'D';
-- Check archive log destination parameters
SHOW PARAMETER log_archive_dest;
SHOW PARAMETER log_archive_dest_1;
-- Check OS-level filesystem space (run as oracle OS user)
-- df -h /u01/app/oracle/archivelog
v$archived_log where applied = 'NO' before proceeding.
-- Connect to RMAN as target
-- rman target /
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
-- Delete archive logs already backed up (safe)
DELETE NOPROMPT ARCHIVELOG ALL BACKED UP 1 TIMES TO DISK;
-- Delete archive logs older than 24 hours (adjust to your RPO)
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';
-- Delete archive logs older than 7 days
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
NOPROMPT flag skips the "are you sure?" confirmation. Remove it on your first run if you want to preview what will be deleted before committing.
-- Last resort: delete ALL archive logs (DB is down, no standby)
-- This will prevent point-in-time recovery to times covered by deleted logs
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE SYSDATE;
-- After deletion, release the FRA space Oracle tracks
CROSSCHECK BACKUP;
DELETE NOPROMPT EXPIRED BACKUP;
-- Run as OS oracle user โ check filesystem
-- df -h /u01/app/oracle/archivelog
-- List archive logs by size, oldest first
-- ls -lhrt /u01/app/oracle/archivelog/
-- NEVER manually delete archive log files from the OS
-- Always use RMAN crosscheck + delete so Oracle's catalog stays in sync
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-2';
Without a retention policy, RMAN keeps archive logs indefinitely. Set one now to prevent recurrence:
-- Connect to RMAN
-- Option A: Retain based on recovery window (recommended)
-- Keep enough to recover to any point in the last 7 days
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- Option B: Retain based on redundancy (number of backup copies)
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
-- Option C: Explicitly delete archived logs after successful backup
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;
-- Check current FRA location and size
SHOW PARAMETER db_recovery_file_dest;
SHOW PARAMETER db_recovery_file_dest_size;
-- Increase FRA size (online, no restart needed)
ALTER SYSTEM SET db_recovery_file_dest_size = 50G SCOPE=BOTH;
-- Move FRA to a larger filesystem
ALTER SYSTEM SET db_recovery_file_dest = '/u02/fast_recovery_area' SCOPE=BOTH;
A correctly sized FRA should hold:
Rule of thumb: FRA size = 3ร the size of your database if you run daily backups with a 7-day recovery window.
-- Calculate minimum recommended FRA size
SELECT
ROUND(SUM(bytes)/1073741824, 1) AS db_size_gb,
ROUND(SUM(bytes)/1073741824 * 3, 1) AS recommended_fra_gb
FROM dba_data_files;
-- Force a log switch to test archiving is working
ALTER SYSTEM SWITCH LOGFILE;
-- Wait 10 seconds, then verify the log was archived
SELECT sequence#, archived, status
FROM v$log
ORDER BY sequence# DESC;
-- Check archiver process status
SELECT status, log_sequence, process
FROM v$archive_processes
WHERE status \!= 'IDLE'
ORDER BY log_sequence DESC;
-- Confirm no more ORA-00257 in alert log
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%ORA-00257%'
OR message_text LIKE '%Archival stopped%'
ORDER BY originating_timestamp DESC
FETCH FIRST 10 ROWS ONLY;
Archive log destination full is entirely preventable with the right monitoring. The typical failure sequence is:
DELETE INPUT optionv$archived_log where applied = 'NO'TuneVault monitors FRA utilisation and archive log destination space across all your Oracle instances, with threshold alerts at 70% and 85%.
Run a Free Health Check โ