[Oracle] Inactive联机日志文件丢失如何恢复?

联机日志文件Inacitve状态表示这个日志包含的数据修改已经同步到数据文件中,实例恢复时已不需要它,所以它的丢失不会造成任何的数据丢失,但是会造成数据库无法打开,解决方法是把丢失的inactive删除掉,重新添加新的联机日志。

1)模拟灾难
首先查看log的状态:
SQL> select group#,sequence#,status from v$log;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1          1 INACTIVE
         2          2 INACTIVE
         3          3 CURRENT
Group#1的状态为inactive,我们找出它所对应的磁盘文件:
SQL> select group#,member from v$logfile where group#=1;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 I:\INTEL_DATA\O04DMS0\REDO01.O04DMS0
关闭数据库:
SQL> shutdown immediate;
把REDO01.O04DMS0文件在操作系统级别删除。

2)根据错误信息定位问题
启动数据库会出现以下错误:
SQL> startup
ORACLE instance started.

Total System Global Area  281018368 bytes
Fixed Size                  1296292 bytes
Variable Size             251660380 bytes
Database Buffers           25165824 bytes
Redo Buffers                2895872 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312:online log 1 thread 1:'I:\INTEL_DATA\O04DMS0\REDO01.O04DMS0'

从以上错误信息中,可以看到联机日志文件丢失导致无法打开数据库,查一下丢失日志的状态:

SQL> select group#,sequence#,status from v$log where group#=1;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1          1 INACTIVE

幸运地是,丢失的联机日志状态为inactive,那么我们不需要做什么,只要删除它即可,但是最好在删除它之前先增加一组联机日志:

SQL> alter database add logfile group 4 ('I:\INTEL_DATA\O04DMS0\REDO04.O04DMS0') size 100M;

Database altered.

然后把丢失的联机日志删除:

SQL> alter database drop logfile group 1;

Database altered.

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

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         2          2 INACTIVE
         4          0 UNUSED
         3          3 CURRENT

现在可以打开数据库:

SQL> alter database open;

Database altered.

新增加的Group#4的状态时unused,做几次日志切换使其处于current状态。

===========================

还有一种解决方法更简单,不用删除、增加,直接清除Group1即可,语句如下:

SQL> alter database clear logfile group 1;

你可能感兴趣的:(oracle,恢复,日志文件)