ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 丢失重做日志怎么处理

丢失重做日志怎么处理

原创 Linux操作系统 作者:foxmile 时间:2008-01-27 18:56:46 0 删除 编辑
OS:WINDOWS XP SP2
DB:ORACLE 9.2.0.1
联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。

损坏当前联机日志:
归档模式下当前日志的损坏有两种情况,
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B. 通过强制性恢复,但是可能导致数据库不一致。
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\zero>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期日 1月 27 16:24:56 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已连接。
SP2-0614: 服务器版本太低,不能实现此功能
SP2-0614: 服务器版本太低,不能实现此功能
SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。

1、进行非当前重做日志的故障模拟和恢复
SQL> select group#,sequence#,archived,status from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        226 YES INACTIVE
         2        227 NO  CURRENT
         3        225 YES INACTIVE
         4        224 YES INACTIVE

SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL> host move LOGZERO4.ORA logzero04.ora.bak
系统找不到指定的文件。

SQL> host move D:\oracle\oradata\zero\LOGZERO4.ORA D:\oracle\oradata\zero\logzero04.ora.bak

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 4 (线程 1) 的成员
ORA-00312: 联机日志 4 线程 1: 'D:\ORACLE\ORADATA\ZERO\LOGZERO4.ORA'


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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        226 YES INACTIVE
         2        227 NO  INVALIDATED
         3        225 YES INACTIVE
         4        224 YES INACTIVE

SQL> alter database clear logfile group 4;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> host del D:\oracle\oradata\zero\logzero04.ora.bak;

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        226 YES INACTIVE
         2        227 YES INACTIVE
         3        225 YES INACTIVE
         4        228 NO  CURRENT

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> select group#,sequence#,archived,status from v$log;
select group#,sequence#,archived,status from v$log
*
ERROR 位于第 1 行:
ORA-01034: ORACLE not available

2、进行当前重做日志(未归档)故障模拟和恢复(有数据库备份)

SQL> host move D:\oracle\oradata\zero\LOGZERO4.ORA D:\oracle\oradata\zero\logzero04.ora.bak

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 4 (线程 1) 的成员
ORA-00312: 联机日志 4 线程 1: 'D:\ORACLE\ORADATA\ZERO\LOGZERO4.ORA'


SQL> alter database clear unarchived logfile group 4;
alter database clear unarchived logfile group 4
*
ERROR 位于第 1 行:
ORA-00313: 无法打开日志组 4 (线程 1) 的成员
ORA-00312: 联机日志 4 线程 1: 'D:\ORACLE\ORADATA\ZERO\LOGZERO4.ORA'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        226 YES INACTIVE
         2        227 YES INACTIVE
         3          0 YES UNUSED
         4          0 NO  CLEARING_CURRENT

SQL> alter database clear unarchived logfile group 1;

数据库已更改。

SQL> alter database clear unarchived logfile group 4;
alter database clear unarchived logfile group 4
*
ERROR 位于第 1 行:
ORA-00313: 无法打开日志组 4 (线程 1) 的成员
ORA-00312: 联机日志 4 线程 1: 'D:\ORACLE\ORADATA\ZERO\LOGZERO4.ORA'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。

由于之前没有备份,所以在此处暂时物理恢复。
SQL> host move D:\oracle\oradata\zero\logzero04.ora.bak D:\oracle\oradata\zero\LOGZERO4.ORA

SQL> alter database open;

数据库已更改。

完成之后,在rman里面做一次数据库全备份。然后进行下面操作

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host move D:\oracle\oradata\zero\LOGZERO4.ORA D:\oracle\oradata\zero\logzero04.ora.bak

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter database clear unarchived logfile group 4;

数据库已更改。

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        230 NO  CURRENT
         2        227 YES INACTIVE
         3        229 YES INACTIVE
         4          0 YES UNUSED

SQL> host del D:\oracle\oradata\zero\logzero04.ora.bak;

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1        230 NO  CURRENT
         2        227 YES INACTIVE
         3        229 YES INACTIVE
         4          0 YES UNUSED

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host move D:\oracle\oradata\zero\REDO01.LOG D:\oracle\oradata\zero\REDO01.LOG.BAK

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'D:\ORACLE\ORADATA\ZERO\REDO01.LOG'


SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR 位于第 1 行:
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'D:\ORACLE\ORADATA\ZERO\REDO01.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          0 NO  CLEARING_CURRENT
         2        227 YES INACTIVE
         3        229 YES INACTIVE
         4          0 YES UNUSED

SQL> recover database until cancel;
完成介质恢复。
SQL> alter database open resetlogs;

数据库已更改。

SQL> host del D:\oracle\oradata\zero\redo01.log.bak;

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          1 YES INACTIVE
         2          2 YES INACTIVE
         3          3 NO  CURRENT
         4          0 YES UNUSED

SQL> alter system archive log current;

系统已更改。

SQL> alter system archive log current;

系统已更改。

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          2 YES INACTIVE
         3          3 YES INACTIVE
         4          4 YES INACTIVE
注意,在使用resetlogs打开数据库之后,sequence#重置了。

3、进行当前重做日志(未归档)故障模拟和恢复(无数据库备份)


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host move D:\oracle\oradata\zero\REDO01.LOG D:\oracle\oradata\zero\REDO01.LOG.BAK

SQL> host move D:\oracle\oradata\zero\REDO01.LOG.BAK D:\oracle\oradata\zero\REDO01.LOG

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> select group#,sequence#,archived,status from v$log;

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

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host move D:\oracle\oradata\zero\REDO01.LOG D:\oracle\oradata\zero\REDO01.LOG.BAK

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'D:\ORACLE\ORADATA\ZERO\REDO01.LOG'


SQL> host move D:\oracle\oradata\zero\REDO01.LOG.BAK D:\oracle\oradata\zero\REDO01.LOG

SQL> alter database open;

数据库已更改。

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

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

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host move D:\oracle\oradata\zero\REDO03.LOG D:\oracle\oradata\zero\REDO03.LOG.BAK

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 3 (线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\ORADATA\ZERO\REDO03.LOG'


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

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

SQL> alter database clear unarchived logfile group 3;
alter database clear unarchived logfile group 3
*
ERROR 位于第 1 行:
ORA-00313: 无法打开日志组 3 (线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\ORADATA\ZERO\REDO03.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> create pfile='d:\init.ora' from spfile;

文件已创建。

SQL> shutdown immediate;
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。

在init.ora里面加入_allow_resetlogs_corruption=TRUE参数。然后利用init.ora启动实例
SQL> startup mount pfile ='d:\init.ora';
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
SQL> recover database until cancel;
完成介质恢复。
SQL> alter database open resetlogs;

数据库已更改。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount pfile ='d:\init.ora';
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
SQL> create spfile from pfile='d:\init.ora';

文件已创建。

SQL> shutdown immediate;
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter system archive log current;

系统已更改。

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 YES INACTIVE
         2          3 YES ACTIVE
         3          1 YES INACTIVE
         4          4 NO  CURRENT

SQL>

至此,数据库恢复完成,但是数据库数据可能会出现不一致。

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

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    106
  • 访问量
    197337