While trying to connect to the database, we get
the below mentioned error:
ERROR:
ORA-00257:
archiver error. Connect internal only, until freed.
Cause:
- The
error is caused by the fact that the database archiver process is unable to
archive the current online redolog due to lack of space in the destination for
the archivelogs.
- The flash_recovery_area
is full.
Applicable to 9i, 10g
and 11g database versions.
Solution:
The basic idea is to
free space so as to make room for new archiving to happen. This can be
addressed in multiple ways.
-
Allow more space in the DB_RECOVERY_FILE_DEST with
the DB_RECOVERY_FILE_DEST_SIZE parameter :
alter system set
db_recovery_file_dest_size=5G ;
-
Imagine a
situation where the space increased in step 1 gets filled, ie, 5 GB. Set an
alternative archiving destination, so that when the primary destination is
full, archiving is automatically performed to the alternate destination:
Following changes
in parameter file can enable the same:
log_archive_dest_1='LOCATION=use_db_recovery_file_dest
NOREOPEN ALTERNATE=LOG_ARCHIVE_DEST_2'
log_archive_dest_2='LOCATION=/other_dest_for_archiving'
log_archive_dest_state_1='enable'
log_archive_dest_state_2='alternate'
db_recovery_file_dest='/db01/mine/oracle/product/10.1.0/db_1/flash_recovery_area'
db_recovery_file_dest_size=5G
-
Check the
archive_log_dest and verify if the path mentioned exists and is
valid.
-
Take a
backup of the existing archive files (recommended) OR it can be deleted to make
more free archiving space.
This can be
done at the server level where files can be manually deleted. However incase of
ASM storage with rman, below mentioned way is recommended (which would perform
backup and then deleting):
Example :
rman target
sys/sys
RMAN> backup archive
log all ;
RMAN> delete
archive until time 'trunc(sysdate)';