Oracle当前日志组出错,Oracle当前联机日志组损坏的处理

Oracle当前联机日志组损坏的处理

一oracle日志的特性总结

1oracle日志切换规律(从最大sequence#号切换到最小sequence#号)

eg 如下所示:下个当前日志组会是sequence#号为27的5号日志组

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 NO         32 CURRENT

2 YES         28 INACTIVE

3 YES         29 INACTIVE

4 YES         30 INACTIVE

5 YES         27 INACTIVE

6 YES         31 INACTIVE

6 rows selected.

SQL> alter system switch logfile ;

System altered.

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 YES         32 ACTIVE

2 YES         28 INACTIVE

3 YES         29 INACTIVE

4 YES         30 INACTIVE

5 NO         33 CURRENT

6 YES         31 INACTIVE

6 rows selected.

2快速转换oracle日志组状态active为inactive

日志组切换后,上一个当前日志组状态由current变成active,实际上是由于当前数据文件头部的scn值还位于状态为active日志组的low scn 和next scn 内,所以我们此刻如果立即发起alter sytem checkpoint 命令推进数据文件头部scn  变可使日志状态由active 变为inactive。

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 YES         32 INACTIVE

2 YES         34 INACTIVE

3 YES         35 INACTIVE

4 NO          36 CURRENT

5 YES         33 INACTIVE

6 YES         31 INACTIVE

SQL> alter system switch logfile;

System altered.

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 YES         32 INACTIVE

2 YES         34 INACTIVE

3 YES         35 INACTIVE

4 YES         36 ACTIVE

5 YES         33 INACTIVE

6 NO          37 CURRENT

6 rows selected.

查询数据文件头部scn情况如下:

SQL> select hxfil,fhscn from x$kcvfh;

HXFIL FHSCN

---------- ----------------

1 2781239221

2 2781239221

3 2781239221

4 2781239221

5 2781239221

6 2781239221

7 2781239221

8 2781239221

11 2781239221

12 2781239221

13 2781239221

SQL> select sequence#,first_change#,next_change# from v$log_history;

SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#

---------- ------------- ------------

32    2781218249   2781218300

33    2781218300   2781219174

34    2781219174   2781219184

35    2781219184   2781239220

36    2781239220   2781239424

数据文件头部的scn:2781239221处于sequence号为36的日志scn范围内 2781239220   2781239424

SQL> alter system checkpoint;

System altered.

SQL> select hxfil,fhscn from x$kcvfh;

HXFIL FHSCN

---------- ----------------

1 2781239456

2 2781239456

3 2781239456

4 2781239456

5 2781239456

6 2781239456

7 2781239456

8 2781239456

11 2781239456

12 2781239456

13 2781239456

11 rows selected.

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 YES         32 INACTIVE

2 YES         34 INACTIVE

3 YES         35 INACTIVE

4 YES         36 INACTIVE

5 YES         33 INACTIVE

6 NO          37 CURRENT

3clear日志组的执行条件

clear的日志组状态不能是acitve或者当前日志组

eg:

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 NO          38 CURRENT

2 YES         34 INACTIVE

3 YES         35 INACTIVE

4 YES         36 INACTIVE

5 YES         33 INACTIVE

6 YES         37 ACTIVE

SQL> alter database clear logfile group 6;

alter database clear logfile group 6

*

ERROR at line 1:

ORA-01624: log 6 needed for crash recovery of instance CRM (thread 1)

ORA-00312: online log 6 thread 1: '/oracle/CRM2/CRM/redo06.log'

ORA-00312: online log 6 thread 1: '/oracle/CRM2/CRM/redo06b.log'

二数据库一直open当前联机日志组内成员全部损坏

此种情况最终就是日志不能切换,影响到数据库的应用时我们才可能发现。如下所示日志状态:

1 数据库日志状态如下:

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 NO          44 INACTIVE

2 NO          40 INACTIVE

3 NO          41 INACTIVE

4 NO          42 INACTIVE

5 NO          45 CURRENT

6 NO          43 INACTIVE

6 rows selected.

2 使用alter database clear unarchived logfile group n 命令处理sequence#号为最小的一组日志,等待片刻,让所有未归档的日志归档完成,(当告警日志中出现如下字样Archiver process freed from errors. No longer stopped)之后查询日志状态如下:

SQL> alter database clear unarchived logfile group 2;

Database altered.

select group#,archived,sequence#,status from v$log

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 YES         44 INACTIVE

2 YES          0 UNUSED

3 YES        41 INACTIVE

4 YES        42 INACTIVE

5 NO         45 CURRENT

6 YES         43 INACTIVE

注意虽然现在的日志归档状态已经正常,但初始化后的日志组2内的日志文件可能并未生效。我们再数次切换下日志,告警文件便会产生如下报错:

ORA-00314: log 2 of thread 1, expected sequence# 46 doesn't match 0

ORA-00312: online log 2 thread 1: '/oracle/CRM2/CRM/redo02b.log'

ORA-00314: log 2 of thread 1, expected sequence# 46 doesn't match 0

ORA-00312: online log 2 thread 1: '/oracle/app/db1/dbs/log2CRM.dbf'

而此刻的日志归档状态如下:

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 NO          50 INACTIVE

2 NO          46 INACTIVE

3 NO          47 INACTIVE

4 NO          48 INACTIVE

5 NO          51 CURRENT

6 NO          49 INACTIVE

6 rows selected.

总结:以上测试为10g环境,若使用alter database clear unarchived logfile group n初始化了之前的当前日志后,为了避免上面的问题。我们可以通过重启数据库,或者重建该日志组。11g测试没发现此类问题。

三数据库启动时报当前联机日志文件丢失

1

SQL> startup

ORACLE instance started.

Total System Global Area 322961408 bytes

Fixed Size2020480 bytes

Variable Size92277632 bytes

Database Buffers222298112 bytes

Redo Buffers6365184 bytes

Database mounted.

ORA-00313: open failed for members of log group 2 of thread 1

ORA-00312: online log 2 thread 1: '/oracle/app/db1/dbs/log2CRM.dbf'

ORA-00312: online log 2 thread 1: '/oracle/CRM2/CRM/redo02b.log'

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

GROUP# ARC SEQUENCE# STATUS

---------- --- ---------- ----------------

1 YES         50 INACTIVE

2 NO          52 CURRENT

6 YES         49 INACTIVE

4 YES         48 INACTIVE

5 YES         51 INACTIVE

3 YES         47 INACTIVE

6 rows selected.

对该日志组进行初始化。不过我们可以执行基于取消的恢复如下所示:

SQL> alter database clear unarchived logfile group 2;

alter database clear unarchived logfile group 2

*

ERROR at line 1:

ORA-00313: open failed for members of log group 2 of thread 1

ORA-00312: online log 2 thread 1: '/oracle/CRM2/CRM/redo02b.log'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

ORA-00312: online log 2 thread 1: '/oracle/app/db1/dbs/log2CRM.dbf'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

2 执行基于取消的恢复

SQL> recover database until cancel;

Media recovery complete.

SQL> alter database open resetlogs;

Database altered.

总结:

1  对于当前日志组所有成员损坏的情况,按上面方式处理即可。不过仍需注意的是,初始化日志组后,会丢失该日志组对应的归档,造成归档不连续,应该做一次全库备份。

2  对于当前日志组成员的损坏,切换当前日志后,drop掉损坏的日志成员然后再添加新的成员。

3 对于非当前的日志组成员损坏,直接drop掉损坏的日志成员,然后添加新的日志成员。

4  对于非当前日志组损坏的情况,可以直接用alter database clear unarchived logfile group n 或者alter database clear logfile group n 进行初始化处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值