Redo Log File(inactive、active)损坏,处理恢复对策

redolog的生命周期中共有四种状态:
current  -> 正在使用的
active   -> 非正在使用的,对应的Dirty Block还没有完全写入到数据文件中
inactive -> 非正在使用的,可以覆盖的,Dirty Block已经完全写入。
unused   -> 没有使用过的
-- 查看redolog状态
SQL> select group#,status from v$log;

模拟三种状态下redolog丢失,处理方案:

一、inactive 情况   (Inactive表示Dirty Block已经完全写入。)

-- 查看redolog状态
SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT
         3 UNUSED
SQL> 
col member for a45;
select group#,status,type,member from v$logfile;

GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- ---------------------------------------------
         3         ONLINE  /home/oracle/app/oradata/orcl/redo03.log
         2         ONLINE  /home/oracle/app/oradata/orcl/redo02.log
         1         ONLINE  /home/oracle/app/oradata/orcl/redo01.log

--模拟 inactive 状态丢失
[[email protected] orcl]$ rm -rf /home/oracle/app/oradata/orcl/redo01.log
-- inactive  丢失后的数据库症状
[[email protected] trace]$ tail -f alert_orcl.log 
Errors in file /home/oracle/app/diag/rdbms/orcl/orcl/trace/orcl_m000_25727.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: ‘/home/oracle/app/oradata/orcl/redo01.log‘
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> alter system switch logfile; (多切几次日志后,会话hang住)
SQL> conn andy/andy  (用户登录不进去)
ERROR:
ORA-00257: archiver error. Connect internal only, until freed.

Warning: You are no longer connected to ORACLE.
--处理流程
SQL> alter database clear logfile group 1 ;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-00350: log 1 of instance orcl (thread 1) needs to be archived
ORA-00312: online log 1 thread 1: ‘/home/oracle/app/oradata/orcl/redo01.log‘

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

GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1    4 NO  INACTIVE
2    5 NO  INACTIVE
3    6 NO  CURRENT

SQL> alter database clear unarchived logfile group 1;

Database altered.
-- 检查redo自否正常创建
[[email protected] ~]$ cd /home/oracle/app/oradata/orcl/
[[email protected] orcl]$ ll redo*
-rw-r-----. 1 oracle oinstall 52429312 Mar 25 13:44 redo01.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 25 13:19 redo02.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 25 13:36 redo03.log
SQL> alter system switch logfile;

System altered.
SQL> /
SQL> /
SQL> /
SQL>  select group#,sequence#,archived,status from v$log;

GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1   10 YES INACTIVE
2   11 YES INACTIVE
3   12 NO  CURRENT
数据库恢复正常,OK。

————————————————————————————————————————————————————————

二、 active 情况 (Active是说日志组已经不是当前日志组,但是Redo Log Entry对应的Dirty Block还没有完全写入到数据文件中。)
--切换日志直至 redolog 的 status 出现 ACTIVE
SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

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

GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1   13 YES ACTIVE
2   14 NO  CURRENT
3   12 YES ACTIVE
--模拟 ACTIVE 状态的 redolog 丢失
[[email protected] orcl]$ rm -rf redo01.log
--数据库状态
[[email protected] trace]$ tail -f alert_orcl.log
Errors in file /home/oracle/app/diag/rdbms/orcl/orcl/trace/orcl_arc2_23552.trc:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: ‘/home/oracle/app/oradata/orcl/redo01.log‘
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Master background archival failure: 313
SQL> alter system switch logfile;   (多次切换redolog,发现多次以后会话 hang 住)
--处理过程
SQL> select group#,sequence#,archived,status from v$log;

GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1   16 NO  INACTIVE
2   17 NO  INACTIVE
3   18 NO  CURRENT

SQL> alter database clear unarchived logfile group 1;
--检查redolog是否正常生成
[[email protected] orcl]$ ll redo*
-rw-r-----. 1 oracle oinstall 52429312 Mar 25 14:31 redo01.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 25 14:32 redo02.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 25 14:31 redo03.log
--多次切换日志,看数据库是否正常
SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

OK,一切正常。

时间: 2024-10-14 07:22:54

Redo Log File(inactive、active)损坏,处理恢复对策的相关文章

【oracle】oracledba16 The redo log file should belong to an inactive group.

Because of hardware failure, you decided to drop a redo log memb er from the database. Which condition should be met to drop a redo log file? A. The redo log file should belong to an active group. B. The redo log file should belong to an inactive gro

oracle联机重做日志文件(online redo log file)

oracle联机重做日志文件(online redo log file几乎所有的发生在oracle的内部变化都记录在online  redo log file中,oracle使用 这些 redo log groups 去恢复数据库,因此它们是非常的重要. 联机重做日志文件的主要工作是:备份数据,1:记录所有的数据改变2:提供了一种恢复机制3:一定是被组织成组的4:至少有两组联机重做日志文件 每一个redo  log 是被分配到 组中, oralce 一次值写一个 online redo log

同时丢失参数文件、控制文件及redo log file的不完全恢复(有数据文件的热备和归档)

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/30839817 ##########恢复前的准备工作 1.做个热备 select 'alter tablespace '||tablespace_name|| ' begin backup;' ||chr(10)|| 'host cp '||file_name||' /backup' ||chr(10)|| 'alter tablespace '||tablespace_name|| '

oracle rac下调节redo log file 文件大小

rac下调节redo log file 文件大小 (1)查看当前日志信息: select * from v$logfile; (步骤2中得路径可以在这里MEMBER列看到,redo文件名自己命名,比如,redo07.log) (注意:日志组现在是6组) (2)为各个节点添加日志文件:(每个节点添加三组日志) 1.节点1 ALTER DATABASE ADD LOGFILE THREAD 1 group 7 '+data/....(单引号里面是路径)′ size 2048m; ALTER DATA

Oracle在线 redo log文件丢失后的恢复

今天一个开发库启动不了了,发过来报错一看是日志文件损坏了(见下图),接着说了一下前因后果.说是年前服务器掉电了,然后就再没有启动起来过.今天有人用才想到要处理. 先说一下大体的思路,如果损坏的redo log是INACTIVE状态的,也就是实例崩溃恢复用不到的redo log,那处理起来比较容易,直接alter database clear logfile group #;或alter database clear unarchived logfile group #;重建日志组就行了.建议重建

Overview of the Online Redo Log --- 在线重做日志概述

对于 oracle 恢复来说最重要的数据结构莫过于online redo log(在线重做日志), 在线重做日志包含至少两个预先分配好的,用来存储数据库变化的文件.在线重做日志记录着数据文件中的变化. Online Redo Log有什么作用 Oracle 数据库通过在线重做日志文件来确保数据不丢失.特别是当实例失败后, oracle数据库可以通过在线重做日志文件恢复已经提交但尚未写到数据文件中的数据. Oracle 数据库把每个事务先同步写到 redo log buffer,然后再写到在线重做

oracle redo log的维护

Oracle online redo log是Oracle数据库中核心文件之一.在数据库操作中,只要有任何的数据块变化,都会生成相应的redo entry.redo entry首先保存在log buffer中,最后由lgwr进程写入到Redo log里面. Online Redo Log的维护和性能是影响Oracle工作的一个重要方面.本文从日常维护角度出发,介绍几个常见的场景处理方法. 1.Redo Log Group和Redo Log Group Member Redo Log在数据库中的作

ORACLE AWR报告之 log file sync等待事件优化的总结【转自ITPUB】

来自白大师(白鳝)对log file sync等待事件优化的总结,供各位puber们学习参考: 一. log file sync平均等待事件时间超过7ms,如果等待时间过长,说明log write每次写入的时间过长,如果能够优化redo日志文件存储,使之存放在更快的磁盘上,就可以减少这个等待事件的单次等待时间.(RAID 5--> RAID 10)   当无法通过优化redo日志的I/O性能来解决问题,或者优化了redo日志的I/O性能后还是无法达到我们的预期,那么该如何处理呢? 二. 有经验的

Oracle更改redo log的大小

因为数据仓库ETL过程中,某个mapping的执行时间超过了一个小时, select event,count(*) fromv$session_wait group by event order bycount(*) desc 发现日志切换占用了大量的时间,估尝试增大redo log的大小. (1) redo log的大小可以影响  DBWR 和 checkpoint : (2)larger redo log files provide better performance. Undersize