前言

有一套 Oracle 11GR2 DataGuard 单机环境,巡检发现 alert 日志报错如下:

1
2
3
4
Wed Aug 27 09:53:02 2025
Errors in file /u01/app/oracle/diag/rdbms/orcldg/orcldg/trace/orcldg_arc2_3637.trc:
ORA-00314: log 5 of thread 1, expected sequence# 119864 doesn't match 119862
ORA-00312: online log 5 thread 1: '/u01/app/oracle/oradata/redostd05.log'

查看错误定义:

1
2
3
4
[oracle@lucifer:/home/oracle]$ oerr ora 314
00314, 00000, "log %s of thread %s, expected sequence# %s doesn't match %s"
// *Cause: The online log is corrupted or is an old version.
// *Action: Find and install correct version of log or reset logs.

看报错是说在线日志损坏或者版本过旧,需要 reset 日志。

问题分析

检查备库当前在线重做日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SQL> set line2222 pages1000
SQL> select * from v$standby_log;

GROUP# DBID THREAD# SEQUENCE# BYTES BLOCKSIZE USED ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME LAST_CHANGE# LAST_TIME
---------- ---------------------------------------- ---------- ---------- ---------- ---------- ---------- --- ---------- ------------- --------- ------------ --------- ------------ ---------
5 UNASSIGNED 1 0 209715200 512 0 NO UNASSIGNED
6 1584260213 1 120011 209715200 512 17433088 YES ACTIVE 7.7784E+10 01-SEP-25 7.7784E+10 01-SEP-25
7 1584260213 2 119841 209715200 512 144156672 YES ACTIVE 7.7784E+10 01-SEP-25 7.7784E+10 01-SEP-25
8 UNASSIGNED 2 0 209715200 512 0 NO UNASSIGNED
9 UNASSIGNED 1 0 209715200 512 0 NO UNASSIGNED
10 UNASSIGNED 2 0 209715200 512 0 NO UNASSIGNED

SQL> col member for a100
SQL> select group#,member from v$logfile;

GROUP# MEMBER
---------- ----------------------------------------------------------------------------------------------------
1 /u01/app/oracle/oradata/redo01.log
2 /u01/app/oracle/oradata/redo02.log
3 /u01/app/oracle/oradata/redo03.log
4 /u01/app/oracle/oradata/redo04.log
5 /u01/app/oracle/oradata/redostd05.log
6 /u01/app/oracle/oradata/redostd06.log
7 /u01/app/oracle/oradata/redostd07.log
8 /u01/app/oracle/oradata/redostd08.log
9 /u01/app/oracle/oradata/redostd09.log
10 /u01/app/oracle/oradata/redostd10.log

可以看到 alert 中报错的日志文件对应的是 5 号日志。

解决方案

执行 clear 日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL> Alter database recover managed standby database cancel;

Database altered.

SQL> alter database clear logfile group 5;

Database altered.

SQL> recover managed standby database using current logfile disconnect;
Media recovery complete.

-- 检查在线日志使用情况
SQL> set line2222 pages1000
SQL> select * from v$standby_log;
GROUP# DBID THREAD# SEQUENCE# BYTES BLOCKSIZE USED ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME LAST_CHANGE# LAST_TIME
---------- ---------------------------------------- ---------- ---------- ---------- ---------- ---------- --- ---------- ------------- --------- ------------ --------- ------------ ---------
5 1584260213 1 120012 209715200 512 64310272 YES ACTIVE 7.7786E+10 01-SEP-25 7.7786E+10 01-SEP-25
6 UNASSIGNED 1 0 209715200 512 0 NO UNASSIGNED
7 1584260213 2 119843 209715200 512 103357952 YES ACTIVE 7.7786E+10 01-SEP-25 7.7786E+10 01-SEP-25
8 UNASSIGNED 2 0 209715200 512 0 NO UNASSIGNED
9 UNASSIGNED 1 0 209715200 512 0 NO UNASSIGNED
10 UNASSIGNED 2 0 209715200 512 0 NO UNASSIGNED

目前 alert 没有再报错,后续持续观察,确定问题是否完全解决!


参考 MOS 文章:ORA-00314: LOG 404 OF THREAD 4, EXPECTED SEQUENCE# 33808 DOESN’T MATCH 33543 (Doc ID 1077564.1)