Thursday, March 28, 2019

ORA-00314: log 42 of thread 2, expected sequence# 37363 doesn’t match 37361 and ORA-01624: log 1 needed for crash recovery of thread 1

ORA-00314: log 42 of thread 2, expected sequence# 37363 doesn’t match 37361
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ORA-01624: log 1 needed for crash recovery of thread 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

recover database until  cancel give above error
and clear log file gives below error

ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: '//'
ORA-00312: online log 1 thread 1: '//'

To implement the solution, please execute the following steps:

1) Switch the logfile on primary so that group can become non-current.

connect / as sysdba
alter system switch logfile;



2) Copy from primary to standby.
If you are  working with Group 1 on the primary then copy both  files for group 1 from the primary to the standby machine into an alternate location at operating system level.


3) Move current group one files on the standby to a different location


4) Rename the logfile- Move the copied  redo logs into the group 1 current location

ALTER DATABASE RENAME FILE
'/FULL_PATH_OF_OLD_LOCATION/AND_REDO_LOG_NAME.LOG'
TO
'/FULL_PATH_OF_NEW_LOCATION/AND_REDO_LOG_NAME.LOG';



5) Clear the logfile :

alter database clear logfile group;


6)alter database drop standby logfile group1 .



Clear standby redo with ora-314 error.

Stop recovery on standby side.

SQL> Alter database recover managed standby database cancel;

clear standby redo group 404. -



SQL>  alter database clear logfile group 404


You may have to use the 'unarchived'-Keyword to be able to clear the Standby RedoLog Group in most Cases, eg.

SQL> alter database clear unarchived logfile group 404;



another good solution is to copy the requested archive log into restored database, and recover database

1. copy the next 2-3 archives to target database same location or  different location(if it is different location, register the archive location through RMAN using below command )
CATALOG START WITH 'location path';


2.alter database recover database until cancel;
enter auto, when prompted

3.open database with resetlogs.

for better safety, shut immediate and startup the database.




ORA-00313: open failed for members of log group string of thread string tips

ORA-00313: open failed for members of log group string of thread string tips

ORA-00313 ,ORA-00312 open failed for members of log group

At this article I shall present how to resolve open failed for members of log groups. 
So last night i have seen many errors about those groups. 
I wanted to recreate my redo log groups however as my research there was an other solution. 


The Oracle docs note this on the ora-00313 error:
ORA-00313: open failed for members of log group string of thread string

Cause: The online log cannot be opened. May not be able to find file.

Action: See accompanying errors and make log available.


1.solution

 1-Check status of log file group

SQL> select group#,thread#,status from v$log ;

GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 ACTIVE
3 1 CURRENT


2- Clear logfile.
SQL> alter  database clear unarchived logfile group 1;
Database altered.


3-check again groups.

SQL> select group#,thread#,status from v$log ;
GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 UNUSED
2 1 ACTIVE
3 1 CURRENT


5-Switch log file to use

SQL>Alter system switch logfile;


6-check again groups.

SQL> select group#,thread#,status from v$log ;
GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 1 INACTIVE
3 1 ACTIVE

So, that's it. if you have problem with an other log try for others to. 
İf so you have problem again try 2 solution.



2.Solution

1-CLOSE DATABASE.

SQL>shu immediate;
Database closed.

2-Check the status of the logile 
select
 b.group#, a.archived, a.status, b.status, b.member
from
 v$log a, v$logfile b
where a.group#=b.group#
order by 1,2;

    GROUP# ARC STATUS           STATUS  MEMBER
---------- --- ---------------- ------- ----------------------------
         1 YES   INACTIVE            /u01/app/oracle/oradata/redo01.log
         2 YES   ACTIVE               /u01/app/oracle/oradata/redo02.log
         3 NO    CURRENT            /u01/app/oracle/oradata/redo03.log

 If the status is CURRENT don't try do drop.


3. Drop log group
SQL>ALTER DATABASE DROP LOGFILE GROUP 1;


4-Add new Redo Log by :

SQL>ALTER DATABASE ADD LOGFILE GROUP 1 ' /u01/app/oracle/oradata/redo01.log' SIZE 50M;


4-Recover DB and Open

SQL>RECOVER DATABASE UNTIL CANCEL;
SQL>ALTER DATABASE OPEN RESETLOGS;