Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching

Oracle Engineered System


当前位置: 首页 » 技术文章 » 案列分析

ORA-00338/ORA-00312

ORA-00338的错误提示,问题原因及如何解决


ORA-00338: log <Log_Number> of thread <thread_number> is more recent than control file

ORA-00312: online log <Log_Number> thread <thread_number>: 'redo.log'



oerr ora 338
00338, 00000, "log %s of thread %s is more recent than control file"
// *Cause:  The control file change sequence number in the log file is
//         greater than the number in the control file. This implies that
//         the wrong control file is being used. Note that repeatedly causing
//         this error can make it stop happening without correcting the real
//         problem. Every attempt to open the database will advance the
//         control file change sequence number until it is great enough.
// *Action: Use the current control file or do backup control file recovery to
//         make the control file current. Be sure to follow all restrictions
//         on doing a backup control file recovery.


alert日志部分内容
ORACLE_BASE from environment = C:\app
Mon Jun 27 13:29:51 2016
ALTER DATABASE   MOUNT
Successful mount of redo thread 1, with mount id 3585184207
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Mon Jun 27 13:31:19 2016
db_recovery_file_dest_size of 3852 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Mon Jun 27 13:31:55 2016
ALTER DATABASE RECOVER  database  
Media Recovery Start
 started logmerger process
Mon Jun 27 13:31:56 2016
Media Recovery failed with error 264
Recovery Slave PR00 previously exited with exception 283
ORA-283 signalled during: ALTER DATABASE RECOVER  database  ...
Mon Jun 27 13:32:10 2016
alter database open
Mon Jun 27 13:32:11 2016
Errors in file c:\app\diag\rdbms\trace\hyd_lgwr_7944.trc:
ORA-00338: log 3 of thread 1 is more recent than control file
ORA-00312: online log 3 thread 1: 'D:\APP\ORADATA\REDO03.LOG'
Errors in file c:\app\diag\rdbms\trace\hyd_lgwr_7944.trc:
ORA-00338: log 3 of thread 1 is more recent than control file
ORA-00312: online log 3 thread 1: 'D:\APP\ORADATA\REDO03.LOG'
Errors in file c:\app\diag\rdbms\trace\hyd_ora_6880.trc:
ORA-00338: log 1 of thread  is more recent than control file
ORA-00312: online log 3 thread 1: 'D:\APP\ORADATA\REDO03.LOG'
USER (ospid: 6880): terminating the instance due to error 338
Instance terminated by USER, pid = 6880

从日志中我们发现,数据库在mount后,在做恢复时意外终止退出。经过和客户沟通,得知由于昨天非正常关机,今天才出现这种情况,数据文件和控制文件都未动过。出现这种问题,正常的情况下我们可能需要通过备份的控制文件或重建控制文件再进行恢复,本例通过清除日志文件就正常打开数据库,比较特别,特记录于此。


经过查询发现并未异常,也可以得知REDO03.LOG为inactive状态,也说明恢复时不再需要这个文件。
SQL> startup mount
ORACLE instance started.
Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             343934376 bytes
Database Buffers          427819008 bytes
Redo Buffers                5259264 bytes
Database mounted.
SQL> col member for a60
SQL> select * from v$logfile;
    GROUP# STATUS         TYPE           MEMBER                                                       IS_REC
---------- -------------- -------------- ------------------------------------------------------------ ------
         3                ONLINE         D:\APP\ORADATA\REDO03.LOG                      NO
         2                ONLINE         D:\APP\ORADATA\REDO02.LOG                      NO
         1                ONLINE         D:\APP\ORADATA\REDO01.LOG                      NO
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIV STATUS        FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE#
---------- ---------- ---------- ---------- ---------- ---------- ------ ---------------- ------------- ------------ ------------
NEXT_TIME
------------
         1          1         67   52428800        512          1 NO     INACTIVE           2719251 23-JUN-16     2758086
23-JUN-16

         3          1         66   52428800        512          1 NO     INACTIVE           2687384 22-JUN-16     2719251
23-JUN-16

         2          1         68   52428800        512          1 NO     CURRENT            2758086 23-JUN-16      2.8147E+14

SQL> select status, checkpoint_change#,
  2         to_char(checkpoint_time, 'DD-MON-YYYY HH24:MI:SS') as checkpoint_time,
  3         count(*)
  4  from v$datafile_header
  5  group by status, checkpoint_change#, checkpoint_time
  6  order by status, checkpoint_change#, checkpoint_time;

STATUS         CHECKPOINT_CHANGE# CHECKPOINT_TIME                                              COUNT(*)
-------------- ------------------ ---------------------------------------------------------- ----------
ONLINE                    2784716 23-JUN-2016 17:30:41                                                5

SQL> alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS';

Session altered.

SQL> select LF.member, L.group#, L.thread#, L.sequence#, L.status,
  2         L.first_change#, L.first_time, DF.min_checkpoint_change#
  3  from v$log L, v$logfile LF,
  4       (select min(checkpoint_change#) min_checkpoint_change#
  5        from v$datafile_header
  6        where status='ONLINE') DF
  7  where LF.group# = L.group#
  8  and L.first_change# >= DF.min_checkpoint_change#;

no rows selected
SQL>select * from v$recover_file;
no rows selected
SQL>

备份控制文件,system表空间,redo03.log,尝试清除redo03.log,数据库正常打开

SQL>alter database clear logfile group 3;

SQL>alter database open;

Completed: ALTER DATABASE   MOUNT
Mon Jun 27 13:41:25 2016
alter database clear logfile group 3
Clearing online log 3 of thread 1 sequence number 66
Completed: alter database clear logfile group 3
Mon Jun 27 13:41:36 2016
alter database open
Mon Jun 27 13:41:37 2016
Thread 1 advanced to log sequence 69 (thread open)
Thread 1 opened at log sequence 69
  Current log# 3 seq# 69 mem# 0: D:\APP\ORADATA\REDO03.LOG
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Mon Jun 27 13:41:37 2016
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is AL32UTF8
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Mon Jun 27 13:41:45 2016
QMNC started with pid=19, OS id=7340 
Mon Jun 27 13:41:50 2016
Completed: alter database open
Mon Jun 27 13:41:54 2016
Starting background process CJQ0
Mon Jun 27 13:41:54 2016
CJQ0 started with pid=23, OS id=4952 
Mon Jun 27 13:41:57 2016

小结:不论在什么情况下,都要认真对待数据库,你对她好,她也就对你好,关爱是相互的。有时换一种方法可能会更好



关键词:recover 

相关文章

RMAN备份脚本样本
ORA-600 【2662】
Oracle Database Recover Check
如何用BBED使Offline的数据文件Online
ORA-00338/ORA-00312
Top