Hello Readers, You are here because you faced ORA-00257: Archiver error. Connect AS SYSDBA only until resolved error ? Lets come to point ->
ORA-00257: Archiver error. Connect AS SYSDBA only until resolved error means archiver process is stuck because of various reasons due to which redo logs are not available for further transaction as database is in archive log mode and all redo logs requires archiving. And your database is in temporary still state.
Environment Details –
OS Version – Linux 7.8
DB Version – 19.8 (19)
Type – Test environment
SQL> select name,open_mode,database_role,log_mode from v$database;
NAME OPEN_MODE DATABASE_ROLE LOG_MODE
-------------------- -------------------- ---------------- ----------
ORACLEDB READ WRITE PRIMARY ARCHIVELOG
SQL>
SQL> select GROUP#,SEQUENCE#,BYTES,MEMBERS,ARCHIVE,STATUS from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARC STATUS
------ --------- --------- ------- --- --------
1 25 209715200 2 NO CURRENT
2 23 209715200 2 NO INACTIVE
3 24 209715200 2 NO INACTIVE
SQL>
Table of Contents
What Cause ORA-00257: Archiver error. Connect AS SYSDBA only until resolved Error –
There are various reason which cause this error-
- One of the common issue here is archive destination of your database is 100% full.
- The mount point/disk group assigned to archive destination or FRA is dismounted due to OS issue/Storage issue.
- If db_recovery_file_dest_size is set to small value.
- Human Error – Sometimes location doesn’t have permission or we set to location which doesn’t exists.
What Happens when ORA-00257: Archiver error. Connect AS SYSDBA only until resolved Error occurs
Lets us understand what end user see and understand there pain as well. So when a normal user try to connect to the database which is already in archiver error (ORA-00257: Archiver error. Connect AS SYSDBA only until resolved ) state then they directory receive the error –
ORA-00257: Archiver error. Connect AS SYSDBA only until resolved on the screen.
SQL> conn dbsnmp/oracledbworld
ERROR:
ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.
Warning: You are no longer connected to ORACLE.
SQL>
You might be wondering what happens to the user which is already connected to the oracle database. In this case if they trying to do a DML, it will stuck and will not come out. For example here I am just trying to insert 30k record here again which is stuck and didn’t came out.
SQL> conn system/oracledbworld
connected.
SQL> create table oracledbworld2 as select * from oracledbworld;
Table created.
SQL> insert into oracledbworld select * from oracledbworld2;
29965 rows created.
SQL> /
How to Check archive log location
Either you can fire archive log list or check your log_archive_dest_n to see what location is assigned
SQL> select name,open_mode,database_role,log_mode,force_logging from v$database;
NAME OPEN_MODE DATABASE_ROLE LOG_MODE FORCE_LOGGING
--------- ------------ ---------------- ------------ ----------------
ORACLEDB READ WRITE PRIMARY ARCHIVELOG YES
SQL>
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 18
Next log sequence to archive 20
Current log sequence 20
SQL>
When you see USE_DB_RECOVERY_FILE_DEST, that means you have enabled FRA location for your archive destination. So here you have to check for db_recover_file_dest to get the diskgroup name / location where Oracle is dumping the archive log files.
SQL> show parameter db_recover_file_dest
What are Different Ways to Understand if there is ORA-00257: Archiver error. Connect AS SYSDBA only until resolved Error
There are different ways to understand what is there issue. Usually end user doesn’t understand the ORA- code and they will rush to you with a Problem statement as -> DB is running slow or I am not able to login to the database.
Check the Alert Log First –
Always check alert log of the database to understand what is the problem here –
I have set the log_archive_dest_1 to a location which doesn’t exists to reproduce ORA-00257: Archiver error. Connect AS SYSDBA only until resolved Error. So alert log clearly suggest that
ORA-19504: failed to create file %s
ORA-27040: file create error, unable to create file
Linux-x86-64 Error: 13: Permission denied.
In middle of the alert – “ORACLE Instance oracledb, archival error, archiver continuing”
At 4th Last line you might seen the error – “All online logs need archiving”
Check Space availability –
Once you rule out that there is no human error, and the archive log location exists Now you should check if mount point/ disk group has enough free space available, if it is available for writing and you can access it.
If your database is on ASM, then you can use following query – Check for free_mb/usable file mb and state column against your diskgroup name.
SQL> select name,state,free_mb,usable_file_mb,total_mb from v$asm_diskgroup;
If your database is on filesystem, then you can use following OS command –
For linux, sun solaris -
$df -kh
For AIX -
$df -gt
If case you have FRA been used for archive destination then we have additional query to identify space available and how much is allocated to it.
SQL> select name, space_limit as Total_size ,space_used as Used,SPACE_RECLAIMABLE as reclaimable ,NUMBER_OF_FILES as "number" from V$RECOVERY_FILE_DEST;
NAME TOTAL_SIZE USED RECLAIMABLE number
---------------------------------- ---------- ---------- ----------- ----------
/u01/app/oracle/fast_recovery_area 10485760 872185344 68794880 25
SQL> Select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable,number_of_files as "number" from v$recovery_area_usage;
FILE_TYPE USED RECLAIMABLE number
----------------------- ---------- ----------- ----------
CONTROL FILE 100.94 0 1
REDO LOG 6000 0 3
ARCHIVED LOG 1900.78 452.02 18
BACKUP PIECE 306.09 204.06 3
IMAGE COPY 0 0 0
FLASHBACK LOG 0 0 0
FOREIGN ARCHIVED LOG 0 0 0
AUXILIARY DATAFILE COPY 0 0 0
8 rows selected.
You can look at sessions and event to understand what is happening in the database.
If you see there are 3 sessions, SID 237 is my session Rest two sessions are application session and when we look at the event of those two application session it clearly suggest session is waiting for log file switch (archiving needed).
select sid,serial#,event,sql_id from v$session where username is not null and status='ACTIVE';
SID SERIAL# EVENT SQL_ID
--- ---------- ---------------------------------------- -------------
237 59305 SQL*Net message from client 7wcvjx08mf9r6
271 46870 log file switch (archiving needed) 7zq6pjtwy552p
276 18737 log file switch (archiving needed) a5fasv0jz2mx2
How to Resolve ORA-00257: Archiver error. Connect AS SYSDBA only until resolved error
It’s always better to know the environment before firing any command. Archive deletion can be destructive for DR setup or Goldengate Setup.
Solution 1
Check if you have DR database and it’s in sync based on that take a call of clearing the archive until sequence. You can use following command on RMAN prompt.
delete archivelog until sequence <sequence> thread <thread no>;
Solution 2
You can change destination to a location which has enough space.
SQL>archive log list
SQL>show parameter log_archive_dest_1
(or whichever you are using it, usually we use dest_1)
Say your diskgroup +ARCH is full and +DATA has lot of space then you can fire
SQL> alter system set log_archive_dest_1='location=+DATA reopen';
You might be wondering why reopen. So since your archive location was full. There are chances if you clear the space on OS level and archiver process still remain stuck. Hence we gave reopen option here.
Solution 3
Other reason could be your db_recovery_file_dest_size is set to lower size. Sometimes we have FRA enabled for archivelog. And we have enough space available on the diskgroup/ filesystem level.
archive log list;
show parameter db_recovery_file_dest_size
alter system set db_recovery_file_dest_size=<greater size then current value please make note of filesystem/diskgroup freespace as well>
example -
Initially it was 20G
alter system set db_recovery_file_dest_size=100G sid='*';
Reference – archive Document 2014425.1
Really helpful blog. Being a non-DBA able to understand the concept. thanks and keep writing.
was very helpful for an DBA novice.
Thanks
Good Article.
Well, I have faced this issue recently on Test Server.
What is did, I set the DB environment variable first and used the following command
Step 1
rman target /
delete archivelog all;
It displayed all archive logs with their destination along with prompt for deletion
Just Type Y and Press Enter.
Step 2
After that, I connected to db with sysdba login and type the below command
. /
sqlplus / as sysdba
alter system switch logfile;
Thats it
Wonderful document. This really helped to solve my issue.