日志文件的修复小结


SYS@ENMOEDU> select GROUP#, MEMBERS,STATUS from v$log; 

GROUP# MEMBERS STATUS 
---------- ---------- ---------------- 
1 1 INACTIVE 
2 1 CURRENT 
3 1 INACTIVE

INACTIVE  :表时实例恢复不再需要此组日志文件,可以覆盖
active   :表示日志组中仍有实例恢复所需的重做数据
 CURRENT:表示 正在被LGWR使用的日志组
一:  数据库联机的情况下,丢失 INACTIVE 日志文件的
1. SYS@ENMOEDU> select GROUP#, MEMBERS,STATUS from v$log; 

GROUP# MEMBERS STATUS 
---------- ---------- ---------------- 
1 1 INACTIVE 
2 1 CURRENT 
3 1 INACTIVE
SYS@ENMOEDU> select GROUP# ,STATUS,MEMBER from v$logfile; 

GROUP# STATUS 
---------- ------- 
MEMBER 
-------------------------------------------------------------------------------- 

/u01/app/oracle/oradata/ENMOEDU/redo01.log 


/u01/app/oracle/oradata/ENMOEDU/redo02.log 


/u01/app/oracle/oradata/ENMOEDU/redo03.log
2.删除第一组
SYS@ENMOEDU> ! rm /u01/app/oracle/oradata/ENMOEDU/redo01.log 
3.发现丢失后,没等数据库反应过来,就立即恢复。 删掉重建
SYS@ENMOEDU> alter database drop logfile group 1; 

Database altered. 
SYS@ENMOEDU> alter database add logfile group 1 ('/u01/app/oracle/oradata/ENMOEDU/redo01.log') SIZE 50m; 

Database altered.
4.恢复完成
SYS@ENMOEDU> alter system switch logfile; 

System altered. 
SYS@ENMOEDU> select GROUP#, MEMBERS,STATUS from v$log; 

GROUP# MEMBERS STATUS 
---------- ---------- ---------------- 
1 1 CURRENT 
2 1 ACTIVE 
3 1 INACTIVE 
二:数据库联机下,删除 INACTIVE 日志组,重启数据库后恢复
1,制造环境,先看日志状态
SYS@ENMOEDU> select GROUP#, MEMBERS,STATUS from v$log; 

GROUP# MEMBERS STATUS 
---------- ---------- ---------------- 
1 1 CURRENT 
2 1 INACTIVE 
3 1 INACTIVE 

SYS@ENMOEDU> select GROUP# ,STATUS, MEMBER from v$logfile; 

GROUP# STATUS 
---------- ------- 
MEMBER 
-------------------------------------------------------------------------------- 

/u01/app/oracle/oradata/ENMOEDU/redo01.log 


/u01/app/oracle/oradata/ENMOEDU/redo02.log 


/u01/app/oracle/oradata/ENMOEDU/redo03.log 


SYS@ENMOEDU> ! rm /u01/app/oracle/oradata/ENMOEDU/redo02.log 

SYS@ENMOEDU> ! ls /u01/app/oracle/oradata/ENMOEDU/redo02.log 
ls: /u01/app/oracle/oradata/ENMOEDU/redo02.log: No such file or directory 

2.重启数据库,让数据库发现已经丢失了日志文件
SYS@ENMOEDU> shu immediate 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SYS@ENMOEDU> startup            启动时只能到mount  (只是看着应该是mount 状态,其实数据库目前的状态是shutdown状态,)
ORACLE instance started. 

Total System Global Area 422670336 bytes 
Fixed Size 1345380 bytes 
Variable Size 343935132 bytes 
Database Buffers 71303168 bytes 
Redo Buffers 6086656 bytes 
Database mounted. 
ORA-03113: end-of-file on communication channel 
Process ID: 10779 
Session ID: 125 Serial number: 5
3.因为没有明确不能open的原因,所以你应先看一下alert日志,我们会发现问题原因。
[ oracle@ENMOEDU trace]$ tail -100 alert_ENMOEDU.log
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo02.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
4.对2号日志组执行clear 操作,

对于这类非当前日志可以直接clear,系统会重新自动生成一个redo文件。

SYS@ENMOEDU> alter database clear logfile group 1;         #验证了前面的说法,此时确实是在shutdown状态
alter database clear logfile group 1 

ERROR at line 1: 
ORA-01034: ORACLE not available 
Process ID: 0 
Session ID: 0 Serial number: 0 


SYS@ENMOEDU> startup mount     
ORACLE instance started. 

Total System Global Area 422670336 bytes 
Fixed Size 1345380 bytes 
Variable Size 343935132 bytes 
Database Buffers 71303168 bytes 
Redo Buffers 6086656 bytes 
Database mounted.
SYS@ENMOEDU> alter database clear logfile group 2;                  #删除后重建

Database altered. 
5.查看结果    发现已经有了物理文件,恢复成功
SYS@ENMOEDU> ! ls /u01/app/oracle/oradata/ENMOEDU/*.log 
/u01/app/oracle/oradata/ENMOEDU/redo01.log 
/u01/app/oracle/oradata/ENMOEDU/redo02.log
 /u01/app/oracle/oradata/ENMOEDU/redo03.log 
三:丢失current状态的日志文件。
1.先查状态
SYS@ENMOEDU> select GROUP# ,STATUS, MEMBER from v$logfile; 

GROUP# STATUS 
---------- ------- 
MEMBER 
-------------------------------------------------------------------------------- 

/u01/app/oracle/oradata/ENMOEDU/redo01.log 


/u01/app/oracle/oradata/ENMOEDU/redo02.log 


/u01/app/oracle/oradata/ENMOEDU/redo03.log 


SYS@ENMOEDU> select GROUP#, MEMBERS,STATUS from v$log; 

GROUP# MEMBERS STATUS 
---------- ---------- ---------------- 
1 1 CURRENT 
3 1 INACTIVE 
2 1 UNUSED 
2,1号日志组是当前日志组,删掉
SYS@ENMOEDU> ! rm /u01/app/oracle/oradata/ENMOEDU/redo01.log
3.做DML操作,生成日志
SYS@ENMOEDU> create table hr.t tablespace users as select * from dba_objects where 1=2;
SYS@ENMOEDU> insert into hr.t select * from dba_objects;
4.尝试去删掉该日志组,然后再重新建立日志组,发现不成功,因为还没有归档,
YS@ENMOEDU> alter database drop logfile group 1; 
alter database drop logfile group 1 

ERROR at line 1: 
ORA-01623: log 1 is current log for instance ENMOEDU (thread 1) - cannot drop 
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/ENMOEDU/redo01.log' 
解决办法1  既然它是因为归档而造成的,那自然想到可以将数据库改成非归档模式,然后再删掉重建,
SYS@ENMOEDU> alter database noarchivelog;
SYS@ENMOEDU> alter database drop logfile group 1;
SYS@ENMOEDU> alter database add logfile group 1 ('/u01/app/oracle/oradata/ENMOEDU/redo01.log') size 50m;
解决办法2:采用recover 的方式完成重做日志恢复,
SYS@ENMOEDU>  recover database until cancel; 
Media recovery complete.
SYS@ENMOEDU> alter database open resetlogs;        #resetlogs 会把日志序号清空,从头开始,是让控制文件,日志文件的SCN号向数据文件靠 ,也就是数据文件的scn号  更新一点

Database altered. 
SYS@ENMOEDU> ! ls /u01/app/oracle/oradata/ENMOEDU/redo01.log            #发现删掉的日志组1 已经回来。
/u01/app/oracle/oradata/ENMOEDU/redo01.log 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29654823/viewspace-1252691/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29654823/viewspace-1252691/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值